Software Science

Divider

If I had actually been aware of all the efforts made in the past centuries, I would never have written a line, but would have done something else.
-- Goethe
DISCLAIMER. This page is neither complete nor accurate. It merely serves as a point of reference on certain subjects. Contact me if you have any questions.

What is software science?

A good scientist is a person with original ideas. A good engineer is a person who makes a design that works with as few original ideas as possible. There are no prima donnas in engineering.
-- Freeman Dyson

According to Robin Milner [2006], the term 'software science' refers to the "principles, concepts, models and constructions that we use to build and understand software systems", contributing theories to which include "automata theory, formal language theory, automation of logics, program semantics, specification and verification disciplines, type theories, process calculi, temporal and modal logics, calculi for mobile systems, intelligent agents".

Software science is distinguished from software engineering as being concerned with descriptive (rather then normative) statements. Software science stands to software engineering in the way chemistry stands to chemical engineering and material science to civil engineering.

Dijkstra argued that the term computer science is unfortunate because “Computer science is no more about computers than astronomy is about telescopes”. Yet the engineering bias has steered research in software towards current technologies and towards effective and commercially-viable techniques for constructing software, including methodologies (such as Jackson Structured Programming, Object-Oriented Analysis) and processes (such as software lifecycle models), which are at the scope of the SWEBOK enterprise [Abran et al. 2004].

Treated as a natural (empirical) science, software science can be understood as the discipline which emanates from treating computer programs (“source code”) as objects tantamount to “natural phenomena”, much in the way that astronomy treats planets and zoology treats natural species, thereby suggesting scientific methods of investigation such as observation, analysis, measurement, verification, and empirical validation.

Almost anything in software can be implemented, sold, and even used given enough determination. There is nothing a mere scientist can say that will stand against the flood of a hundred million dollars.
-- C.A.R. Hoare, "The Emperor's Old Clothes"
Software science has been conducted and will continue to be conducted, but to date there are no conferences, journals, books or papers on “software science” (Google it!). Categories of software are demarcated for example by theories of computability, computational complexity, software complexity, and the Intension/Locality criteria. The theory of programming languages and programming paradigms, formal modelling of software design, Lehman's laws of software evolution, Turner's foundations to the theory of functional specifications and many other contributions count towards “software science”.

Further reading:

  • Michael S. Mahoney. " Software as Science—Science as Software." in: Ulf Hashagen, Reinhard Keil-Slawik, Arthur Norberg (eds.) History of Computing: Software Issues. Berlin: Springer Verlag, 2002. [History of software science]
  • Robin Milner. "Ubiquitous Computing: Shall we Understand It? The Computer Journal, Vol. 49, No. 4 (2006), pp. 383–389. [Definition of software science]
  • W.V.O. Quine. "On what there is." In: From a Logical Point of View. 2nd ed. Cambridge, MA: Harvard University Press, 1961. [Scientific theories as ontologies]

Amnon Eden
Revised: April 2008