This is more like a letter to my freshman self. I am a computer science senior now. And I have made a thousand mistakes that I would love to tell other freshmen and sophomore from not very great colleges (probably the tier II and tier III) in India.
(This blog is assuming you know how to print hello world in some programming language)
If you are from a not-so-famous university or college, have not taken computer science as major, or don't even attend college, you might feel like getting a good SDE job (because that is what you are studying for, right?) is a hard thing. Well, it depends.
You are among the 1000s of people like you, who are fighting the similar battles like you are. Even though you are the main character of your life, there are other main characters in their own story, which you share too. So it is all intermixed. How do you differentiate from them? How do you not be a part of the herd, and set yourself apart, and noticeable?
Learn. It is the mantra. Start learning, something, anything, right now. When you are given an opportunity, to attend a hackathon, a workshop, a seminar... grab it. If you learn something new from it, do it. Since you are a newbie, no one is expecting you to have an in depth knowledge about everything. But it is always good to know something rather than nothing. Anything is intimidating? Watch YouTube videos of it.
What to learn? Well, now asking the right questions. So you have observed enough, looked around. Emerging and developing technologies like ML, AI, BlockChain, Cloud computing, yada yada yada, nothing felt like striking a cord? Though it is always good to have a little experience in these emerging technologies, it is not necessary to start with them. They are interesting, but hard to grasp without strong fundamentals, and dedication. So if you didn't feel like they are your cup of tea, let me tell you about a few domains you can actually dig in, and will prove helpful in the future.
Competitive Coding / DSA
So you wanna be a software engineer at Google? Go to AlgoExpert- just kidding.
So competitive programming is a mind sport according to a lot of the top coders. It is basically solving a given problem using code, within the given time period.
Now don't get me wrong. CP is hard, but it is worth knowing and practicing if you are aiming those FAANG companies. (Facebook, Apple, Amazon, Netflix and Google).
Most competitive programmers got good at it after years of practice, so don't feel sad if you weren't able to solve a few questions. What matters in CP is that you try try try.
The interesting thing about CP is, even if you are not a particularly excellent competitive programmer, the experience in CP will give you an upper hand in most interviews you are gonna face in your life. Interviews are not as hard as CP (generally) so if you practice for CP, interviews are gonna be a piece of cake for you.
This is where I made the mistake. I didn't learn competitive programming and stuff, in my first and second years, thinking I would need the basics, namely trees, graphs, linked lists, and so on, under my belt. I waited for the semesters where these data structures were taught, and by then most of my friends were already good coders. This is because they practiced from youtube, leetcode, geeksforgeeks. They also got placed even before the 4th year started. I would attribute it to their practice of CP and problem solving. There are thousands of easily understandable videos on youtube, books on the internet, and courses on udemy. It all just needs a google search. To start with, you can see videos by William Lin or Nick White, among many, many others.
Front end Development
This is another interesting domain, and was the first thing I started with. Developing is really cool if you love to build things from scratch.
Front end, I wouldn't say is the easiest, but is the relatively easiest among all the forms of development. It will give you a head start on what development really is. But beaware, don't be fooled by the instant results of it. The thing about of front end is that there are n number of frameworks and languages you can work on. The mistake I did was to learn one, and then be done with it. No! The key to surviving in Tech Industry is to be updated about technologies you like.
To begin with, you can start learning HTML, CSS and JS (a little bit at least) and start making static websites. Static, because it doesn't change, and there is no need of input or dynamic changes in it. There are people like Pratham, Jhey, and countless amazing people (you can find on twitter just by searching #css) who make magic with just pure CSS. So front end is amazing to start with, and even expertise in, because you can do freelancing and even earn money. There are many other front end frameworks like react.js and svelte and all that makes your life easier. It is good to have a hold of the basics (HTML, CSS, JS) before jumping into these biggies.
So if you are the stereotypical guy/girl who doesn't like to decorate stuff and come to the logical and nitty gritty of the working of a website, this is for you. Since I am not the said person, backend development is the least ventured domain by me. So my knowledge in it is limited. All I know that, backend is everything that is working behind your website or application. Everything from fetching your data from the server to inputting it to store to server to play a video, backend is a huge task, but highly satisfying too. You do need to know a little bit of front end so as to know how to actually display your work, but otherwise backend is mainly invisible, but essential. There are a thousand of videos on YouTube for the same. I have tried my hand in Django, which is also a great place to start with.
Full Stack Developer
Wow! so you want to make a complete website yourself rather than employing a different developer for front end or backend, then this is your call. A full stack web developer is one who has expertise in both front and back end technologies. It is always good to know more, and full stack developer means a lot of opportunities. There are various technology stacks and you can chose among them, after ample research.
Even though I have not mentioned it exclusively above, you have to learn git and learn how to use GitHub, so that you can harness the power of version control and also contribute to open source. It is a wonderful field with a vibrant community, where everyone, from newbies to veterans, are accepted to contribute. You can also push the projects you make to GitHub, so that people can view it, and work on it if they like. Git is essential for developers, so try to learn it ASAP, obviously, while developing projects.
The list is not obviously over. There are domains like application development (android or iOS) which also has a lot of scope. The benefit of learning development is to get into start-ups and product companies, which usually don't care about your algorithms, but rather your experience. So that brings me to the next point,
Because learning is not enough. Your resume, needs to be attractive, to differentiate yourself from others. In today's world, Certificates of completion of a course has very less value. It will give the interviewer an idea that you know about such technology, but not how much. The how much comes from working on projects. These are the most important aspects of a techie's journey, to have a project. Many better than one. A project proves that you have done something in the respective technology. Even if you have no original idea, do something generic.
[https://workshops.hackclub.com/] here is a list of projects you can start from.
As you do, so you reap. The more you do projects, the more you get to know about the language. Soon you will be able to think of an original idea. And by that time, you will be capable enough to make it from scratch. But till then, work.
There are numerous tutorials on YouTube to start with one along with your studies of these technologies. After deciding what you like, start doing it. Trust me, the gratification of completing a project is worth it.
Other than projects, one important thing is to have an internship. If you are anything like me, finding an internship is hard. Which is why you always have to sharp in terms of time taken to apply, and your resume should be perfect. Since you are a newbie and your resume has nothing, DO PROJECTS. They attract the interviewer, and they might hire you. From an internship, you get unparalleled industry experience before getting a job. This will make you even more suited for a full time job, because you already have some experience in the industry. It is fine if you have no prior experience, apply to 50 internships, and you will surely get at least one. When you get one experience, it adds up with others to increase your chances to getting better and better internships. Never miss an opportunity, apply to Google, Facebook, Amazon even if you have no hope. Better try and fail that regret not trying at all.
Overwhelmed? Don't be. Because you don't have to do it alone. There are many many tech communities having people who are experts in what they do, to people like us. Join one, or two, or all, and try to contact them if you ever feel stuck. The thing about developers is that they are very happy to help, and are always ready to ask clarify your doubts. You don't have to do all this alone, since in a community, you can find people like you, collaborate, and do something together. You can ask around your college, google search, join some discord community, and voila, you are never alone.
But yes, an essential skill, and probably the only one you need to start off, is to, yes, GOOGLE. Try to google everything when you are stuck. Most times, stack-overflow will be there to save you. When not, some other forum. But in the end, you have to try your best to extract the cause of error from google. And only then ask a developer. Because most times, they are also googling their errors :P
Internet is your weapon. Everything is available on internet. If you are overwhelmed by the amount of resources, start with freeCodeCamp. It is a good place to start with, the generous people there are constantly giving knowledge for free. I also bought a course on Udemy by Angela Yu, called Web development bootcamp, to learn full stack web development. It was also worth it so far.
I have said a lot now. There are a lot more that I want to say. These things are probably what you have already heard from a lot of places. But I feel like it is my duty to guide my dear freshmen and newbies to help them not repeat the mistakes I did. I am obviously not a better developer than you are, but I guess at this point of time, I just learnt what not to do.
All the best, and thanks for reading till the end :)