Three Paradigms of Computer Science


We examine the philosophical disputes among computer scientists concerning methodological, ontological, and epistemological questions: Is computer science a branch of mathematics, an engineering discipline, or a natural science? Should knowledge about the behaviour of programs proceed deductively or empirically? Are computer programs on a par with mathematical objects, with mere data, or with mental processes? We conclude that distinct positions taken in regard to these questions emanate from distinct sets of received beliefs or paradigms within the discipline:

  • The rationalist paradigm, which was common among theoretical computer scientists, defines computer science as a branch of mathematics, treats programs on a par with mathematical objects, and seeks certain, a priori knowledge about their ‘correctness’ by means of deductive reasoning.

  • The technocratic paradigm, promulgated mainly by software engineers and has come to dominate much of the discipline, defines computer science as an engineering discipline, treats programs as mere data, and seeks probable, a posteriori knowledge about their reliability empirically using testing suites.

  • The scientific paradigm, prevalent in the branches of artificial intelligence, defines computer science as a natural (empirical) science, takes programs to be entities on a par with mental processes, and seeks a priori and a posteriori knowledge about them by combining formal deduction and scientific experimentation.

We demonstrate evidence corroborating the tenets of the scientific paradigm, in particular the claim that program-processes are on a par with mental processes. We conclude with a discussion in the influence that the technocratic paradigm has been having over computer science.

