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.