The Hitchhiker's Guide to Computer Science
Hi. Welcome to my blog. First of all congratulations for taking the first step towards learning computer science. In this post, I will be sharing some tips for making the most out of the time you spend learning this subject. If you are an undergraduate student just starting, then you’re definitely at the right place.
Before we begin, first let me tell you about myself because you deserve to know the person whose advice you will be taking. So, here it goes. I completed my undergraduate degree in 2021 majoring in Computer Science & Engineering from Indian Institute of Technology, Jodhpur. I have also been a Google Summer of Code student with SymPy (2019) and LFortran (2021). As of writing this post, I am working as a Software Developer at Quansight Labs. Okay, enough of self bragging. Now let’s talk about something that would be helpful to you.
Since you are just starting with CS, you must be facing many questions like what to do first? Should I do web development, or AI/ML or data structures? Some of you might be hearing about these things for the first time. Well, relax. I will be sharing some generic tips that you can start applying to yourself right after reading this blog. Let’s finally begin. Following are those tips,
-
Learn a programming language - Before doing anything in CS you must learn a programming language. Since your computer will be your dearest friend in your upcoming journey, you must know how to communicate with it. Python can be a good starting point if you don’t have any prior background in programming. The reason is that it’s abstract, you don’t need to worry about several finer details of the working of your computer. It’s more or less the way humans communicate with each other. Though, Python has its own downsides in the sense that it’s a very high level language. To get nearer to a computer you should learn C/C++ after Python, especially its important to get a hold of pointers in these languages. I have added a link to Python and C/C++ in the resources section at the end of this post. You can learn from there.
-
Try Everything - This is simple to hear but hard enough to follow. There are several areas which are a part of CS, some of which I named above. Other than those, there is symbolic computing, numerical computing, android app development and much more. Basically, let’s divide these specific areas into three broad categories - Development, Scientific Computing and Artificial Intelligence. Note that these are the ones which I have tried. There can be more like Network Security. So, fix a time frame for yourself in which you will be touching such broad things. For example, for development you can try taking some short online courses, developing your personal website or app. For artificial intelligence you can learn some linear algebra, probability statistics and take part in some competitions (like Kaggle). In summary, you have to touch different areas in the time frame that you have decided for yourself. Once you are done doing that, retrospect on what you liked the most, what made you forget your sleep and you just went on doing that thing. Yeah, you found your passion which you can focus on.
-
Discrete Mathematics and Data Structures and Algorithms (DSA) - This is a must, irrespective of what you want to pursue under CS. It’s the core of the subject, no matter what you do, you can’t live without it (there are always some exceptions though but still). Discrete mathematics is prior to DSA. No worries if you face difficulty in understanding the proofs, just learn about the important concepts, theorems and move on to DSA. Now, note that DSA and sports programming are not the same. You do not have to be an expert in this. You just need to know the concepts and how to apply them. I would suggest taking an online course in DSA, right after learning a programming language, even if your university provides it formally later on. You can also start doing some practice problems from websites like leetcode.com. Remember this formula, “One problem a day, keeps all your problems in CS away.”. (I know it’s meta, problems keeping problems away)
-
Learn to Learn - Sounds so meta, right? Well, this is a supreme weapon. If you are able to crack this you can do anything. So, how to do it? First gain some experience, follow the above three tips and then read after this line. The way I cracked this is learning while doing projects, not before starting a project. Let me explain. There was this android app development project in my second last semester. I was not at all familiar with android stuff, no idea about Java. Now, one way to approach this is to watch some playlists, take courses. However, instead of doing all that, I just went on to android’s documentation, looked at the tutorial and followed it to set up my environment. Any error I faced, I just googled it up. Regarding Java, since I (and you too by now) already know one programming language, there was no need to take courses in a new one. I started coding in Java to make my App. All that class, methods, function stuff is very much the same across languages. Finer details can be learnt on the fly. So, what I am suggesting is, learn on the go, if you face any difficulty, search on the web and then move on. For writing a simple class in Java, you don’t need to worry about how inheritance works unless you are actually inheriting a class. If you are a beginner you will get the meaning of what I just said sometime later.
-
Grades MATTER - If you are starting your undergraduate degree, then note that your grades will matter, irrespective of your major. Why? You are good at programming, you can build projects then why grades matter at all? Well, here’s what I think. Grades are not reflective of your knowledge. I mean, you get them after spending just 4 - 5 months in a semester. Obviously, it’s a very short period to judge how well you learnt the concepts. However, observe here the above time period is short. Yeah, grades reflect your capability to get things done quickly. They reflect how well you can handle pressure of multiple courses in the same time frame and bring results. But wait. Note that if you are getting good grades then you are great, but if you aren’t then it doesn’t mean you are not good at handling pressure and bringing results. There are other ways to prove your worth like winning hackathons, sports programming competitions, open source programs, etc. But still I’d say, don’t let your GPA fall too low, just keep it to a decent level (like 7-8 out of 10).
-
Some Courses are Important - There are a few courses which are very important in CS if you are planning to work at the core of the subject. Some of them are Operating Systems, Computer Architecture, Computer Networking. If you are not majoring in CS then don’t worry, just learn about the concepts in these courses by reading some online content. But don’t ignore them completely, they are really IMPORTANT.
If you are intimidated that how will you do all of the above quickly. Well, first relax and take a deep breath. I agree there is a lot to do here but it will get easier with time. The more time you spend initially the more time you will have for resting in future. Your learning curve will be like the exponential graph, initially steep and then it will plateau. So, work hard a lot and then watch a lot of Netflix later. 😂. I’d say do things parallely. Divide your day in multiple slots of 2-3 hours and do projects, learn about DSA in those slots. Everything will fall into place. Until then best wishes, have fun in your journey of CS. You will make it for sure. Leaving you with some precious words (unedited) from Mahe. She was an intern at Quansight Labs this summer,
Personally, as a fresher or a junior year student, what I needed to know was that I shouldn’t be overwhelmed by all buzz around AI, ML and blockchain and whatnot. And that I should focus on the basics first. Also, I shouldn’t feel insecure or nervous when somebody seems to know allll this technologies and languages and frameworks , when I don’t even understand recursion properly. I shouldn’t compare my first page with their 10th page. I would have encouraged people to learn stuff by contributing to open source, find great, supportive mentors and a great community of developers in general.
Bye!! Go Learn!!
Resources
- Python - Introduction to Computer Science and Programming in Python. I have taken this course in my first year and it’s the best thing I ever came across. I can vouch for it.
- C - C Programming Tutorials by thenewboston
- C++ - Programming in C++. I have taken this course too. It’s the best if you want to learn almost all the important concepts in C++. He’s one of the best professors.