Computer science is a relatively young discipline. Its birth can be traced to the 1940s, when wider academic interest in automatic computing was triggered by the construction of the first fully electronic, digital, Turing-complete computer, ENIAC, in 1945 and the concomitant birth of the stored-program paradigm (see, e.g., Aspray, 2000). It still took some 20 years for computer science to achieve a disciplinary identity distinct from fields such as mathematics, electrical engineering, physics, and logic (cf. Atchison et al., 1968; Rice & Rosen, 2004). Throughout the short history of electronic digital computing, there has been a great variety of approaches, definitions, and outlooks on computing as a discipline. Arguments about the content of the field, its methods, and its aims have sometimes been fierce, and the rapid pace of extension of the field has made it even harder to define computer science (see Tedre, 2006, pp. 255-351).
Over the last 60 years, researchers in the fields of computing have brought together a variety of scientific disciplines and research methodologies. The resulting science--computer science--offers a variety of ways for explaining phenomena; most notably it offers computational models and algorithms. The increased investments in research efforts in computer science have been paralleled by the growth of the number of computing-centered fields, such as computer engineering, scientific computation, electrical engineering, decision support systems, architectural design, and software engineering.
Although interdisciplinarity has made the development of computer science possible in the first place (cf. Bowles, 1996; Puchta, 1996; Williams, 1985, p. 209), it also poses a very real challenge to computer scientists. Firstly, it is not certain what kinds of topics should be considered to be computer science proper. The attempts to describe computer science are invariably either very narrow and applicable to only some subfields of computer science (e.g., Dijkstra, 1974), or so broad that they do not exclude much (e.g., Newell, Perlis, & Simon, 1967). Secondly, it is very difficult to come up with an overarching set of rules of how computer science research should ideally be done. The subjects that computer scientists study include, for instance, programs, logic, formulae, people, complexity, machines, usability, and systems. An overarching set of rules for computer science research should cover research in fields such as software engineering, complexity theory, usability, the psychology of programming, management information systems, virtual reality, and architectural design. It is uncertain if an overarching, all-inclusive definition of computer science is possible, and if such definition is even necessary.
It is important for computer scientists to understand the challenges (and possibilities) that the vast diversity of computer science research can cause. Many disputes about how computer scientists should work have their roots in different conceptions about what computer science actually is (cf. Denning et al., 1989). Many misunderstandings and controversies between scientists from different branches of computer science might be avoided by their understanding the research traditions within which people in those branches work.
Even more importantly, computer scientists must know that the same approaches cannot be used with the whole variety of subjects that computer scientists study. Mathematical and computational models are precise and unambiguous, yet they are confined to the abstract world of mathematics and they fail to capture the richness of physical and social reality. Narratives and ethnographies are rich in dimension and sensitive to detail, yet equivocal and context-dependent. Narratives have little use in deriving formulae, and formal proofs have little explanatory power regarding usability.
It has been argued that there are three particularly lucid traditions in computer science: the theoretical tradition, the empirical tradition, and the engineering tradition (cf. …