Computer Science vs Software Engineering

My University education is in Computer Science, but by professional life and renewed research career is in Software Engineering.  A lot of people (and perhaps some University departments!) probably think these are just the same thing, with different names.  But in my transition to Software Engineering I’ve discovered they’re very different, and I think their difference is not all down to the the normal arguments about science vs engineering.
In Computer Science, the “unit of analysis” is the procedure (in the sense of effective procedure, but I also mean to include non-terminating processes).  Entities of interest include algorithms and data-structures, interfaces, ADTs, types, and languages for expressing them.
In contrast, in Software Engineering, the unit of analysis is the whole software system.  Here the entities of interest include architectures, and system models. A whole software system is not just “bigger” in size than a single procedure/process.  It also has many more different kinds of functionality, many more developers, and many different users and other stakeholders.
There are a lot of common themes across Computer Science and Software Engineering.  For example, both are concerned with issues such as specification, construction, distribution, performance analysis, and verification.
The challenges for Software Engineering are not just dealing with the scale of the system, but also dealing with the scale of the development of the system. The challenges are not just technical, they’re also socio-technical.  So although Computer Science and Software Engineering both deal with software and have many common themes, their technologies and methodologies are usually quite different because they’re dealing with different kinds of entities in different contexts.
Computer Science and Software Engineering Software are very different disciplines.

Comments 2

  • Thanks for a good post. I don’t know if you’ve seen the following sites, but they also have good information comparing the two disciplines (and certainly they are not the only ones):
    http://www.zenperfect.com/2007/07/30/computer-science-vs-programming-software-engineering/
    http://www.gamasutra.com/features/19991216/mcconnell_01.htm

  • Thanks anonymous! No I hadn’t seen those pages.
    I like Steve McConnell’s article, but I’m not sure I agree entirely with his statement that science vs engineering is the same in software as in the physical sciences. Scientists create better models of the world, Engineers create better worlds using models. I discuss this more in the introduction to my PhD thesis, but the basic issue is that a lot of computer science is only concerned with formal models of computation, and is never concerned with how they relate to the real world. Computer scientists are more like mathematicians than scientists or engineers. Paul Shen is saying a similar thing, so I think I like his article better. 🙂