• No se han encontrado resultados

VII. Lista de Figuras

1. Capítulo 1 Introducción

1.3 Planteamiento del Problema

We have a number of open questions: Insofar as CS studies either algorithms or com- puters (or both), we need to look further into what, exactly, algorithms are (and how they are related to the more general notion of “procedure”), what kinds of things they manipulate (information? symbols? real-world entities?), what computers are, and how computers and algorithms are related to each other. All of this in due time. (These questions are, after all, the focus of the rest of this book!)

Another question that we still need to explore more closely is whether CS is a science or not. Don’t forget, we are calling the subject ‘computer science’ only for convenience; it is not a tautology to say that computer scienceisa science nor is it a self-contradiction to say that computer science isnot a science. We won’t be able

to reach a final answer to this question at least until Chapter 4, where we look more closely at what science is.

We have just looked at some reasons for classifying CS as a science—either a natural science, an “empirical” inquiry (a “science of the artificial”), or a formal science (akin to math). An alternative is that CS isnot a scienceat all, but a kind ofengineering. For now, we will assume that engineering is, strictly speaking, something different from science. Again, a final answer to this will have to wait until Chapter 5, where we look more closely at what engineering is.

Frederick P. Brooks, Jr.—another Turing Award winner, perhaps best known as a software engineer—says that CS isn’t science because, according to him, it is not concerned with the “discovery of facts and laws” (Brooks, 1996). Rather, he argues, CS is “an engineering discipline”: Computer scientists are “toolmakers”, “concerned with

making things”: with physical tools such as computers and with abstract tools such as algorithms, programs, and software systems for others to use. He uses J.R.R. Tolkien’s phrase the “gift of subcreation” to describe this concern. CS, he says, is concerned with the usefulness and efficiency of the tools it makes; it isnot, he says, concerned with newness for its own sake (as scientists are). And the purpose of the tools is to enable us to manage complexity. So, “the discipline we call ‘computer science’ ” is really the “synthetic”—that is, theengineering—discipline that is concerned with computers, whereas science is “analytic”. (I’ll explain this “analytic-synthetic” distinction in a moment.)

Here is Brooks’s argument:

1. “[A] science is concerned with thediscoveryof facts and laws.” (Brooks, 1996, p. 61, col. 2)

2. “[T]he scientistbuilds in order to study; the engineerstudies in order to build. (Brooks, 1996, p. 62, col. 1)17

3. The purpose of engineering is tobuildthings.

4. Computer scientists “are concerned with making things, be they computers, algorithms, or software systems”. (Brooks, 1996, p. 62, col. 1)

5. “the discipline we call ‘computer science’ is in fact not a science but a

synthetic, an engineering, discipline.” (Brooks, 1996, p. 62, col. 1)

The accuracy of the first premise’s notion of what science is will be our concern in Chapter 4. By itself, however, Brooks’s first premise doesn’tnecessarilyrule out CS as a science. First, computer scientists who study the mathematical theory of computation certainly seem to be studying scientific laws. Second, computer scientists like Newell, Simon, and Shapiro have pointed out that Heuristic Search, the Physical Symbol Sys- tem Hypothesis, the Computability Thesis, or the B¨ohm-Jacopini theorem certainly seem to be scientific theories, facts, or laws. And “Computerprogrammingis an exact science in that all the properties of a program and all the consequences of executing it in any given environment can, in principle, be found out from the text of the program

17Petroski 2008a argues that all scientists are sometimes engineers and all engineers are sometimes scien-

itself by means of purely deductive reasoning” (Hoare, 1969, p. 576, my italics). (We’ll look into this claim in more detail in Chapter 16.) So, it certainly seems that at least

partof CSisa science. (We’ll return to this in§3.13.) We’ll assume the truth of the first premise for the sake of the argument (revisiting it in the next chapter).

