Software Engineering Is Not Computer Science
So this is an idea that I’ve been thinking about on and off since around the time I took the software engineering course at Berkeley, CS169. About a year ago I was taking the course and concurrently started delving into the recruiting process and looking for a job as a software engineer.
Well, in the process of doing those two things, as well as my peripheral involvement in a couple of open source projects, I started thinking about how ill-equipped a computer science graduate was to build and ship commercial, usable software; even graduates from one of the top programs in the world. Throughout the EECS program at Berkeley we learned a great deal about computer science, different programming paradigms, and the general concepts surrounding compilers, databases, or operating systems. We were not however afforded the opportunity to learn how to apply the things we’d learned and turn them into shipping software, being used by hundreds or thousands of people. The little experience you could say we did get in this area was from the semester-long group projects that we worked on. Yes, a software engineering course was offered, and of course I took what I could get, but in a just one semester we only skimmed the surface of the techniques and tools required for the task.
Ultimately, I think there is a rift (a big giant gaping one) between the people the top computer science programs in the country are producing and the people the top software development companies require.
The fact is computer science programs as they stand today are geared towards preparing students to continue to graduate-level research in the area. This is not to say that such programs should not exist, but that CS grads and folks that are well-equipped to build and ship commercially viable software are not usually the same people.
All this aside, the software development industry has not ground to a halt due to unqualified people. What’s happening instead is that CS grads, or the others in the industry without a CS education, are picking up (some?) of what they need to know on the job. This is part of the reason that the software we use today takes so long to develop and remains so unreliable for the most part.
Of course, it would have been better had I sat down to write my thoughts on the topic before Steve McConell, author of the acclaimed book Code Complete, had written a fabulous piece on just this same topic. However, his essay on the issue is longer and takes a more in-depth look at software engineering versus computer science as ideas and approaches to the same problem. Its a highly recommended read for anybody involved in software engineering or computer science.
Steve McConell - Software Engineering, Not Computer Science