You are on page 1of 8

Build a solid career in tech without a CS major

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:

Choose CS at a tier 2 college


Choose IIT Bombay material science and metallurgical engineering
Since she had heard a lot about IIT Bombay, she ended up choosing IIT Bombay material
sciences. However, soon after a few courses in the first year, she realized that she doesnt
like her stream and rather wants to build a career in tech. She also realizes that it is
impossible to get her branch changed to Computer Science because the competition is too
stiff and her meagre 7 pointer is way below the cutoff of 9.6.

Now she is stuck with:

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:

How should I proceed ahead?


Should I learn web development?
Should I try Android app development?
What programming language should I learn?
How many programming languages should I learn?
How to make a website?
Should I try freelancing?
I was in close contact with a friend of mine who was in a situation very similar to Alice. Let
us call my friend as Bob. Bob was fed up of his branch. His only aim was to go in the
industry and earn money and make his parents proud. Since I was from Computer Science
background, I tried helping Bob and within 2 years, this is what Bobs boasts off:

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.

Enough of context, let us begin :)

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.

First a bit of motivation:

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

Take the following 2 courses:

Data structures and algorithms


Discrete mathematics
Data structures and algorithms is a course without which you cannot proceed ahead in
computer science. It is a fundamental course and every student must take one such course.

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.

Here are the resources I would strongly recommend:

Algorithms, Part I - Princeton University | Coursera. This is an excellent course.


The course is taught in Java. If you dont know Java, thats okay. Spend
considerable time in understanding what the professor is teaching and try to
implement it in whichever programming language you know.
Mathematics for Computer Science. This course is offered by MIT and known to be
quite good.
Recommended books:

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:

Learn web development


Learn android app development
You should get at least 3 projects on your resume at the end of 5th semester:

2 web development projects


1 android app development project
Our first task would be to learn Django.

What is it? It is a Python based web development framework.


Why learn it? Django is in high demand among Indian startups these days. Also, it
is easy to learn.
How do I learn it? Head straight to this link - Django Girls Tutorial. Dont be sad
at the name if you are a boy. Nothing sexist here :) This is one of the best Django
tutorials out there. Spend a weeks time understanding it. Spend time in
understanding how Django works - model, view, controller architecture. If you
follow this tutorial religiously, you have achieved 3 things:
o You now understand basics of Web development in Django
o You just picked up basics of Python
o You have a decent project to write on your resume
Once you are done with the Django girls tutorial, the next thing you should try is to
build your own Django app. I have a few suggestions for you:
o Build a photo gallery app - take a hash tag from the user and use TwitterAPI to
gather images of that hash tag in a photo gallery. This might be
helpful: amangoeliitb/Photo-Gallery-Web-Application
o A simple banking application - try making both a customer and an employee
account.
o A student dashboard that shows the performance of student.
Oh ya, I forgot to tell - make a Github account. Github is a social network for
programmers. People upload their source codes on Github. There is also
something called as git, which is a version management system. Take this short
course on git - How to Use Version Control in Git & GitHub | Udacity. By the way,
git is worth learning because you can put it on your resume!
There is another important thing I forgot to tell you about - stackoverflow. As a
programmer you are bound to face errors and exceptions. What to do? There is an
extremely simple technique to deal with errors. Copy the damn error, paste it in
your search bar and hit enter. Viola! Open the first 3 links you get on Google
search. With a high probability, someone has already faced the error you got and
has written a solution on stackoverflow. Stackoverflow links are generally reliable
and you can expect them to give you the right answer. Be patient. Read and try.
Your code might break. But thats okay. Use undo. But dont be afraid of breaking
things else you wont learn.
Cool, so now you know web development, Python and you have 2 awesome projects on your
resume. Let us move to Android app development. Here are the steps to follow:

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:

Machine Learning - Machine Learning - Stanford University | Coursera


Intro to Machine Learning Course | Udacity
Cryptography - Applied Cryptography and Encryption Class Online | Udacity
These courses should help you put 2 more projects on your resume and also expand your CS
knowledge. No doubt they will also open up more internship domains for you:

Data/ML engineer intern


Security engineer intern
Summers at the end of 3rd year

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:

Data structures and algorithms - the standard bread and butter of CS


Probability - school level prob/stats questions. These should be easy for you
Databases and Operating systems - we are yet to talk about this
Since you are not from CS department, a lot of companies wont be open for you during
placements. But dont worry. Quite a few companies would be willing to take you if you have
worked hard over the past 2 years. Aim specifically for web/android dev positions. These are
easy to grab.

Now let us talk about databases and operating systems (OS):

Databases - in your Django web app, you would have used


SQLite/MySQL/Postgres as your database. A database is a special kind of data
structure that stores data in hard disk. Some companies like to ask databases
related questions to the candidates. Being a non CS student, of course you arent
expected to do a formal databases course (if you can, then thats a big plus
though!). Search for databases interview questions to get a basic idea of what is
asked. I guess I will leave this point open ended because by this time, you would
have become smart enough to figure this out yourself :)
Operating systems - pretty much the same applies here as well. Doing a quick
Google search for operating systems interview questions will give you enough
practice problems which will be fine for most interviews.
If you are interested, you should take up online courses on databases and OS:

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

During this semester, you have multiple options:

If you got a job, you can chill out.


If you havent got a job yet (very unlikely), you should consider applying to
startups on AngelList. The startups on AngelList are actively looking for full time
hires.
Take up more projects - you can continue take up courses and continue working
on various projects. Here is a brilliant resource for you - Students - Guide to
Technical Development - Google Careers
Intern remotely at a startup - again, AngelList comes to the rescue. You can keep
the course load lesser and rather do a remote internship at a startup. This will not
only give you experience, but also if you work hard, you might end up with another
job offer.
I guess I wrote a lot and I will be concluding now. In the end, I would like to add a few basic
pointers specific to CS:

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!