# What different lines of reasoning and traditions lead to the conclusion that Software Engineering is or isn't part of Computer Science?

Background: Some people consider Software Engineering as a branch of Computer Science, while others consider that they are, or should be, separate. The former stance seems to be well presented in written works. On Wikipedia, Software Engineering is classified as Applied Computer Science, along with, e.g., Artificial Intelligence and Cryptography. The ACM Computing Classification system places SE under Software, along with, e.g., Programming Languages and Operating Systems. CSAB has also considered SE as part of Computer Science, and considered that

[...] it includes theoretical studies, experimental methods, and engineering design all in one discipline. [...] It is this close interaction of the theoretical and design aspects of the field that binds them together into a single discipline.
[...]
Clearly, the computer scientist must not only have sufficient training in the computer science areas to be able to accomplish such tasks, but must also have a firm understanding in areas of mathematics and science, as well as a broad education in liberal studies to provide a basis for understanding the societal implications of the work being performed.

While the above seems to reflect my own view, there is also the stance that the term Computer Science should be reserved for what is sometimes called Theoretical Computer Science, such as Computability Theory, Computational Complexity Theory, Algorithms and Data Structures, and that other areas should be split off into their own disciplines. In the introductory courses I took for my CS degree, the core of CS was defined via the questions "what can be automated?" (Computability Theory) and "what can be automated efficiently?" (Computational Complexity Theory). The "how" was then explored at length in the remaining courses, but one could well consider SE being so far from these core questions that it shouldn't be considered part of CS.

Even here on CS.SE, there has been debate about whether SE questions are on-topic, reflecting the problematic relationship between CS and SE.

Question: I'm wondering what lines of reasoning and traditions within Computer Science might lead to one conclusion or the other: that SE is, or should be, part of CS or that it is not. (This implies that answers should present both sides.)

• This has the risk of being too subjective. – Dave Clarke Aug 10 '12 at 12:07
• I don't think people want to have CS=TCS. That's a different statement from SE $\notin$ TCS. Regarding Dave's comment, answer should include authorative evidence, not only bare opinion or experience. – Raphael Aug 10 '12 at 18:27
• @DaveClarke: True, and if that happens, the question should probably be closed. Hopefully, respondents can bring plenty of references to back up their answers. – Fabian Fagerholm Aug 10 '12 at 19:00
• Voted to close as inherently subjective. – JeffE Sep 12 '12 at 22:41
• ps: A claim like "there is also the stance that the term Computer Science should be reserved for what is sometimes called Theoretical Computer Science" needs to be supported by good examples. You have made a claim without giving any support for it and you are asking why people think so. – Kaveh Sep 13 '12 at 21:46

(I did some extensive searching and found material that answers my question. I liked Patrick87's answer, but I found this to be more complete.)

The answer to the question lies in a careful examination of the philosophy of Computer Science. In Computer Science, three intellectual traditions meet (or collide, if you wish) in a single discipline: the theoretical tradition; the empirical tradition; and the engineering tradition.

The theoretical tradition concerns itself with creating hypotheses or theorems, and proving them in a mathematical fashion. Its aim is the construction of coherent axiomatic systems of thought.

The empirical tradition concerns itself with forming hypotheses, models, and predictions, collecting data from experiments, and analysing the results. Its aim is to investigate and explain phenomena.

Finally, the engineering tradition concerns itself with stating requirements and specifications, and with designing, implementing, and testing systems based on these requirements and specifications. Its aim is to construct systems and solve concrete instances of problems.

Each of these traditions comes with a set of assumptions about the aims and means of scientific inquiry.

The traditions are not unique to Computer Science; they are general traditions that can be found to differing degrees in other disciplines. Perhaps the clearest examples are mathematics (theoretical tradition), physics (empirical tradition), and construction engineering (engineering tradition). Computer Science, though, operates in the intersection of all three traditions. However, depending on one's particular focus within Computer Science, and one's familiary with other parts of Computer Science, one might emphasize one of these traditions to the degree that the other two appear alien.

As noted in Patrick87's answer, the educational setting can emphasize a certain intellectual tradition which may lead someone to a certain kind of demarcation of Computer Science which either includes or does not include Software Engineering. Similarly, one may later adopt a view of science that includes or excludes one or more of the three traditions, or parts of them. For example, one may consider only the theoretical and empirical traditions to fulfil one's criteria for "science", and consider engineering non-scientific. One may also consider the three traditions to be on a value continuum, with one tradition being superior to the others (e.g. valuing the theoretical tradition most, the empirical tradition less, and the engineering tradition least).

So the lines of reasoning are rooted in the abovementioned traditions. Based on this, the answer to the question is that considering Software Engineering as part or not as part of Computer Science stems from one's understanding of science in general, and of one's understanding of the philosophy of Computer Science in particular.

The following articles go into considerable depth on this issue and summarise a lot of the viewpoints that have been put forward.

Tedre, Matti (2011) Computing as a Science: A Survey of Competing Viewpoints. Minds & Machines 21(3):pp.361-387.

Tedre, Matti (2009) Computing as Engineering. Journal of Universal Computer Science 15(8):pp.1642-1658

Tedre, Matti (2007) Know Your Discipline: Teaching the Philosophy of Computer Science. Journal of Information Technology Education 6(1):pp.105-122.

• Too bad I can't upwote twice ;-) – vonbrand Jan 25 '13 at 14:45

One might base such a decision on the kind of education and training expected of practitioners. A good source for investigating differences and similarities in this direction might be the ACM curriculum guidelines for computing professions, including CS and SwE.

Another might be in terms of the economic profile of these professional fields. The latest edition of the US Bureau of Labor Statistics Occupational Outlook Handbook provides a good deal of information comparing these fields' economic and social aspects.

One might take a more philosophical approach and ask what the fields are, in themselves, and how they are similar and different in that respect. The question of how, if at all, to distinguish between science and engineering is a long one, and e.g., David Parnas saw a distinction in this way (see the Computer science Wikipedia page).