In this day and age, sophisticated critique of technology and science is much needed. What we don’t need is critiques like this long piece in the Baffler by Corey Pein which, I think, is trying to mount a critique of the lack of ethics education in computer science curricula but seems most concerned with asserting that computer science is not a science. By, I think, relying on the premise that “Silicon Valley activity and propaganda” = “computer science.” I fail to understand how a humanistic point is made by asserting the ‘unscientific’ nature of a purported science, but your mileage may vary. Anyway, on to Pein.
Here is a choice quote:
It’s now painfully clear that computer science is not actually a science, by the simplest definition of that word—a method of obtaining, organizing, and analyzing knowledge about the universe. Granted, computers may assist with the tasks of obtaining, organizing, and analyzing. But “computer science” as a specialized field of gadget-enabled inquiry is not concerned with the natural universe—it is, rather, engaged in exploring an entirely fabricated universe that exists inside the computer…Because it is devoted to the creation of systems that limit choice, “computer science” is something more pernicious than a non-science—it is an outright enemy of scientific reasoning.
The ignorance of basic computer science principles and history, and most gallingly, internal debates in the discipline, is painful to behold (the status of computer science as a science has long been discussed by those who work in this discipline.) Pein, I’m quite sure, has never heard of the theory of computation, or possibly ever read an article on the history of computer science. I’m unwilling to write a lengthy refutation of this piece, and will rest content with excerpting the section titled ‘Computer Science as a Science’ from Chapter Four of my Decoding Liberation: The Promise of Free and Open Source Software (please email me to ask for a PDF copy of the book or the chapter):
Though we can think of hackers and hobbyists as practicing a “naturalist” computer science in its early days, it did not acquire all the trappings of a scientific discipline until the establishment of university computer science departments some twenty years after ENIAC. Through the 1960s, computer science had to struggle to be recognized as a discipline within the academy as it competed with older applied sciences such as electrical engineering and applied mathematics. In particular, it had to combat the perception that computers were just clerical tools to be used for mundane administrative chores. Aiding in the recognition of computer science as an academic discipline, George Forsythe, a mathematician at Stanford University, created a Division of Computer Science within the Mathematics Department in 1961, which split off in 1967 to become the first computer science department (Ceruzzi 2003, 102). At that time Forsythe defined the “computer sciences” as “the theory of programming, numerical analysis, data processing, and the design of computer systems” (Knuth 1972).
Other stalwarts in the field had already made a formal definition of computer science. Herbert Simon, Alan Perlis, and Allan Newell wrote a letter to Science in 1967, defining computer science as the “study of computers” (Newell, Perlis, and Simon 1967). Their letter defended their definition and argued for the legitimacy of computer science as a science in response to a varied set of objections, including one claiming that computers as man-made artifacts were not a legitimate object of study for a “natural science.” The trio argued, “[Computers] belong to both [engineering and science], like electricity (physics and electrical engineering) or plants (botany and agriculture). Time will tell what professional specialization is desirable . . . between the pure study of computers and their application.” Newell and Simon went on to remark, in their 1975 Turing Award acceptance lecture:
Computer science is an empirical discipline. We would have called it an experimental science, but like astronomy, economics, and geology, some of its unique forms of observation and experience do not fit a narrow stereotype of the experimental method. None the less [sic], they are experiments. Each new machine that is built is an experiment. Actually constructing the machine poses a question to nature; and we listen for the answer by observing the machine in operation and analyzing it by all analytical and measurement means available. Each new program that is built is an experiment. It poses a question to nature, and its behavior offers clues to an answer. But as basic scientists we build machines and programs as a way of discovering new phenomena and analyzing phenomena we already know about. Society often becomes confused about this, believing that computers and programs are to be constructed only for the economic use that can be made of them. . . . It needs to understand that the phenomena surrounding computers are deep and obscure, requiring much experimentation to assess their nature. (Newell and Simon 1976)
In 1996…Frederick Brooks argued that computer science was grievously misnamed, that its practitioners are not scientists but rather engineers (specifically, “toolsmiths”) (Brooks 1996). As he described the distinction, “the scientist builds in order to study; the engineer studies in order to build” (emphasis in original). Or, “sciences legitimately take the discovery of facts and laws as a proper end in itself. A new fact, a new law is an accomplishment, worthy of publication. . . . But in design, in contrast with science, novelty in itself has no merit.” Brooks might be construed as asserting that computer science does not employ the traditional scientific method and should therefore be thought of as an engineering discipline. But computer scientists do frame hypotheses — say, a conjecture about the resource consumption of a distributed implementation of a new pattern-matching algorithm; then design experiments, perhaps implementing the algorithm and its experimental scaffolding; observe phenomena by gathering data from executing this implementation; support or reject hypotheses, for example, when the software performs unexpectedly poorly on large data sets; and formulate explanations, such as, “Network latencies had an unexpectedly severe impact on load-balancing.” These hypotheses and experimental designs may be refined and repeated.
Brooks…significantly undercounts situations in which computer scientists “build to study.” In addition to obvious practical applications, computer scientists study computation by building models of computation, whether physical computers, software simulations, or design elements of programming languages. Brooks himself agrees that there is a significant distinction between computer science and the engineering disciplines: “Unlike other engineering disciplines, much of our product is intangible: algorithms, programs, software systems.” These products eventually take tangible form as the internal states of a running computer change during the course of executing a program….
The practices of computer science have a close kinship, both historically and currently, with those described by Giambattista Vico in La Nueva Scienzia: scientists understand the phenomena they study by making and constructing models that validate their theories (Verum et factum convertuntur — the true and the made are convertible) (Miner 1998). Artificial intelligence, which grew out of Norbert Wiener’s cybernetics program, a direct inheritor of Vico’s principle (Dupuy 2000), is a model-making discipline par excellence; many of its practitioners improve our understanding of feats of cognition such as vision and hearing by striving to create machines that replicate them (Brooks 1991). More broadly, computer science is plausibly viewed as the use of computers and programs as models to study the properties of information rather than of energy and matter, the traditional objects of study for the natural sciences. This use of models is constitutional of computer science: the study of computational complexity, for example, would be impoverished were it limited to theoretical analysis without access to the practice of writing and running programs….
[M]any subfields [are] predominantly concerned with uncovering new facts and laws and the practitioners of the discipline who comport themselves as scientists. For example, informatics is broadly and succinctly characterized as “the science of information. . . . the representation, processing, and communication of information in natural and artificial systems. . . . [I]nformatics has computational, cognitive and social aspects” (Fourman 2002). Similarly, algorithmics has enormous applications in computer programming, but also sports vibrant experimental and theoretical branches.
[T]heoretical computer science….has uncovered “facts and laws” about the limits and applicability of computation that are not only meritorious in their own right but also critically inform nearly every design problem….Alan Turing’s discovery of uncomputable problems was both a scientific triumph and an early voice in an ongoing dialogue, in both theoretical and applied communities, about the nature of computation itself (Turing 1936).
The Encyclopedia of Computer Science describes computer science as “the systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application.” The core skills of a computer scientist, therefore, are “algorithmic thinking, representation, programming, and design,” though “it is a mistake to equate computer science with any one of them” (Denning 2000). Design and engineering are crucial, as is scientific methodology. We can reasonably view every computer as a laboratory that tests and validates theories of algorithmics, language design, hardware–software interaction, and so on. Every time a piece of code runs, it generates data points that confirm or disconfirm hypotheses. Computer science is no more and no less a science than any other natural science.
Note: As an irrelevant aside, I designed and implemented a class on ‘computer ethics’ during my stint as a member of the Brooklyn College Computer Science department from 2002 to 2010.