5 things that Computer Science Engineering students should focus on
What should students be really focusing on? Somebody asked me this question recently – Imagine students who are in 2nd or 3rd year of their degree course right now. They’ll spend a few years finishing college, and a few years just learning the ropes at their first job. So it will really be about 5 years before their career really starts. What will the software technology world be like at that time, and what are the skills that students can work on acquiring right now to ensure that they are well positioned to thrive?
Of course, 5 years is a long time, and to quote Neils Bohr, prediction is very difficult, especially about the future. Still I think some general trends are clear, and there are some other timeless skills that are worth looking at. Based on that I’m giving my list below.
Let me not bias your thoughts. Before you read my list, skip to the comments section below, and put down your list. Then read my list and critique it again in the comments. Hopefully we can have a good discussion that will benefit students.
So, here’s my list of areas students need to be thinking about:
- The next billion customers: The IT revolution has probably reached a billion people of the world so far. In the next 5 years, it will reach the next billion. These will be a very different set of people. Many of them will be illiterate – so you need to focus on non-text, non-English interfaces – video, animations, voice recognition. Search for “English Seekho” to get an idea of what I mean. Most won’t have money or electricity for computers, so mobile devices will rule – so you need to start playing with mobile platforms like Android. In general, search for the “the next billion” and you’ll find some interesting material put together by the likes of Nokia, and MIT giving you ideas on what to focus on.
- Usability: As IT touches the lives of more and more people, less and less of them will be “computer savvy”, and less and less of them will view computing devices as something that needs to be learnt. Consequently, the products that will succeed, will be the ones that are easy to use. And making something easy to use is rather difficult. It is a sub-discipline of computer science, and there is a lot of theory, and a bunch of well-defined algorithms and practices you can use to make things easy to use. The whole area is called HCI (Human Computer Interaction), and UCD (User Centered Design) is a part of it. It’s an area that you must be familiar with
- Computer Science Fundamentals: This will never go out of fashion, and yes, when I look at students coming out of our colleges, this appears to be a rather neglected area. Far too much emphasis on specific programming languages, and specific “technologies” is a mistake. Whatever the future holds, you will be well served by knowing the basic theory of computer sciences. Learn data-structures and algorithms. If you don’t have a favourite data-structure, and an algorithm that you find beautiful, then your computer science education is incomplete. If, after seeing an algorithm, your first thought is not about the complexity of the algorithm (O(n), O(log n), etc.), then you need to hit your books again. If you’ve only learned Java and C#, and you don’t really understand pointers, heaps, stacks, you will sooner or later be at a disadvantage. Understand the basics. And while you’re at it, also learn mathematics and statistics.
- Presentation skills: This is not a computer science skill, but this is one of the most important skills that computer science students are missing. You must treat presentation as equally important, or more important than your program, design, and algorithms. And you must spend as much time learning presentation (from books, in classes, and in practice) as you spent on programming languages, and computer science subjects. I’m sure you haven’t done that, hence this item in my list. You should know how to write well. Not just papers and documents, but much more importantly, emails, and blog posts, and facebook wall postings, and tweets. You must think about what the user/reader/client wants to know (instead of what you know and want to tell). And of course, you must know how to speak well. How to tell a story instead of listing some arcane facts about your work. How to leave out stuff that you find extremely interesting, but the listener doesn’t.
- Economics: Scott Adams, the creator of Dilbert says: “When you have a working knowledge of economics, it’s like having a mild super power.” Basically, if you understand the fundamentals of economics, you can see and understand what drives people and technologies and success and failure a lot better than people who do not understand it. I hated the fact that I was made to study economics in IIT for my computer science course. It seemed like a complete waste of my time. Now, looking back, I think it was probably the most important course.
What do you think students should be focusing on?
(Note: I’m supposed to be participating in a panel discussion in MIT on Monday, 7th Sept, on this topic. Instead of going there and spewing my gyaan, I thought I would take this opportunity to have a larger discussion on this topic, and your comments will help me do a better job (or go there with a better list), so please leave comments. Thanks.)
(Update: Please note: Many comments on this article are by 12th std. students who want to know how to select an engineering college or branch. In response to all of those, I’ve written an article on how 12th std students should select an engineering college/branch. Please read that article, and ask your doubts there. I will be deleting any comments on this post that are related 12th std choices.)