Wednesday, June 3, 2015

Software Engineering vs Computer Science

At The University of Auckland, you can get a Bachelor of Science (BSc), with a major in Computer Science (COMPSCI), and a Bachelor of Engineering (BE), with a specialisation in Software Engineering (SOFTENG). Naturally a common question we get is, what's the difference?

There are many opinions and explanations as to what is the difference between Computer Science and Software Engineering, including "there is no difference" and "one is a subset of the other". My answer has been developed over years of being asked this question at University Open days, Career symposiums, Industry events, and such like.

My answer has two parts — one philosophical and the other practical. The philosophical part is that the difference is one of theory versus practice. The goal of Computer Science research is to to develop a theory of "computation", to understand what computation means, what its limits are, and how it might be applied. Software Engineering is about building effective software systems efficiently.

Clearly there are close connections between the two. Software is the embodiment of computation. It is how most people experience computation, even if they don't think of it that way (any more than they would think of turning on an electric light as physics). While some aspects of computation do not require any software, or even a physical computer (e.g. a Turing machine), much of our understanding of computation is demonstrated through developing software.

But there are aspects of Computer Science that are at best a curiosity to those building software systems (Turing machines again) and there are topics that are clearly important to software engineering that have little to do with any theory of computation (requirements elicitation, for example).

The practical part of my answer is that the B.Sc (COMPSCI) is a 3-year general degree whereas the BE (SOFTENG) is a 4-year professional degree. The B.Sc. has relatively few restrictions as to what courses students must take (mostly science, and mostly in the Major), whereas the BE is very prescribed, with only a little opportunity for choice. Both the BSc and the BE meet the requirements of a university degree, as dictated by the Tertiary Education Commission (TEC), but in addition the BE is an internationally accredited engineering qualification.

So, if you want a professional qualification, you probably should consider the BE. If you would prefer a reasonable amount of flexibility and choice, the B.Sc would probably be the better option. If you are interested in different aspects of computation, then major in Computer Science. If you really want to be able to build significant software systems, then specialise in Software Engineering.