Why You Should Not Do An Undergrad in Computer Science at IIT Madras

I did my undergrad in Computer Science and Engineering at IIT Madras. My parents wanted me to study Electrical Engineering, but I had liked programming back in school, and my JEE rank “normally” “implied” Computer Science and Engineering. So I just went with the flow and joined the course. In the short term, I liked some subjects, so I was happy with my decision. Moreover there was a certain aura associated with CS students back in IITM, and I was happy to be a part of it. In the medium term too, the computer science degree did open doors to a few jobs, and I’m happy for that. And I still didn’t regret my decision.

Now, a full seven years after I graduated with my Bachelors, I’m not so sure. I think I should’ve gone for a “lighter” course, but then no one told me. So the thing with a B.Tech. in Computer Science and Engineering at IIT Madras is that it is extremely assignment incentive. Computer Science is that kind of a subject, there is very little you can learn in the classroom. The best way to learn stuff is by actually doing stuff, and “lab” is cheap (all you need is a bunch of computers) so most courses are filled with assignments. Probably from the fourth semester onwards, you spend most of your time doing assignments. Yes, you do end up getting good grades on an average, but you would’ve worked for it. And there’s no choice.

The thing with an Undergrad is that you are clueless. You have no clue what you’re interested in, what kind of a career you want to pursue, what excites you and the stuff. Yes, you have some information from school, from talking to seniors and stuff, but still it’s very difficult to KNOW when you are seventeen as to what you want to do in life. From this perspective, it is important for your to keep your options as open as they can be.

Unfortunately most universities in India don’t allow you to switch streams midway through your undergrad (most colleges are siloed into “arts” or “engineering” or “medicine” and the like). IIT Madras, in fact, is better in that respect since it allows you to choose a “minor” stream of study and courses in pure sciences and the humanities. But still, it is impossible for you to change your stream midway. So how do you signal to the market that you are actually interested in something else?

One way is by doing projects in areas that you think you are really interested in. Projects serve two purposes – first they allow you to do real work in the chosen field, and find out for yourself if it interests you. And if it does interest you, you have an automatic resume bullet point to pursue your career on that axis. Course-related projects are fine but since they’re forced, you have no way out, and they will be especially unpleasant if you happen to not like the course.

So why is CS@IITM a problem? Because it is so hectic, it doesn’t give you the time to pursue your other interests. It doesn’t offer you the kind of time that you need to study and take on projects in other subjects (yeah, it still offers you the 3 + 1 months of vacation per year, when you can do whatever you want, but then in the latter stages you’re so occupied with internships and course projects you’re better off having time during the term). So if you, like me, find out midway through the course that you would rather do something else, there is that much less time for you to explore around, study, and do projects in other subjects.

And there is no downside to joining a less hectic course. How hectic a course inherently is only sets a baseline. If you were to like the course, no one stops you from doing additional projects in the same subject. That way you get to do more of what you like, and get additional bullet points. All for the good, right?

After I graduated, IIT Madras reduced its credit requirement by one-twelfth. I don’t know how effective that has been in reducing the inherent workload of students but it’s a step in the right direction. Nevertheless, if you are going to get into college now, make sure you get into a less hectic course so that the cost of making a mistake in selection is not high.

It’s about getting the Cos Theta right

Earlier today I was talking to Baada and to Aadisht (independently) about jobs, and fit, and utilization of various skills and option value of skills not utilized etc. So it is like this – you possess a variety of skills, and the job that you are going to do will not involve a large number of these. For the skills that you have that match the job’s requirements, you get paid in full. For the rest of the skills you possess, you only get paid the “option value” – i.e. your employer has the option to utilize these skills of yours and need not actually utilize them.

Hence in order to maximize your productivity and your pay, you need to maximize the cos theta.

Assume your skill set to be a vector in a N-dimensioanl hyperspace where N is the universe of orthogonal skills that people might possess. Now there are jobs which require a certain combination of skill sets, and can thus be seen as a vector. So it’s about maximizing the cos theta between your vector and your job’s vector.

So it’s something like this – you take your skills vector and project it on to the job requirement vector – your total skills will get multiplied now by the value of cos theta, where theta is the angle in the hyperspace between your skills vector and the job vector. For the projection of your skills on the requirement, you get paid in full. For the skills that you have that are orthogonal to the requirement, you get paid only in option value.

One option is to of course build skill set, and keep learning new tricks, and maybe even invent new skills. However, that is not a short-term plan. In the short to medium term, however, you need to maximize the cos theta in order to maximize the returns that your job provides. But as Baada put it, “But there is slisha too much information asymmetry to ensure that cos theta is maximised.”

There are two difficult steps, actually. First, you need to know your vector properly – most people don’t. Even if you assume that you can do a lot of “Ramnath” stuff and get to know yourself, there still lies the challenge of knowing the job’s vector. And the job’s requirement vector is typically more fluid than your skills vector. Hence you actually need to estimate the expected value of the job’s requirement vector before you take up the job.

The same applies when you are hiring. It is actually easier here since the variation in the hiree’s vector will not be as high as the variation in the job profile requirement vector, and you have a pretty good idea of the latter so it is easy to estimate the “projection”.

This perhaps explains why specialists have it easy. Typically, they have a major component of their skills vector along the axis of a fairly well-defined job profile (which is their specialization). And thus, since theta tends to 0, cos theta tends to 1, and they pretty much get full value for their skills.

At the other extreme, polymaths will find it tough to maximize their returns to skills out of a single job, since it is unlikely that there is any job that comes close to their skills vector. So whichever job they do, the small value of the resulting cos theta will cancel out the large magnitude of the skills vector. So for a polymath to maximize his/her skills, it is necessary to do more than one “job”. Unless he/she can define a job for himsel/herself which lies reasonably close to his/her skills vector.

(there is a small inaccuracy in this post. i’ve talked about the angle between two vectors, and taking the cosine of that. however, i’m not sure how it plays out in hyperspaces with a large number of dimensions. let us assume that it’s vaguely similar. people with more math fundaes on this please to be cantributing)