The point of the second premise is this: If a scientist’s goal is to discover facts and laws—that is, to study rather than to build—then anything built by the scientist is only built for that ultimate purpose. But building is the ultimate goal of engineering, and any studying (or discovery of facts and laws) that an engineer does along the way to building something is merely done for that ultimate purpose. For science, building is a side-effect of studying; for engineering, studying is a side-effect of building. Both scientists and engineers, according to Brooks, build and study, but each focuses more on one than the other. (Does this remind you of the algorithms-vs.-computers dispute earlier?) Kay (see§3.9.3, above) considers computational linguistics to be scientific, whereas natural-language processing is engineering: “scientists try to understand their subject mainly for its own sake, though they are gratified when some of what they do proves useful. Engineers seek only the understanding needed to reach practical ends” (Kay, 2010, p. 1).

The second premise supports the next premise, which Brooks does not explicitly state. It defines engineering as a discipline whose goal is to build things, that is, a “synthetic”—as opposed to an “analytic”—discipline. Toanalyzeis to pull apart; to

synthesizeis to put together. “We speak of engineering as concerned with ‘synthesis,’ while science is concerned with ‘analysis’ ” (Simon, 1996b, p. 4). “Where physical science is commonly regarded as an analytic discipline that aims to find laws that gen- erate or explain observed phenomena, CS is predominantly (though not exclusively) synthetic, in that formalisms and algorithms are created in order to support specific desired behaviors” (Hendler et al., 2008, p. 63). Similarly, Arden (1980, pp. 6–7) ar- gues that engineering is concerned with “implementation, rather than understanding”, which “is the best distinction” between engineering and science. And implementation is surely on the “building” side of the spectrum (as we’ll see in more detail in Chap- ter 14). Because of multiple implementations of a single theory, questions of efficiency come to the fore in engineering, and “much of computer science is concerned with . . . efficiency”. But surely computational-complexity theory—the area of CS that is concerned with mathematical analyses of computational efficiency—is on the mathe- matical or scientific side of the border between science and engineering. Whether or not Brooks’s notion ofengineeringis accurate will be our focus in Chapter 5. So, let’s assume the truth of the second and third premises for the sake of the argument.

Clearly, if the fourth premise is true, then the conclusion will follow validly (or, at least, it will follow that computer scientists belong on the engineering side of the science–engineering, or studying–building, spectrum). So, is it the case that computer scientists are (only? principally?) concerned with building or “making things”? And, if so, what kind of things?

Interestingly, Brooks seems to suggest that computer scientistsdon’t build com- puters, even if that’s what he says in the conclusion of his argument! Here’s why: He says that “Even when we build a computer the computer scientist designs only the abstract properties—its architecture and implementation. Electrical, mechanical, and refrigeration engineers design the realization” (Brooks, 1996, p. 62, col. 1). I think this

passage is a bit confused,18but it makes an interesting point: Brooks seems to be say- ing that computer scientists only designabstractions, whereas other (real?) engineers

implement them in reality.This is reminiscent of the distinction between the relatively abstractspecificationsfor an algorithm (which typically lack detail) and its relatively concrete (and highly detailed) implementation in a computerprogram(we’ll look into this in Chapter 10). Brooks (following Zemanek 1971) calls CS “the engineering of abstract objects”: If engineering is a discipline that builds, then what CS-considered-as- engineering builds isimplemented abstractions(see Chapter 14 for further discussion). In 1977, when he first wrote these words (see Brooks 1996, p. 61, col. 1, very few people other than scientists, engineers, business people, and a few eduational institu- tions had access to computing machines (typically, large mainframes or only slightly smaller “minicomputers”)—certainly, there were no personal computers (sometimes these used to be called “microcomputers”), or laptops, tablets, or smartphones. So, for Brooks, what computer scientists build, unlike what other engineers build, are not things for direct human benefit but, rather, things that in turn can be used to build such directly beneficial things. Put more simply, his answer to the question “What is a com- puter?” seems to be: A computer is a tool (and a computer scientist, who makes such tools, is a “toolsmith”) (Brooks, 1996, p. 62, col. 1).

But much of what he saysagainstCS being considered asciencesmacks of a dif- ferent battle, one between science and engineering, with scientists belittling engineers. Brooks takes the opposite position: “as we honor the more mathematical, abstract, and ‘scientific’ parts of our subject more, and the practical parts less, we misdirect young and brilliant minds away from a body of challenging and important problems that are our peculiar domain, depriving the problems of the powerful attacks they deserve” (Brooks, 1996, p. 62, col. 2).

(We’ll come back to these issues in§5.10, question 2.)

Documento similar