Computer Science is not Software Engineering

Recently, Jeff Atwood over at Coding Horror, posted regarding how Computer Science is taught, and how he feels it should be taught. Apparently, Joel Spolsky of Joel on Software, has also recently weighed in on the issue. Spolsky, whom I don’t read regularly, began his post with a quote from CrossTalk

“It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline.”

This discussion isn’t anything new. A coworker I have today graduated ten or so years ago, had the same remarks regarding an institution which neighbored his alma mater. The neighboring institution was so theory based, that the students graduating from it were unable to work in Industry. The key logical fault being made by those arguments, is that Computer Science has different goals than Software Engineering. Certainly, Software Engineering is based heavily on the ideas of Computer Science, but while they may solve similar problems, their intent in solving those problems in greatly different.

Atwood laments how many fresh graduates know nothing of Source Control, and I share that view. Source Control should be more prevelant among researchers, as it provides a strong record of the work they’ve done. As it becomes more prevelant among researchers and professors, it will become more prevelant among students. In some respects, I was lucky. The education I received at Montana State University was targeted largely toward Software Engineering. Too much so, I’ve grown to believe. My theoretical background is weaker than I wish it was, and I know that partly my inability to appreciate Mathematics when I was taking pure math courses is largely responsible for that.

I agree with Spolsky’s conclusion. Programs in Software Engineering are necessary for what most people are trying to achieve with Computer Science degrees. Most software engineers don’t really need to know the theory of Turing Machines and Finite State Automata. Most Software Engineers don’t need experience writing code to prove theories and concepts, but need to write code that accomplish tasks.

The best courses I had in College were the ones where we actually produced a product. Where our program had to do something, be interactive and usable. But that wasn’t the focus of the program, because I was, in theory, being trained to be a Computer Scientist, not a Software Engineer. Aside from a single Professor, every last one of my instructors was bore within Academia. It’s what they knew. It’s what they cared about, and these days, I’m giving a lot of thought to returning to Academia, and working more with the theory.

Spolsky and I clearly aren’t the only one’s who thought that Computer Science embodies different goals than Software Engineering. Steve Yegge writes about Wizard Schools, an idea which talks about professional Boarding Schools modeled after JK Rowling’s Harry Potter universe. In this idea, students go to boarding school from 11 until 18, taking hard core software engineering curriculum for seven years. When they get out, they are all easily the top software engineers available to industry, they are fast typers, and they literally think in code. It’s an interesting read.

Will Universities ever be able to fulfill the needs of Software Engineering curricula? I’m not sure. I suspect not, and I suspect that more vocationally oriented programs, not quite “Wizard Schools” probably, as who wants to damn their 11-year old into a field they may not enjoy or be cut out for? Wait, maybe I’m thinking too much into people’s parenting ability. Anyway, even the existence of Vocational programs, which can exist alongside academic programs, but might not do so quickly enough to matter.

We require both kinds though. Theory still has a place. Academic Research still has a place. Sure, research can exist within industry, but it ends up so laden in Intellectual Property issues and patent problems that it can’t thrive. While we need to acknowledge that a degree in Software Engineering may be necessary for Industry, Academia should not give up on pure Computer Science, for those students who actually want to pursue that path. While a PhD is Computer Science may never mean much in Industry, perhaps a PhD in Software Engineering can be made to return prestige to the Academic process in our industry.