A large school once asked me to counsel their Class 12 batch about careers and degree programs in computing. This happened 3 years ago, it was an informal affair, but I thought I should share it here as well (just in case someone else is interested). This is not an official ranking or recommendation. This is based on my knowledge and interaction with graduates from many of these programs. For those qualifying in the JEE, these are things you can keep in mind at the time of JEE Counselling and while filling up your course preferences.
The world of computing is a hot place to be and in all likelihood, will continue to remain so for several years to come. Take a look at this video to get an idea about how fascinating this field is!
There is a lot to computer science and coding is just a manifestation of it. But here's a video to get you excited about how code can change the face of the world and how you can be a part of it.
If you are a Class 12 student and are really interested in this space, you should even be prepared to take it up in a college or university which wasn't really your first choice. Very often, this will boil down to: Computer Science at a non-IIT versus a non-CS major at an IIT.
We can always get to a check-list of college and programs in a while. But here are some things which are often not discussed enough.
This is not a typical JEE counselling post - this is intended to get you thinking.
My take: if you're getting CS at a top college and if you're not getting CS (or related courses, or circuit branches) at IITs, you should feel perfectly confident in taking CS at X. If you're so hung up about brand value even after 4 years, you can consider doing an MS or MEng at a top US university. Chances are that you won't find it necessary to do that, just for the brand.
How does one define interest, to begin with
Fascination with your computer or your mobile phone does not really translate into an "informed interest in CS". 3D and Virtual Reality Gaming, building power point presentations, pretty HTML pages, photo-shopped visuals might be great fun; but that isn't a great way of judging whether you'll like Computer Science. CSE is about making all those fascinating things possible via software engineering, efficient algorithms, mathematics, statistics and understanding the underlying hardware.
If you studied CS as a subject in Class 10 or 12, in an ISC or CBSE school AND if you and your school made sufficient effort in familiarizing you with the practical world of programming and computing, in that case you might be able to get a better sense of how much you actually like, or feel comfortable with, Computer Science. Though prior exposure to computing is neither a necessary nor a sufficient condition for a great computing related career; it can however be used as an indicator.
The grade 11-12 ISC curriculum in particular, does a reasonably good job of introducing CS to a school student. It contains the basics of Switching circuit logic, digital basics, algorithmic complexity, object oriented programming, recursion and elementary data structures like Linked Lists, Stacks, Queues and Binary Trees. If you felt comfortable with the material, even though it is just the upper most surface of the iceberg, it indicates that you may be a good fit for a CS program.
The grade 11-12 CBSE curriculum really isn't that great, and has an overdose of facts to be memorized; there is also an unhealthy focus on syntactical aspects of languages as opposed to computational thinking. However, if you went through that, and figured out that you liked programming, then again - your interest or curiosity in CS is justified.
Do not opt for Computer Science if you didn't feel comfortable with programming in school, for whatever reason.
Why is the interest aspect important
The interest aspect is very important for CS. Many people opt for this course because they hear of the fancy tech and finance jobs lapping up graduates in this space, but a lesser known story, is that burn-out and boredom rates are also quite high among software engineers.
In a branch like say, Electrical Engineering, where a theorist or math-geek might find his calling in a sub-field like Information Theory or Signal Processing; the micro-level enthusiast might find his calling in a sub-field like VLSI design, and the "heavy engineering" lover could find solace in Power Plant or Power Systems engineering. And the programmer could find his calling in computational aspects of Electrical Engineering.
Similarly, Mechanical Engineering students have a variety of vastly different sub-fields.
While CS indeed has just as many (and quickly exploding) sub-fields for people of varied interests, most respectable CS programs have a major component of their program linked to programming.
The hype and glamor of the Computing and Computing-driven industry aside, it is almost impossible to sustain your enthusiasm level in CS, if you discover that programming is not something you really like. The kind of programming which a respectable CS program requires, will frequently involve assignments crossing 500 lines, that number might often go into thousands of lines. If you develop an aversion to that - God bless you.
Why CS is a popular choice
The market for software engineers and data scientists has been in the boom phase for a while. However, one never knows which space or field will be hot after another 5 years. Job market and job placement stats are overrated and unreliable. There is also a lot of interesting research happening in the field of Computer Science.
Personally, I feel that CS has been a safe bet for a reason less discussed. And that is the "horizontal" aspect of CS education.
A CS program fits in quite horizontally, both in the academic sense and in the professional sense. A good CS program will contain a fair bit of exposure to mathematics as well as some amount of electrical engineering (hardware, image processing) apart from the pure CS courses.
Electives may be diverse: computing in finance, computing in biology, computational linguistics and so on.
As a result, you can gain exposure to a variety of different fields in the process. This makes it easy to transition into other areas at a later point in time: you can leverage your existing skills to gain new ones. Many people with CS backgrounds work in finance, chip design, health (health informatics), education (ed-tech) and so on. As the world goes online, their computational skills make it easier for them to blend into the new tech-driven economy.
Columbia University now has a program merging Computer Science and Journalism. The reason is not too hard to see: the CS background will lead to more skilled journalists, capable of gathering, scraping, analysing and visualising data and trends.
If you choose to do a Masters or a PhD, chances are, that regardless of your field of further study, the mathematical and computational skills from a CS degree, will be extremely beneficial.
Programs allied with Applied Mathematics, Design and even Social Science
The new IIIT in Delhi offers 3 inter-disciplinary programs where CS is taught in conjunction with Applied Mathematics, Design and Social Science.
This is a top notch institute in NCR, though they have a heavy domicile quota for Delhi as they received aid from the Delhi government.
Their program details are listed here. They have a very hands on curriculum, full of creative projects and IIT Kanpur "CS-mafia" played a key role in setting up this university. Their allied programs provide an excellent and a rare opportunity to study Computer Science along with something else, enabling a breath of education not found too commonly in Indian higher-ed.
Making trade-offs for a college: Mathematics and Computing, Electrical Engineering
In most well known institutions, CS fills up very quickly. And it also depends on your aims.
You may or may not want to do an entire major in CS. You might just want to be ready and equipped with the necessary skills to survive in a world where computing is pervasive. Can you do justice to your technical and academic interests, via EE or Mathematics and Computing programs.
Jobs and admissions for higher studies are based on what kind of courses you took and what kinds of skills you developed.
The name of the exact major doesn't matter too much: your transcript does.
The Mathematics and Computing programs offered at IIT Kanpur (4 year BS), Kharagpur (5 year MSc), Guwahati (4 year BTech) and Delhi (4 and 5 year BTechs) are all quite different in nature. The Computing related courses in these branches are often diluted when it comes to the rigorous programming part. The one at Kanpur in particular is "Scientific Computing" and the focus on the mathematics aspect is quite pronounced. The one at Kharagpur does have a fair bit of electives for exposure to systems, software engineering etc. The rigor is higher than CS on the theoretical/mathematical side of things; but lower on the hands-on programming side of things. It is supposed to be the same in Delhi.
The best way is to take a look at their curriculum, speak to current and former students and figure out if there is a way to take at least a few courses or projects in the CS department, to compensate for any deficiencies.
Remember: on the plus side, these programs have more mathematics and statistics (great fit for the data age) and if you discover that coding isn't your cup of tea, you're less likely to find yourself in a situation where you're overwhelmed with programming assignments.
The best of the Mathematics and Computing programs actually seems to be offered outside the IIT system, by the newly established Indraprastha Institute of Technology in Delhi. Their CSAM program has a mix of both, without any dilution in standards. So they seem to go through the same computing courses as their CS students, only slightly fewer in number.
Electrical Engineering programs
This is actually the route I went through, though my program was a track called "Energy" which had a few focussed courses on the power, energy economics and the environmental aspect of things. I had an interest in hardware and signal/image processing
EE programs are generally very rigorous. You normally have to do all sorts of courses in power systems, digital systems, analog circuits, signals and controls etc. You could find yourself neck deep in heavy engineering topics like machines and power electronics which you may or may not like.
In some IITs like Kharagpur you can easily opt for a large number of CS courses (both foundation and advanced) as part of your curriculum. A lot of topics like Computer Architecture, hardware, math etc. are covered as part of your own curriculum. I remember doing perhaps a dozen (or slightly less) CS and programming related courses; about half of them had labs. For me, that level of exposure was sufficient. You need access to a few good courses with projects and labs, not a ton of purely-theoretical ones. Lots of topics like Information Theory, Image Processing, Vision are part of the EE curriculum itself, in several places. Both EE and CS have a huge overlap.
A lot of students from IIT Kgp who did their MS/PhD in Computer Science were from the Electrical/Electronics side.
However, this is apparently not the case across the IIT system. Delhi, Mumbai and Kanpur seem to have very focused EE programs.
CS Minor Degrees at IIT
Do not bank on this. Do not assume that I will join an IIT (or another institution) in a non-CS program X and then do a minor in CS.
Even though IITs advertise their minors a lot, the reality is, that due to scheduling issues, capacity constraints etc. few people benefit from it.
Plus the definition of a minor degree varies greatly between the IITs.
Criteria to judge the quality of CS departments
How many professors are there in the department? The more there are, the greater will be the variety of courses and electives offered.
Do you see professors with degrees from well known US universities? This is a huge indicator of the department to pull in talented faculty.
In certain cases, departments have an unhealthy concentration of PhDs from that department itself. This kind of "academic incest" creates an inward looking culture.
IIT Roorkee is a great institute, and great for (say) civil engineering. But it isn't known to have a great CS department.
Otherwise, the CS departments at each of the older IITs have excellent faculty. So does the new one at Hyderabad (despite its size).
IIIT Hyderabad and IIIT Delhi have top notch PhDs (better than a lot of IITs) and provide excellent education.
PS: The 5 year MS program in IIIT Hyderabad has historically been a nightmare for many. It is very difficult to exit in 5 years. It is nearly like an undergraduate PhD! Please avoid these programs. No amount of academic standards can compensate for a degree extending indefinitely into a nightmare. You cannot exit midway with just your BTech either.
Program Structure
Try to look up the curriculum. A good program should have a substantial number of courses with lab components or projects. Technology and Engineering are meaningless in a degree program which doesn't expose you to practical applications.
If you are enthusiastic about diving head first into CS:
late start: IIT Kanpur has perhaps the most famous CS department in the country. But it has a late start approach - lots of general courses in the first two years. Something similar with BITs Pilani. Some people may not like such a large concentration of general courses in the beginning. I suspect these courses are present because of a rather blind following of what MIT does. This kind of curriculum design perhaps ignores the fact that the average IIT/BITs entrant has compulsorily done a large amount of Physics, Chemistry and Mathematics before the freshman year itself. The rest of the older IITs do quite a few CS courses in the second year. Some new ones like IIT Hyderabad start professional courses right from the first semester itself. IIITH and IIITD also follow the early start approach and have a lot of hands on CS courses and workshops in the first year itself.
what all can you choose?
Does the department have too many compulsory courses. That can be a red flag. Does it offer a large number of elective courses? Can you take courses from other areas and departments? These are all rather important questions. One major advantage which the IIT system has (over the IIIT System - for now) is that you can access courses related to Mathematics, Statistics, Economics, Design, Pure sciences as they are on the same campus. The question is, does the curriculum permit it. Can you do a minor or a secondary major as you understand your interests better.
IIIT Delhi has made a conscious effort in this direction and offers courses in Economics, Computational Biology and will soon start an undergraduate program blending IT with Social Science.
CMI in Chennai has excellent faculty, very dedicated students and though it has little variety to offer, it is a great place for those targeting an academic or research career in theoretical areas of Computer Science, number theory and applied mathematics. Great advances in computer security are based on Cryptography which require rigorous theoretical and mathematical foundations.
Ashoka University - CS program blended into a mix of liberal arts courses. A great option if you aren't from the PCM channel. However, the variety of STEM and Management courses at Ashoka University is rather limited for now.
So based on all these factors, my personal list of high-quality Computing programs in India reduces to:
BTech/Dual degree programs in the older IITs (Bombay, Delhi, Kanpur, Madras, Kharagpur, Guwahati) - good faculty, curriculum, availability of courses across areas
BTech programs in newer IITs (Hyderabad, Gandhinagar) - good curriculum, some great and young professors joining the departments
BTech program at IIT BHU (they seem to have an excellent group of students, open source culture, competitive programming)
BTech programs in IIIT Hyderabad and IIIT Delhi (both with top notch faculty and modern curriculum), BITs Pilani main campus (good peer group, some good professors)
BSc programs in CMI Chennai (great place for theory) and Ashoka University (unique blend of CS in a liberal arts curriculum)
You may fit in the Mathematics and Computing programs and Electrical/Electronic Engineering programs as you find appropriate.
In the next tier I'd place a few institutes like NSIT, DTU, DA-IICT, IIIT-Allahabad, new IITs
They are known names, attract some good students; but their academic standards definitely do not match the first group.
Placements
Note that I have consciously left out placement statistics.
This is partly because placement statistics simply do not exist: the data out there is unreliable. And in a lot of the cases, a job is about the individual who got it and not about which college/university he/she attended.
The old five or six IITs definitely have a large number of top tier companies recruiting graduates, across domains: finance companies like Goldman Sachs and Morgan Stanley hiring for quant and strat roles, tech and internet biggies like Microsoft, Google, Amazon; Consulting companies like McKinsey, Boston Consulting etc.
However, people often quit from even these prized jobs, and many don't accept the offers at all (and go on to do an MS/PhD/Startup).
Many leave after one or two or three years, often for lesser paid roles, with far greater risk. Some do an MBA. Some go back to academics, some try their hand starting-up. Recruiters are out there to find you. Companies hire people via online channels and tests and real-world programming challenges and contests (like those conducted on HackerRank, HackerEarth).
So don't make starting salary and job placements an issue. Over-reliance on placement cells also leads to a situation where students end up in jobs which aren't a great fit for them, sometimes it is a case of selling out to the highest bidder.
Stuff which a Computing Professional should be comfortable with
- Whether you major in CS or not, here's what I'd call the "least common denominator" of what a computing professional should be familiar with. Not all of this needs to happen in college.
- one low level language (like C), and object oriented or managed language (C++ or C# or Java), Scripting language (Python, Ruby)
- comfortable with something for mathematical or statistical calculations (R or Python-with-numpy and scipy)
- adept with data structures, algorithms, collections (know what's happening under the hood when you use a hash map, be able to quickly estimate complexity)
- probability and statistics (general understanding of statistical distributions)
- concurrent and parallel models in computing (threading, map-Reduce). Your multi-core is far less useful if you don't know how to harness the parallelism
- Functional programming (this paradigm is becoming popular. It was considered purely academic in the past, but programming without changing state, is quite an essential art to understand when highly parallelized and multithreaded codebases need to be maintained)
- try to understand the stuff around you. the encryption. the thought behind different kind of UI design. Networking protocols, database queries.