Professional Documents
Culture Documents
Aman Goel
Alice is a 2nd year material science and metallurgical engineering student at IIT Bombay.
She worked hard during her JEE preparation, but ended up screwing JEE. She secured a
rank around 2,000. She is from a middle class family and she wanted to opt for Computer
Science so that she can build a career in tech and support her family and make her parents
proud. However, during JEE counselling, she was able to narrow down her choices to the
following:
Low grades
A branch that she doesnt like
Cannot pursue her love for programming
Worried about jobs and placements at the end of undergrad
Are you also someone who is like Alice? Did you also choose a branch just for the sake of
getting a better college? Are you from a middle class family and want to use your undergrad
to build a solid career in tech so that you can support your family? Are you the one who has
lost all hope of your career in tech after your first year of undergrad?
If the answer to these questions is yes, I have a surprise for you. Read on!
Let me talk a bit about myself. I am a fourth year Computer Science and Engineering
undergrad at IIT Bombay. I have spent 3.5 excellent years at IIT Bombay and I have 3 more
months before I graduate. This place is excellent, full of smart people. This place has given
me a lot - I was a student, this place made me an engineer. I feel like I owe a lot to my
college.
I have always seen people complain about their branch. This is what I hear quite often from
my friends in other branches:
I always wanted to study Computer Science, but ah, only top 50 rankers get it, I
wasnt even top 500.
My branch is extremely boring. Most of it is cramming. It sucks!
I wish I could go back and choose Computer Science in that tier 2 college. Why the
hell did I choose my branch?
There was a common behavior among all of these people - they all wanted to study CS, but
could not do so. JEE rank is the culprit. What was more surprising was that most of
them did not utilize the gazillions of programming resources available on the
internet that claim to make you a programmer.
Then I had a word with a few of them and I got to know that they are confused. Below are
the most common questions:
Hired as a software engineer at a decent tech company with twice the average
package of an IITian. No doubt, Bob grabbed the highest package in his
department where all other people were below the average package
Software engineering internship at a Mumbai based startup at the end of his third
year
Today, Bob is happy and is looking forward to his life ahead as a successful software
engineer. He is happy that he will earn enough to support his family and himself.
Plenty of sources on the internet claim to teach you programming, but the fact is that none
of them gives a proper road-map and non CS students find it really hard to figure out what
should be done first and what should be done later. They end up picking a difficult topic and
then give up easily. For instance, Bob wanted to try android app development in his 2nd
year but gave up because he couldnt understand even the basics.
In this blog post, I want to target people like Alice and Bob and want to create a resource
that will help every non CS student build a career as a software engineer. My vision in
writing this blog post is that every student has a right to learn Computer programming in
the right way. Every student should have enough resources that can help her/him to build a
career as a software engineer.
I am assuming that you are probably in your 2nd/3rd/4th year of undergrad in a non-CS
department, looking for building a career as a software engineer. I further assume that you
have done a basic programming course, which is typically compulsory in most colleges. This
means that you are aware of at least one of these programming languages - C, C++, Java,
Python.
The demand for software engineers in India is very high and with more and more
new startups, the demand will certainly increase.
The starting salaries of software engineers in India are typically twice the salary of
other streams. If you are from a tier 1 college, expect even more.
Some famous person has said - the best investment you can do to yourself in
todays era is to teach yourself how to program.
Let us now talk about how exactly your approach should be so as to achieve your goal of
becoming a software engineer.
3rd semester
By the end of first year, you would have certainly completed a basic programming course.
For your 3rd sem, you should aim for a course in probability and statistics. Almost all
colleges offer such courses and you should enroll in the course offered by your institute. You
can choose to sit through the course. But definitely take a probability class early in your
curriculum. I have heard that the course offered by MIT OCW is quite good.
Taking probability class will also help you reinforce some of your linear algebra concepts
which are important for many CS courses.
4rd semester
This course will be slightly hard. It is highly technical and even the best students get bowled
when challenging data structures and algorithms problems are thrown. This course will
literally be a test of your patience and so, be patient. If you are able to complete this course,
you will be 50% closer to your goal.
Discrete mathematics is a course that teaches you mathematics for computer science. You
will be studying mathematical induction, combinatorics and other stuff.
For data structures and algorithms, I would recommend the book suggested by
Robert Sedgewick. The other recommended book is Cormen, but it is slightly more
involved and contains rigorous mathematics which you might not appreciate.
For discrete mathematics, I would recommend Kenneth Rosen - an excellent book.
Keep in mind - write as much code as you can. Unless you write code, you wont learn. Try to
implement everything you learn in Data structures class.
Summer break after 2nd year
Use the summer break to hone your programming skills. Head to this link - Sphere Online
Judge (SPOJ). SPOJ is an online judge. What is that?
SPOJ is an archive of problems that are to be solved by writing code. Consider this simple
problem - SPOJ.com - Problem TEST. You need to take input from the user until the user
enters 42. Stop as soon as you get 42. Now, observe how to solve this here - Solution to
TEST in C. Basically, programming judges have very strict submission guidelines. Dont
print Enter a number: when you want to take a number as input. It doesnt work that way.
You submit the code without printing crap. Just print what is specified in the problem
statement. Read the sample test cases to get an idea. Do a Google search to understand how
online judges work.
Solve the first 100 problems in the link that I gave you above. Trust me, you will become a
coding ninja if you do this. You will be better than some of your CS friends at programming.
No, I am not lying :)
100 problems isnt a big goal. Try solving 23 per day and you should be done in 11.5
months depending on your speed.
Spend time here. If you are unable to get a solution, try harder. Read comments to get hints.
Use Google search to get hints. After trying for some 30 or so minutes, if you dont get a
solution, try searching for solution on Google - SPOJ X solution where X is the problem
code.
Your goal should be to learn how to write code, learn the implementations of common
algorithms, learn the usage of STL.
After you have solved first 510 problems on SPOJ, I would also recommend taking a look
at this Getting Started with the Sport of Programming. This doc will help you understand
things better.
5th semester
During 5th and 6th semester, you should start searching for internships which you can take
up at the end of your third year.
However, that will be a side task. Primary task during the 5th semester should be to:
Head to this link: Android | Udacity. Udacity is a platform in which big tech
companies offer courses that you can take up to learn various skills in software
engineering. Google has built some excellent Android courses on Udacity and you
should definitely take a look at them. Start from beginner level courses. They are
very simple and might get completed in a day or two. You should spend at least 1
2 hours a day in these courses. Once you are done with beginner level courses, take
up intermediate level courses. Of course, do the free ones. There is no need to
spend money on any course/nanodegree. Learning programming should be free
for everyone :)
Android might be slightly frustrating. The Java used in Android is slightly
different from the usual Java in the sense that it is advanced and has a lot of
library functions. Dont get bogged down by it. Remember, you need to be a
software engineers. We software engineers are known to solve problems ;) As
again, I would suggest that you should use Google search heavily for any errors. Be
patient because Android is slightly hard.
At the end, you would have 3 more things on your resume:
o Android app development
o Java
o An android app based project
With this much on your resume, you are sure to get an internship.
6th semester
In this semester, you should get serious about your internship (if you havent got one yet).
Anyway, here are the pointers for internship:
AngelList is an excellent platform where startups are looking for interns. Make an
AngelList account and add your projects and skills on it. You are sure to gather
attention of some startups with those awesome Android and web development
skills.
Search for other internship portals. Be active on LinkedIn.
Start preparing for interviews. The way hiring in computer science works is that
you are shortlisted for interviews based on your resume. During interviews, you
are asked data structures and algorithms based problems. The level of problems
would be similar to what you have been doing on SPOJ so you can be happy that
your hard work will finally pay off. I would recommend continuing SPOJ practice.
It is easier to lose skills than pick up skills.
To prepare for interviews, use the following 3 excellent sources:
o Cracking the coding Interview - this book is the bible for programming interviews.
Purchase it or download a pdf (piracy is bad). Try reading the theory and solve the
problems. Try to actually implement the solutions.
o Coding Interview Questions - This is a brilliant platform to hone your interview
skills.
o GeeksforGeeks - this is an great programming blog/archive.
Also, I would suggest that you should be prepared with questions from your 5th semester
projects. You should be able to explain the code you wrote. Interviewer might ask you about
a specific library you used. Dont worry, you should have a high level idea that you should be
able to explain. No one will ask you syntax.
That was about internships. Besides the internship, you should try taking up some
miscellaneous courses like:
Enjoy your internship. Work hard and try to get a return offer
7th semester
Prepare hard for placements during this sem. The following topics are asked during
placements:
Stanford databases
Intro to Relational Databases | Udacity
Introduction to Operating Systems | Udacity
Having said that, keep in mind that data structures and algorithms is something very
important for placements and InterviewBit should be the one place where you should spend
your maximum time.
If you have followed the above points seriously and worked hard for the 2.5 years, trust me,
your hard work will pay off now. You are sure to bag a decent package during the
placements. Bob was placed right on day 3. He was the only one in his department who got
placed in the first week. And his package was twice the average package of an IITian.
8th semester
CS is easy provided you understand that you need to implement stuff (write actual
code) otherwise you wont be able to learn things.
Dont be afraid to try out new things. Dont think that - oh this is too hard, and is
meant for experts. No. Nothing is meant for experts. All it takes is those 510
minutes of sincere reading and I can guarantee that there is nothing you cannot
pickup.
Dont be afraid of breaking things. Dont think that - oh my machine might break if
I do that. At the very most, you might end up with a broken software, which can be
easily fixed. It is unlikely that you will do a damage to hardware.
Learn with friends. You will be amazed to see how smart the people around you
are and you can learn a lot by interacting with others.
Good luck and all the very best for your future and career!