So you've decided that you'll be studying Computer Science for the next 4 years of your life, maybe you didn't but your parents did, whichever the case, this is the road you'll be travelling now.
I'm writing this blog to share whatever I have learned that might help others.
P.S.A.: I'd rather not guide you on something that I don't know shit about, than misguide you and waste your time, just to brag.
Pre College
So you've got admission in a college, doesn't matter what tier, what matters is that now you'll be an engineering student. At this point you'll be filled with emotions, overwhelmed by the sheer number of resources available, what to learn, how to upskill yourself and all that. Take a deep breath and relax...
If you have zero programming experience, I'd recommend you do CS50x and watch Powercert videos to get familiar with the basics. Don't focus on too many things during this time, revise the PCM from 11-12th that you studied, it will be continued in first year.
Explore various domains, technologies, languages in this time and in your first year, read articles, watch videos, ask your seniors, profs and choose one to focus from your sophomore year. You need to find passion in CS and Engineering if you wish to be different from rest of the people who just joined because they saw the high paying jobs and will become soydevs.
College Coursework
You need to maintain a good CGPA (8.0+) so that you'll be eligible for most of the companies that come for on-campus placements. Some tips for that:
- attend all your classes (90% attendance atleast)
- learn the topic in the class itself
- a week before exams revise everything
- solve PYQs of last 5 years before the exams
- make flash cards or cheatsheets of the topics, read that 3-4 times, this way you can memorise the stuff quickly
Resources for first year subjects
I'm sharing the resources that I used and the ones that are good in general. I don't think you'll need anything outside of these for the first year.
1. Engineering Mathematics:
- Dr. Gajendra Purohit
- Pradeep Giri Academy
- Gautam Varde - Also teaches other subjects
- Other than these you can take books from your college library and try questions from them.
2. Electrical Engineering:
- Neso Academy
- Gautam Varde - Also teaches other subjects
- Zeenat Hasan Academy
- Follow books from your library other than these
3. Programming Language: Most of you will be taught God's own language C in first year.
- Dr. Chuck follows the holy K&R book and teach C.
- freeCodeCamp.org - Their channel is great for getting started.
- Holy K&R book
4. Physics, Chemistry: Gautam Varde was sufficient for me, I only did the book from library and the notes our profs provided.
5. Engineering drawing: Dr Noori Banu teaches everything you'll need. Other than this follow the book recommended by your profs.
After this form second year onwards you can find NPTEL lectures of all the subjects on youtube for free, learn from those for college exams they are great resources. These are taught by IIT professors and provide valuable knowledge. And there will be books in your College library for each subject, don't neglect those.
Outside College Learning
Now, you're prepared for the college exams but what about your technical skills, you can't land a job just on your academics, in this section I'll share some things that if you do will help you a lot in this journey.
First, I'd like to clarify this: COMPUTER SCIENCE ENGINEERING IS NOT JUST DSA, APP DEV & WEB DEV, there is a more beautiful and elegant world outside of these. Please don't get stuck with just these domains, explore properly domains like embedded systems, network engineering, sys admin, cyber security, game dev, kernel/os development, language toolchaining, IoT, automation, cloud computing, Hardware design (DO NOT IGNORE HARDWARE), AI-ML & much more.
Also, STAY AWAY FROM BHAIYA-DIDI YOUTUBERS (can be Indian, can be foreigners too), they just want to sell their courses and make you a soydev who only knows MERN and don't know shit about other stuff. 99% of these courses just create dumb soy devs and fill the field with people mediocrity.
Now, rants over let's focus on actual stuff. First choose a programming language, (it's like choosing your first Pokemon), you'll be taught C or Python in first year most probably. I'd recommend you start with C, just to learn basic programming concepts like conditions, branching statements, loops, recursion, data types, etc. After this you can easily move to any other language or even continue C. I've already provided resources for C, for other languages I'll say the most important resource is the official documentation. Otherwise, you can check out platforms like freeCodeCamp.org, Bro Code W3Schools.
Resources for languages that I found helpful
1. Python: CS50P, Corey Schafer NeuralNine
2. C++: LearnCpp Cpp Reference Bo Qian's STL playlist
3. Go, Rust: Official documentation is more than enough
4. Web Dev stuff: Do The Odin Project (I don't like this stuff much so not sharing any shitty stuff just a brilliant resource that I know of)
5. SQL: I learnt SQL in school through W3Schools and our brilliant teacher, so never had to look for much, just practiced problems on Hackerrank and Codechef. Dr. Chuck teaches PostgreSQL too.
Some skills that you should have
1. Git: Learn git (the tech) not github (the platform) first properly, from Corey Schafer and Primeagen's Git Course. Git is a very important tool for you as a developer, most of the time people expect you know git as a fresher, so learn it properly.
2. Linux (The best OS): Learn Linux, even just the basics will help you a lot with understanding how your computer works, get familiar with command line. You can shift back to windows if you don't feel safe without your little clicky GUI options (Modern linux can be used with gui completely too, but where's the fun in that), and use WSL. Try first in a VM, then if you feel like you finally need freedom, you can wipe that bloated OS off your device and install linux (start with LMDE). {I use Arch btw} Learn Linux TV's Linux Crash Course Network Chuck's Linux basics playlist
3. Code Editor / IDE: Whichever code editor or ide you use, VS code, Zed, Cursor, Emacs, Vim, Neovim(btw); make yourself familiar with it, learn/create your own shortcuts, macros, etc. You should know everything about your tools to become productive.
4. Soft Skills: Most of the students don't even possess basic conversational skills. Read good books, articles, blogs, news. Converse with your friends in english. Doing just these basic things is enough, you've studied this language for more than a decade now.
5. DSA & CP: This here is an important part of your journey, you need to learn and understand Data Structures & Algorithms to start Competitive Programming, also having DSA knowledge helps when dealing with low level design. To start, first learn the theory, this book teaches you about algorithms and data structures.
After learning the theory and implementing data structures in code, next step is to enhance your problem solving skills by practicing problems on platforms like leetcode, Codechef, Hackerrank, etc.
There are two approaches for this:
-
Learn as you encounter the topics: You can just dive in after gaining basic knowledge from the book and learn more concepts as you encounter them in the problems. First try to solve the problem with what you know, then after submitting your solution look at other people's solutions, maybe someone found a more efficient and optimal solution, see what they did and learn the concepts used.
-
Follow problem sheets by platforms like Striver (A-Z sheet), NeetCode, etc. These are comprehensive guides that will help you for placements as well
I'd recommend you follow the first approach and do a sheet (if needed) before final year when placements begin, this way you'll learn much more. Also please don't just copy paste other people's solutions or use AI to cheat, you aren't doing this to brag about it or flex this, you are doing this for yourself, this is to develop your problem solving skills and many companies ask these questions in technical interview rounds, so if you cheat you won't be able to solve the questions.
Next if you are liking this and enjoying it, you can move to Competitve Programming, here not only an accurate solution but the time complexity and your solving speed also matters. This is more of a mind sport, where you are given programming problems and you have to come up with a logical solution for the problem. There is a rating system like chess, the more problems you solve the more your rating goes up. Unlike practicing on Leetcode or Hackerrank, you join contests where you are given a set of problems, the person who solves the most number of problems the fastest and accurately wins the contest. Register yourself on Codeforces and start attending contests, there's also platforms like Codewars and Atcoder.
Also if you are going to do CP, do it in C++, most of the people do it in C++ because runtime speed also matters and 99% of the time C++ is the fastest. For just DSA you can do it in any language, but for dsa also i'd recommend you to do it in C++.
6. Touch Typing: Not the most important skill but you need to learn touch typing and have a decent typing speed (~60 WPM+). Practice on Keybr first, once you unlock all the letters, increase the speed to 45 WPM, after this move to monkeytype in settings choose the read ahead easy mode first, then increase the difficulty a bit.
Projects
Building projects is a great way of learning new technologies and also showcasing your skills with the tech you know, but now the question most of us have is what project to build?
AGAIN, DO NOT LISTEN TO BHAIYA-DIDI YOUTUBERS FOR THIS. No Spotify clone, no amazon clone, NO CLONES.
First build a simple website for yourself, can be just a portfolio website, can be a personal website, can be a combination of both (like mine). Keep it simple. Share your projects on it, some contact info, and anything you'd like to share. This is your corner of the internet now.
Now for project ideas, ask yourself, is there a problem you need a solution for? if not, ask your friends and family, is there a problem that you can solve by building something. Like for me i built a simple youtube video downloader using yt-dlp because a lot of people asked me about platforms to download youtube videos from and the ones available on the internet were so shitty, full of adware, needed subscription for changing video quality or extension. If it was just me, i can download vids using yt-dlp via terminal, i don't need no fancy GUI, but for people like my mother who only use an android phone doing that would be difficult, so i just built that one day.
You can also build educational projects, projects you build just to learn how something works, i built a web-server and a shell like this, read an article about it, followed that and built those, learnt a lot of things. Just do a google search on "how to build abc" and you will find some articles or videos about it.
Some more tips
- Be consistent when you start DSA or CP, it isn't a sprint, it's a marathon. Practising a few questions daily is better than trying to speedrun through a sheet in a day.
- Don't just become a shut-in and sit in front of your screen all day, i know all this info might seem a bit overwhelming, you don't need to do all of it in one month or one year, you have 3 whole years before placements begin, so go touch some grass, play a sport, join a gym.
- You have 24 hours each day, utilize them carefully, time management is crucial, get 6 hours of good sleep every day, don't pull unnecessary all-nighters, take care of your body too.
- If you use instagram, snapchat, delete those, limit your social media time to twitter, reddit, grapevine (just 10 minutes each a day, set app timers on your phone), join developer communities, join discord servers of languages, dsa platforms, etc. but limit your social media usage, don't waste time there that should be going towards upsilling yourselves.
- If you have free time in college, complete your assignments, go to library, read some books.
- Participate in college events, technical or non-technical, have fun with friends.
- Do not fall for vibe-coding and ai generated code, you won't understand shit that way, LEARN TO CODE, asking little doubts to it is ok but do not rely on llms for code. Write your own code.
- Exercise daily, eat healthy food, enjoy & have fun.
- Some movie/series recommendations: Internet's Own Boy, The Social Network. Mr. Robot, Silicon Valley, Pirates of Silicon valley, Atom's Last Shot, Serial Experiments Lain, 16bit Sensation: Another Layer, Steins Gate & Steins Gate 0, Dark, 1899, Black Mirror
- Some Youtube Channels: Bugswriter, 3Blue1Brown, Computerphile, Andrej Karpathy, Terence Tao, LiveOverflow, Low Level, Jack Rhysider, Jeff Geerling, Luke Smith, Gareeb Scientist, Gaurav Sen David Bombal, Fireship.