I am doing a research project for school on the “ideal computer science student.”
I’d love to hear your guy’s opinions on the qualities, personality traits, skills and other qualification you think are essential for succeeding in the computer science industry.
If you are already a CS major, please share any of your personal experiences on why you were attracted to this field of study and what helped you succeed in it. Or just any insight on what the CS students at your school are like.
There is no single ideal computer science student or graduate working in the field. If you have a group of people working on some computer science project or research, a diversity of interests and strengths (both within and outside of computer science) and personalities can be helpful, since that increases the possibility of different insights being brought to bear on a problem.
I recommend the ability to speak Hindi. Seriously. If you keep up with the news, more and more CS jobs are outsourced to India, or to H-1B visa holders from India, and more and more managers in IT departments are from India. It is not uncommon for a programmer to be surrounded by people speaking Hindi. Learning the language (and culture) can help you feel at home in this environment, and work well with your peers. It can also help on those trips to India – another common part of a CS job nowadays (experienced by my friends who work at IBM, among others).
Outsourcing may be a current trend but doesn’t make up what a CS worker should focus on at all. As UCB said, there isn’t a single ideal person.
To paint broadly, you need the basics: a talent for (and usually enjoyment of) problem solving and the ability to communicate your ideas. If you have those two, the rest is a matter of time, learning, and experience. Of course, there’re many ways to solve a problem, and thus many different ways of thinking about a problem. So even the first part is very broad. I have a homework partner this semester that thinks completely differently than I do, but it works well because when one of us gets stuck, the other one makes headway on a whole new train of thought. That’s just one example of the diversity that UCB mentioned.
There are some interesting discussions about who can learn to code (not necessarily the same thing as being a CS major, partially because of the math content) at the “Computing Education Blog”. I probably can’t link to it, but look for the post titled, "Are there some students who can’t learn how to code? Teachers must always answer ‘No!’ "
Also, there have been some interesting posts on that blog and elsewhere about reducing the “cognitive load” in computer science classes as a way to make them more accessible. Perhaps you can find some research on the ability to handle a high “cognitive load” as an indicator of the likelihood of success in computer science. Cognitive load is closely tied to working memory, which is the most limited type of memory in a human. It’s why sometimes doing programming or related tasks feels like you have to set up things in your brain in a way that allows you to think about both the whole and the details of the problem, and interruptions (like eating or sleep) tear down that temporaty structure you’ve built in your brain to be able to work on the problem.
(IBM – so last millennium…) – oh, except that Watson is really cool.