This is a preview of subscription content, log in to check access.


  1. 1.

    To which Wegner also refers as ‘cultures’ or ‘disciplines’ interchangeably.

  2. 2.

    The “Denning report” (Denning et al. 1989) authored by the task force which was commissioned to investigate “the core of computer science” also lists three “paradigms” of the discipline: theory/mathematics, abstraction/science, and design/engineering. According to this report, these paradigms are “cultural styles by which we approach our work”. They conclude however that “in computing the three processes are so intricately intertwined that it is irrational to say that any one is fundamental”.

  3. 3.

    For example, the statement ‘programs are abstract’ shall be taken to assert that ‘program-scripts and program-processes are abstract’.

  4. 4.

    Also known as machine code or object code.

  5. 5.

    The program adds 3 to the product of two numbers, encoded in the 8086 microprocessor assembly language (Adapted from Georick et al. 1997).

  6. 6.

    For example, consider the difficulty of spotting and correcting errors in the program in Table 1.

  7. 7.

    The program adds 3 to the product of two numbers, encoded here in the syntax of Scheme (Abelson and Sussman 1996), a dialect of Lisp

  8. 8.

    A statement most widely attributed to Dijkstra.

  9. 9.

    We follow Colburn (2000) in taking a priori knowledge about a program to be knowledge that is prior to experience with it, namely knowledge emanating from analyzing the program-script, and a posteriori knowledge to be knowledge following from experience with observed phenomena, namely knowledge concerning a given set of specific program-processes generated from a given script.

  10. 10.

    Delivered, according to Mahoney (2002), in 1985 during his Inaugural Lecture as Professor of Computation at Oxford.

  11. 11.

    Which were later accompanied by algorithms and abstract state machines.

  12. 12.

    Dijkstra (1988) offered an explanationto how this ‘fact’ escaped mathematicians and programmers alike: “Programs were so much longer formulae than [mathematics] was used to that [many] did not even recognize them as such.

  13. 13.

    Bill Rapaport (2007) notes that such a position has interesting consequences on the question whether programs can be copyrighted or patented.

  14. 14.

    \({\mathbf{tech\cdot noc\cdot ra\cdot cy}}\,\, n.\) A government or social system controlled by technicians, especially scientists and technical experts. (The American Heritage® Dictionary of the English Language: Fourth Ed., 2000.)

  15. 15.

    These events have led to the seminal NATO conference held in the fall of 1968 (Naur and Randell 1969) concerning the trouble that the software industry had been experiencing in producing reliable computing systems. In the introduction to the conference’s report, Robert McClure (2001) argues that although the term ‘software engineering’ was not in general use at that time, its adoption for the titles of these conferences was deliberately provocative and played a major role in gaining general acceptance for the term.

  16. 16.

    At most, lip-service is paid to the role of verification in ‘safety-critical software systems’.

  17. 17.

    For example, the Debian GNU/Linux 3.1 version of the Linux operating system (Debian 2007) is the product of contributions made by thousands of individuals that are entirely unrelated except in their attempt to improve it.

  18. 18.

    One petabyte (1PB) is 1,024 terabytes or 250 bytes.

  19. 19.

    We ignore, for the moment, difficulties arising from concurrency and the possibility of suspending the execution of program-processes.

  20. 20.

    That is, the computational process by the central processing unit depends on the consumption of energy; if suspended, program-processes cease to exist.

  21. 21.

    Turing forecast named the year 2000 as a target. During that year, Jim Moor conducted an experiment which refuted Turing’s prediction, but he hastens to add: “Of course, eventually, 50 years from now or 500 years from now, an unrestricted Turing test might be passed routinely by some computers. If so, our jobs as philosophers would just be beginning”. (Moor 2000)

  22. 22.

    Hoare (2006) has recently conceded that “Because of its effective combination of pure knowledge and applied invention, Computer Science can reasonably be classified as a branch of Engineering Science.”

  23. 23.

    To which Bertrand Meyer (1997) satirical critique offers valuable insights.


  1. Abran, A., & Moore, J. W. (Eds.) (2004). Guide to the Software Engineering Body of Knowledge—SWEBOK (2004 ed.) Los Alamitos: IEEE Computer Society.

    Google Scholar 

  2. Abelson, H., Sussman, J.J. (1996). Structure and Interpretation of Computer Programs. (2nd ed.) Cambridge: MIT Press.

  3. Aho, A. V., Sethi, R., & Ullman, J. D. (1986). Compilers: Principles, techniques, and tools. Reading: Addison Wesley.

    Google Scholar 

  4. Balaguer, M. (2004). Platonism in metaphysics. In: E. N. Zalta (Ed.), The Stanford Encyclopedia of philosophy (Summer 2004 ed.) Available (Accessed March 2007.)

  5. Bedau, M. A. (2004). Artificial life. In: L. Floridi (Ed.), The Blackwell guide to philosophy of computing and information. Malden: Blackwell.

    Google Scholar 

  6. Berry, H., Pérez, D. G., & Temam, O. (2005). Chaos in computer performance. Nonlinear Sciences arXiv:nlin.AO/0506030.

  7. Brent, R., & Bruck, J. (2006). Can computers help to explain biology? Nature, 440, 416–417.

    Article  Google Scholar 

  8. Bundy, A. (2005). What kind of field is AI? In: D. Partridge, & Y. Wilks (Eds.), The foundations of artificial intelligence. Cambridge: Cambridge university Press.

    Google Scholar 

  9. Carr, N. G. (2004). Does IT matter? Information technology and the corrosion of competitive advantage. Harvard Business School Press.

  10. Cohn, A. (1989). The notion of proof in hardware verification. Journal of Automated Reasoning, 5(2), 127–139.

    MATH  Article  Google Scholar 

  11. Colburn, T. R. (2000). Philosophy and computer science. Armonk, N.Y.: M.E. Sharpe.

    Google Scholar 

  12. Copeland, B.J. (2002). The Church-Turing thesis. In: Edward N. Zalta (Ed.) The Stanford Encyclopedia of Philosophy (Fall 2002 ed.) Available (Accessed Mar. 2007).

  13. Copeland, B.J. (2006). Are computer programs natural kinds? Personal correspondence.

  14. Devaney, R. L. (1989). Introduction to chaotic dynamical systems (2nd ed.). Redwood: Benjamin-Cummings Publishing.

    Google Scholar 

  15. Debian Project, The. Accessed March 2007.

  16. DeMillo, R. A., Lipton, R. J., & Perlis, A. J. (1979). Social processes and proofs of theorems and programs. Communications of the ACM, 22(5), 271–280.

    Article  Google Scholar 

  17. Denning, P. J. (1989). A debate on teaching computing science. Communications of the ACM, 32(12), 1397–1414.

    Article  Google Scholar 

  18. Denning, P. J., Comer, D. E., Gries, D., Mulder, M. C., Tucker, A., Turner, A. J., & Young, P. R. (1989). Computing as a discipline. Communication of the ACM, 32(1), 9–23.

    Article  Google Scholar 

  19. Dijkstra, E.W. (1988) On the cruelty of really teaching computing science. Unpublished manuscript EWD 1036.

  20. Dybå, T., Kampenesa, V. B., & Sjøberg, D. I. K. (2006) A systematic review of statistical power in software engineering experiments. Information and Software Technology, 48(8), 745–755.

    Article  Google Scholar 

  21. Eden, A. H., Hirshfeld, Y., & Kazman, R. (2006) Abstraction classes in software design. IEE Software, 153(4), 163–182. London, UK: The Institution of Engineering and Technology.

    Google Scholar 

  22. Einstein, A. (1934). Mein Weltbild. Amsterdam: Querido Verlag.

    Google Scholar 

  23. Fasli, M. (2007). Agent technology for E-commerce. London: Wiley.

    Google Scholar 

  24. Fetzer, J. H. (1993). Program verification. In: J. Belzer, A. G. Holzman, A. Kent, & J. G. Williams (Eds.), Encyclopedia of computer science and technology (Vol. 28, Supplement 13). New York: Marcel Dekker Inc.

    Google Scholar 

  25. Gamma, E., Helm, R., Johnson, R., & Vlissides, J. M. (1995). Design patterns: Elements of reusable object-oriented software. Reading: Addison-Wesley.

    Google Scholar 

  26. Georick, W., Hoffmann, U., Langmaack, & H. (1997). Rigorous compiler implementation correctness: How to prove the real thing correct. Proc. Intl. Workshop Current Trends in Applied Formal Method. Lecture Notes in Computer Science, Vol. 1641, pp. 122–136. London, UK: Springer-Verlag.

  27. Gibbs, W. W. (1994) Software’s chronic crisis. Scientific American, 271(3), 86–95.

    Article  Google Scholar 

  28. Hall, A. (1990). Seven myths of formal methods. IEEE Software, 7(5), 11–19.

    Article  Google Scholar 

  29. Hoare, C. A. R. (1969). An axiomatic basis for computer programming. Communications of the ACM, 12(10), 576–583

    MATH  Article  Google Scholar 

  30. Hoare, C. A. R. (1986). The mathematics of programming: an inaugural lecture delivered before the Univ. of Oxford on Oct. 17, 1985. New York: Oxford University Press

  31. Hoare, C. A. R. (2006). The ideal of program correctness. Transcript of lecture, Computer Journal. London: British Computer Society. Available: (Accessed Mar. 2007)

  32. IEEE Std 610.12-1990 (1990). IEEE Standard Glossary of Software Engineering Terms. Los Alamitos: IEEE Computer Society.

  33. Knuth, D. E. (1968). The art of computer programming, Vol. I: Fundamental algorithms. Reading, MA: Addison Wesley.

    Google Scholar 

  34. Knuth, D. E. (1974). Computer science and its relation to mathematics. The American Mathematical Monthly, 81(4), 323–343.

    MATH  Article  MathSciNet  Google Scholar 

  35. Knuth E. D. (Undated). On the game of life, free will and determinism.(Video). Available: (Accessed Mar. 2007)

  36. Kuhn, T. (1962). The structure of scientific revolutions. Chicago: University of Chicago Press.

    Google Scholar 

  37. Loux, M. J. (1998). Nominalism. Routledge Encyclopedia of Philosophy (electronic Ver. 1.0). London and New York: Routledge.

  38. Mahoney, M. S. (2002). Software as science—Science as software. In: U. Hashagen, R. Keil-Slawik, & A. Norberg (Eds.), History of computing: software issues. Berlin: Springer Verlag.

    Google Scholar 

  39. Mainzer, K. (2004). System: an introduction to systems science. In: L. Floridi (Ed.), The Blackwell guide to philosophy of computing and information. Malden: Blackwell.

    Google Scholar 

  40. Markie, P. (2004). Rationalism vs. Empiricism. In: E. N. Zalta (Ed.), The Stanford Encyclopedia of Philosophy. Available (Accessed Mar. 2007).

  41. McCarthy, J. (1960). Recursive functions of symbolic expressions and their computation by machine, Part I. Communications of the ACM, 3(4), 184–195.

    MATH  Article  MathSciNet  Google Scholar 

  42. McCarthy, J. (1962). Towards a mathematical science of computation. Proceedings of IFIP.

  43. McClure, R. M. (2001). Introduction. Addendum to: (Naur & Randell 1969). Available: (Accessed Mar. 2007)

  44. McLaughlin, B. (2004). Computationalism, connectionism, and the philosophy of mind. In: L. Floridi (Ed.), The Blackwell guide to philosophy of computing and information. Malden: Blackwell.

    Google Scholar 

  45. Meyer, B. (1997). UML—The Positive Spin. American Programmer, 10(3). Available: (Accessed Mar. 2007)

  46. Milner, R. (2007). Memories of Gilles Kahn, and the informatic future. Transcript of speech before Colloquium in memory of Gilles Kahn, INRIA Research Institute.

  47. Naur, P., & Randell, B. (Eds.) (1969). Software Engineering: Report of a conference sponsored by the NATO Science Committee (7–11 Oct. 1968), Garmisch, Germany. Brussels, Scientific Affairs Division, NATO.

  48. Newell, A., & Simon, H. A. (1976). Completer science as empirical inquiry: Symbols and search. Communications of the ACM, 19(3), 113–126.

    Article  MathSciNet  Google Scholar 

  49. Olson, E. T. (1997). The ontological basis of strong artificial life. Artificial Life, 3(1), 29–39.

    Google Scholar 

  50. OMG (Object Management Group). (2005). Unified Modeling Language (UML), Ver. 2.0. Technical report (2005). Available (Accessed Mar. 2007)

  51. Ophir, S. (2006). Computer science and commercial forces: Can computer science be considered science? In Proc. 4th European conf. Computing And Philosophy—ECAP, Trondheim, Norway.

  52. Parnas, D. L. (1972). On the criteria to be used in decomposing systems into modules. Communications of the ACM, 15(12), 1053–1058.

    Article  Google Scholar 

  53. Perry, D. E., & Wolf, A. L. (1992). Foundation for the study of software architecture. ACM SIGSOFT Software Engineering Notes, 17(4), 40–52.

    Article  Google Scholar 

  54. Pierce, J. R. (1968). Keynote address. Conference on Academic and Related Research Programs in Computing Science (5–8 June 1967). Reprinted in: A. Finerman (Ed.), University Education in Computing Science. New York: Academic Press.

  55. Popper, K. (1963). Conjectures and refutations: The growth of scientific knowledge. Routledge, London.

    Google Scholar 

  56. Putnam, H. (1975). Minds and machines. In: Philosophical papers, Vol. 2: Mind, Language, and reality. pp. 362–385. Cambridge: Cambridge University Press.

  57. Quine, W. V. O. (1969). Natural kinds. In: Ontological reality and other essays. Columbia University Press.

  58. Rapaport, W. J. (2007). Personal correspondence.

  59. Rapaport, W. J. (2005). Philosophy of computer science: An introductory course. Teaching Philosophy, 28(4), 319–341.

    MathSciNet  Google Scholar 

  60. Raymond, E. S. (1996). The New Hacker’s Dictionary (3rd ed.). Cambridge: MIT Press.

    Google Scholar 

  61. Simon, H. A. (1969). The sciences of the artificial (1st ed.) Boston: MIT Press.

    Google Scholar 

  62. Sommerville, I. (2006). Software engineering (8th ed.) Reading: Addison Wesley.

    Google Scholar 

  63. Stack, G. S. (1998). Materialism. Routledge Encyclopedia of Philosophy (electronic Ver. 1.0). London and New York: Routledge.

  64. Steinhart, E. (2003). Supermachines and superminds. Minds and Machines, 13(1), 155–186.

    MATH  Article  Google Scholar 

  65. Stoy, J. E. (1977). Denotational semantics: The Scott-Strachey approach to programming language theory. Cambridge: MIT Press.

    Google Scholar 

  66. Strachey, C. (1973). The varieties of programming language. Tech. Rep. PRG-10 Oxford University Computing Laboratory.

  67. Szyperski, C. A. (2002). Component software—Beyond object-oriented programming (2nd ed.). Reading: Addison-Wesley.

    Google Scholar 

  68. Turing, A. M. (1936). On computable numbers, with an application to the entscheidungsproblem. In Proc. London Math. Soc. Ser., 2, 43(2198). Reprinted in Turing & Copeland (2004).

  69. Turing, A. M. (1950). Computing machinery and intelligence. Mind, 59, 433–460.

    Article  MathSciNet  Google Scholar 

  70. Turing, A. M., & Copeland, B. J. (Ed.) (2004). The essential Turing: Seminal writings in computing, logic, philosophy, artificial intelligence, and artificial life plus the secrets of Enigma. Oxford, USA: Oxford University Press.

  71. Turner, R. (2005). The foundations of specification. Journal of Logic & Computation, 15(5), 623–663.

    MATH  Article  Google Scholar 

  72. Turner, R. (2007). Personal correspondence.

  73. Wegner, P. (1976). Research paradigms in computer science. In Proc. 2nd Int’l Conf. Software engineering, San Francisco, CA, pp. 322–330.

Download references


Special thanks go to Ray Turner for reviewing draft arguments and for his guidance and continuous support, without which this paper would not have been possible; to Jack Copeland for his guidance on matters of traditional philosophy; and to Bill Rapaport for his detailed comments. We also thank Tim Colburn (2000) and Bill Rapaport (2005) without whose extensive contributions the nascent discipline of philosophy of computer science would not exist; Barry Smith for his guidance; Susan Stuart for developing the contentions made of this paper; Naomi Draaijer for her support; Yehuda Elkana, Saul Eden-Draaijer, and Mary J. Anna for their inspiration. This research was supported in part by grants from UK’s Engineering and Physical Sciences Research Council and the Royal Academy of Engineering.

Author information



Corresponding author

Correspondence to Amnon H. Eden.

Rights and permissions

Reprints and Permissions

About this article

Cite this article

Eden, A.H. Three Paradigms of Computer Science. Minds & Machines 17, 135–167 (2007).

Download citation


  • Philosophy of computer science
  • Ontology and epistemology of computer programs
  • Scientific paradigms