Styles

Sunday, June 7, 2015

Do programmers need a degree in Computer Science?

Note: this post was originally published on InfoWorld.com.

A recent survey from StackOverflow states that 48 percent of developers never received a degree in Computer Science. But when you look at the requirements for software developer jobs (at least in the Chicago area), it seems that most positions list a degree in Computer Science as a preferred item, if not a requirement. Are these 48 percent of developers without a Computer Science degree disadvantaged when it comes to their ability to perform on the job? My experience -- though with a music degree I'm a bit biased -- is that programmers without a degree in Computer Science can perform better at some technology-related tasks than their degreed counterparts. Why is that?

The mismatch between Computer Science and day-to-day programming

I've interviewed job candidates straight from school who had spent classes performing utterly useless programming activities (like debugging syntax errors in a text editor when free software will do that for you), making me question the value of their degree. Low-quality training is, of course, a problem, but even quality Computer Science programs don't teach the skills necessary to be productive on the job.

Most of the relatively new Computer Science graduates I've worked with had a fairly good overview of how technology is supposed to work, making it relatively easy to explain technical concepts to them. But explaining what needed to happen in order to solve the problem at hand was much harder. In other words, they had a pretty good idea what was possible, but had trouble deciding which concepts were appropriate for a given scenario. It would have been much more useful to me as an employer to have someone with deeper experience in a narrow field and less breadth of knowledge to be more effective on day one of employment.

In other words, it seems to me like getting a Computer Science degree is like learning about how materials used to make a piano affect its sound, response, etc., without spending much time actually learning how to play. But to be an effective piano player, it is much more important to learn to play piano -- to learn to apply knowledge in a useful manner -- than it is to know how a piano is played and made.

Why continuous learning is the most important predictor of success

Many people, after reading the above section, will state that the job of a Computer Science degree is to provide a foundation of knowledge that can be built on later. But this is true for any means of learning to program. Most of the people reading this know that new technologies come out at a dizzying pace. One of my ex-employers stated that technologies tend to cycle every three years, meaning that you should expect to be working with different tools and approaches three years from now. Programmers who can take new tools, languages, and other information and effectively incorporate them into their day-to-day work will be a great deal more successful than those who cannot. I would guess that, all other things being equal, the advantage to having a Computer Science degree for developer effectiveness would be severely diminished by the end of the first three-year cycle, and would be eliminated by the second.

Cultural differences between Computer Science graduates and self-taught programmers

At the beginning of the article, I mentioned that there are some areas in which I've noticed that self-taught programmers perform better than those with Computer Science degrees. That area? Understanding business requirements. I've met some programmers who love to dig into the business problem to get a better understanding of the problem they're trying to solve, and others don't want to be bothered with the messy details and only want to be told what to build. Given that the typical setup for development teams is that business analysts spoon-feed software requirements to the development team, this may not seem like such a big deal. But as I wrote about earlier, poor requirements can derail a project faster than poor coding will, and the best way to get high-quality requirements is to get the people building the software communicating directly with the people using it.

Conclusion

Does this mean that I typically look for candidates without Computer Science degrees? No, of course not. But it does mean that when I look for candidates for a position, I typically look at the degree out of idle curiosity only. Even with recent graduates, I'm much more interested in the side-projects that the candidate has done to apply their knowledge than anything they might have learned in the classroom. Candidates who show an ability to learn new things without being directly taught have an advantage over those who haven't, regardless of their formal education. I wish more candidates and employers felt the same way.