3.1 Computer science: its nature, scope and methods
One of the fundamental questions for a philosophy of computer science concerns the nature and scientific status of computer science. We will discuss four prominent accounts of computer science as an academic field and discuss some of their limitations. The first account that is sometimes given may be called the deflationary account. It holds that computer science is such a diverse field that no unified definition can be given that would underscore its status as a science or even as a coherent academic field. Paul Graham [2004], for example, has claimed that “computer science is a grab bag of tenuously related areas thrown together by an accident of history”, and Paul Abrahams has claimed that “computer science is that which is taught in computer science departments” [Abrahams, 1987, p. 1].
An objection to deflationary accounts is that they do not explain how computer science is capable of functioning as a recognized academic field, nor do they address its scientific or academic credentials. Rejecting a deflationary account, others have attempted to characterize computer science as either a science, a form of engineering, or a branch of mathematics [Wegner, 1976; Eden, 2007]. On the mathematical conception of computer science, computer science is a branch of mathematics, its methods are aprioristic and deductive, and its aims are to develop useful algorithms and to realize these in computer programs. Theoretical computer science is defended as the core of the field of computer science. A mathematical conception has been defended, amongst others, by Knuth [1974a], who claims that computer science centrally consists of the writing and evaluation of programs, and that computer programs are mere representations of algorithms that can be realized in computers. Knuth defines an algorithm as a “precisely-defined sequence of rules telling how to produce specified output information from given input information in a finite number of steps” [Knuth, 1974a, p. 2]. Since algorithms are mathematical expressions, Knuth argues, it follows that computer science is a branch of applied mathematics. A similar position is taken by Hoare [1986].
The scientific conception of computer science holds that the apriorism of the mathematical conception is incorrect, and that computer science is an ordinary empirical science. The aim of computer science is to explain, model, understand and predict the behavior of computer programs, and its methods include deduction and empirical validation. This conception has been defended by Allen Newell and Herbert Simon, who have defined computer science as “the study of the phenomena surrounding computers” and who have claimed that it is a branch of natural (empirical) sciences, on a par with “astronomy, economics, and geology” [1976, pp. 113-114]. A computer is both software and hardware, both algorithm and machinery. Indeed, it is inherently difficult to make a distinction between the two [Suber, 1988]. The workings of computers are therefore complex causal-physical processes that can be studied experimentally like ordinary physical phenomena. Eden claims that the scientific conception seems to make a good fit with various branches of computer science that involve scientific experiments, including “artificial intelligence, machine learning, evolutionary programming, artificial neural networks, artificial life, robotics, and modern formal methods” [2007, p. 138].
An objection to the scientific conception has been raised by Mahoney [2002], who argues that computers and programs cannot be the subject of scientific phenomena because they are not natural phenomena. They are human-made artifacts, and science does not study artifacts but natural phenomena. Newell and Simon have anticipated this objection in their 1976 paper, where they acknowledge that programs are indeed contingent artefacts. However, they maintain that they are nonetheless appropriate subjects for scientific experiments, albeit of a novel sort. They argue that computers, although artificial, are part of the physical world and can be experimentally studied just like natural parts of the world (see also [Simon, 1996]). Eden [2007] adds that analytical methods fall short in the study of many programs, and that the properties of such programs can only be properly understood using experimental methods.
The engineering conception of computer science, finally, conceives of computer science as a branch of engineering concerned with the development of computer systems and software that meet relevant design specifications (see e.g. [Loui, 1987]). The methodology of computer science is an engineering methodology for the design and testing of computer systems. Theoretical computer science does not constitute the core of the field and has only limited applicability. The engineering conception is supported by the fact that most computer scientists do not conduct experiments but are rather involved in the design and testing of computer systems and software. The testing that is involved is usually not aimed at validating scientific hypotheses, but rather at establishing the reliability of the systems that is being developed and in making further improvements in its design.
Eden [2007] has argued that the engineering conception of computer science seems to have won out in recent decades, both in theory and in practice. The mathematical conception has difficulties accounting for complex software systems, and the scientific conception does not make a good fit with the contemporary emphasis on design. A worrisome aspect of this development, Eden argues, is that the field seems to have developed an anti-theoretical and even anti-scientific attitude. Theoretical computer science is regarded to be of little value, and students are not taught basic science and the development of a scientific attitude. The danger is that computer science students are only taught to build short-lived technologies for short-term commercial gain. Eden argues that computer science has gone too far in jettisoning theoretical computer science and scientific approaches, and that the standards of the field have suffered, resulting in the development of poorly designed and unreliable computer systems and software. For computer science (and especially software engineering) to mature as a field, Eden argues, it should embrace again theoretical computer science and scientific methods and incorporate them into methods for design and testing.