Build a solid career in tech without a CS major
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 counseling, she was able to narrow down her choices to the following:
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 doesn’t 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:
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:
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:
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 Bob’s boasts off:
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 resources on the internet claim to teach you programming, but the fact is that none of them give 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 couldn’t 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:
Let us now talk about how exactly your approach should be so as to achieve your goal of becoming a software engineer.
By the end of first year, you would have certainly completed a basic programming course. For your 3rd semester, 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.
Take the following 2 courses:
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:
Keep in mind — write as much code as you can. Unless you write code, you won’t 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. Don’t print “Enter a number:” when you want to take a number as input. It doesn’t 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 isn’t a big goal. Try solving 2–3 per day and you should be done in 1–1.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 don’t 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 5–10 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.
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:
You should get at least 3 projects on your resume at the end of 5th semester:
Our first task would be to learn Django.
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:
With this much on your resume, you are sure to get an internship.
In this semester, you should get serious about your internship (if you haven’t got one yet). Anyway, here are the pointers for internship:
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. Don’t 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:
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:
Summers at the end of 3rd year
Enjoy your internship. Work hard and try to get a return offer
Prepare hard for placements during this sem. The following topics are asked during placements:
Since you are not from CS department, a lot of companies won’t be open for you during placements. But don’t 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):
If you are interested, you should take up online courses on databases and OS:
Having said that, keep in mind that data structures and algorithms are 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.
During this semester, you have multiple options:
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:
Good luck and all the very best for your future and career!
We at CareerHigh are building something called as Non-CS Academy — a platform for non-CS students and working professionals to learn right skills so as to shift to the Computer Science domain. You can visit it here: https://careerhigh.in/non-cs-academy