This post was inspired by people asking whether they should choose to study computer science for undergraduate education (B.E / B. Tech) or not, without having any idea about what computer science or other options like ECE really are. The target audience are students who just finished their 12th (and their parents), and are choosing a branch of engineering to study. Hopefully, you will be able to make a more educated choice by the end of this post.
So, you have just finished 12th and you are considering choosing computer science: you might have heard vaguely about IT companies, Volvo buses, and hefty salaries and you are wondering what it is all about and whether it is really for you. I will try to explain what computer science is, what it is not, and what kind of jobs you might be able to get at the end of 4 years.
My background: I studied Computer Science (B.E) at College of Engineering, Guindy. I then got my Masters degree at UW Madison, and I am now working towards my PhD.
What is computer science? Broadly stated, computer science involves designing hardware (such as laptops) and software (such as Microsoft Word). There are many different aspects to computer science. Let’s take the example of using your laptop to search for something on Google, and see what is going on behind the scenes.
First, your laptop is made up of many complicated parts working together to allow you to browse. Learning about how these parts work together is called Computer Architecture, a part of computer science that has considerable overlap with ECE. If you have heard about stuff like Intel Dual Core and so on, they all result from advances in this subfield that looks at how you can use design the computer so as to be faster, and in some cases, to use less energy.
Then comes the part where you are able to interact with the computer through intuitive windows, menus and buttons instead of just text: this is called User Interface Design. Believe it or not, for a long time computers did not have such nice interfaces, and everything was done with text.
Next comes the part where you communicate with the Google website that is far, far away in some other country, and get answers to your questions. In Networking, you learn about the to-and-fro communication between your computer and the website. What happens if the communication fails? How is it possible to communicate so fast with something so far away? You will find answers to all these questions in this part of computer science.
Now, while doing the Google search, you might also be listening to music in the background. How does the computer do both things at once? How does it store the music in the laptop? If you have a printer attached, how does the computer talk with that device? What happens when you connect your mobile phone to your laptop? Operating systems deals with all these questions.
Finally, when you send your search query to Google, Google uses many thousands of computers to quickly come up with an answer. Distributed systems looks at how to use multiple computers to solve a problem. Many other companies such as Facebook and Amazon have complex distributed systems powering them.
There are may other aspects of computer science. Continuing with the Google example, they need efficient ways to store and process very large amounts of data: they use techniques from Database systems in order to do this.
On an entirely different track is mobile development: developing applications like Angry Birds for your mobile phone. There are many interesting questions in the mobile space: for example, mobile phones have limited battery life, so how do you write applications to use minimal energy?
There are many other areas like Artificial Intelligence, Graphics, etc that I have not mentioned. Everyone ends up liking their own speciality in computer science: the field is growing fast and there are always interesting challenges, so no matter what kind of stuff you like to do, whether it is visual stuff like interface design or behind-the-scenes stuff like operating systems, there will be something to excite you.
Personally, I love computer science because inside a computer system, you are God and all programs are your creations. The only barrier to what you can create and achieve is your own imagination. Every aspect of your computer can be changed as per your fancies, provided you know how. This results in a kind of joy similar to what engineers feel: the joy of creation. I’ve seen people write their first computer program, and the moment their creation comes to life is an awesome one to witness. With more and more computers being used in all walks of life everyday, being able to manipulate computers make you the wizard of the current age.
Programming: Computer science is often mixed up with programming. So how are the two different? Consider how an architect designs a house, and then builds the house with the help of brick, mortar, steel, concrete and so on. In order to build the house, she might need to use certain tools like a trowel, chisel and so on. Computer science encompasses designing the house, choosing the right materials, the right tools for the job and so on. Programming is building the house as per the design with the given tools. Thus programming is just a small part of computer science. There are whole other subfields like computer architecture, operating systems, networking and databases.
Jobs in computer science: Sadly, there is a notion that all that learning computer science enables you to do is learn to program. Though programming is certainly a part of computer science, it is by no means the whole of it. Knowing C or C++ is not equal to having learnt computer science. The class of jobs you will be able to get differs greatly based on what you know.
There are jobs that require programming alone: even in this case, there are jobs ranging from designing Visual Basic applications for the supermarket to designing websites for local business. With the ever increasing digitization of our world, the demand for people who can do this will keep growing.
There are also jobs that require more knowledge: you might need to know how computers communicate in order to work for Cisco. You might need to know how computers store information to work for NetApp. The list of companies that require knowledge beyond just programming is quite big, and they pay very handsomely for this knowledge. The more you know, the better your job will likely be.
On the whole, I’d say job aspects are good for computer science, and are likely to remain that way for some time to come. The opportunities for truly good computer science engineers are immense. Let me wrap this up with some frequently asked questions:
Do you need to know programming before-hand? No. I know many people who studied computer science from scratch (learnt their first programming language in the first semester of college) and went on to do very well. You absolutely do not know need to how to program before you start your degree.
Do you need to be very good at math to study computer science? No. I am very average at math, but I’ve never had any problems. You need to know a certain amount of basics to learn computer science, but beyond that, you don’t need to know a lot of advanced math. That said, extra math knowledge is always helpful, and not just in computer science.
I hope this gives you a better idea of what studying computer science will be like in B.E/B.Tech. Computer science is a fast growing field, full of interesting challenges and opportunities. It touches on many other fields, and advances in computer science have led to breakthroughs in other fields like biotechnology. I believe computer science is one of the most exciting fields to study today, with the potential to rapidly change the world in the coming years. Google has developed a self-driving car. IBM’s artificial intelligent system, Watson, has defeated human champions on the quiz show Jeopardy. Who knows what could be next?