NOTES
1. J. L. Casti. (2003). The one true platonic heaven (p. xii). Washington, DC: Joseph Henry Press.
2. H. H. Goldstine. (1972). The computer from Pascal to von Neumann (p. 245). Princeton, NJ: Princeton University Press.
3. Ibid., p. 179.
4. Ibid., p. 182.
5. Ibid., p. 183.
6. Ibid., p. 182.
7. Ibid., p. 186.
8. S. M. Ulam. (1980). Von Neumann: The interaction of mathematics and computing. In N. Metropolis, J. Howlett & G.- C. Rota (Eds.), A history of computing in the twentieth century (pp. 93–99). New York: Academic Press (see especially p. 94).
9. N. Stern. (1980). John von Neumann’s influence on electronic digital computing, 1944–1946. Annals of the History of Computing, 2, 349–362.
10. Goldstine, op cit., p. 185.
11. H. A. Simon. (1996). The sciences of the artificial (3rd ed.). Cambridge, MA: MIT Press; H. A. Simon (1988). Reason in human affairs. Oxford: Basil Blackwell.
12. Goldstine, op cit., p. 183.
13. H. Goldstine. (1944). Draft memorandum. August. Quoted in Goldstine, 1972, op cit., p. 186.
14. J. P. Eckert. (1944). Disclosure of magnetic calculating machine. Memorandum. January. Quoted by Stern, op cit., p. 354.
15. Goldstine, op cit., p. 187, citing a report coauthored by J. P. Eckert, J. W. Mauchly, and S. R. Warren, March 31, 1945.
16. Quoted by Goldstine, op cit., p. 187, from a second report by Eckert, Mauchly, and Warren, July 10, 1945.
17. Ibid.
18. M. V. Wilkes. (1985). Memoirs of a computer pioneer (p. 109). Cambridge, MA: MIT Press. In this context, I recall vividly a private conversation I had with Sir Maurice Wilkes at a conference in Palo Alto, California, in fall 1983 on this issue. Wilkes was uncompromising in his view: the “logician” von Neumann got all the credit, whereas the true begetters of the main ideas presented in the EDVAC report—the “engineers” Eckert and Mauchly—were denied their deserved plaudits.
19. J. von Neumann (1945). First draft of a report on the EDVAC. (Unpublished memorandum). Philadelphia: Moore School of Electrical Engineering. Printed in B. Randell (Ed.), 1975. The origins of digital computers (2nd edition). New York: Springer Verlag (pp. 349–354) (see especially, p. 2). All citations to this report will refer to the Randall publication, op cit., p. 2.
20. Ibid.
21. Ibid.
22. Ibid.
23. Ibid., op cit., p. 3.
24. A. Hodges. (1983) Alan Turing: The Enigma (pp. 131–132). New York: Simon & Schuster.
25. Ibid., p. 128.
26. F. Smithies. (1959). John von Neumann (obituary). Journal London Mathematical Society, 34, 373–384 (see especially p. 374).
27. Hodges, op cit., p. 131.
28. Goldstine, op cit., p. 174.
29. S.. Frankel to B. Randell, private communication, 1972. Quoted in B. Randell. (1972). On Alan Turing and the origins of digital computers. In B. Meltzer & D. Michie (Eds.), Machine intelligence 7 (pp. 3–22). New York: Wiley (see especially p. 10).
30. Frankel, 1972, as quoted in Randell 1972op cit., p. 10.
31. T. S. Kuhn. (1970). The structure of scientific revolutions (2nd ed.). Chicago, IL: University of Chicago Press.
32. F. C. Bartlett. (1932). Remembering. Cambridge, UK: Cambridge University Press.
33. Ibid., p. 210.
34. For discussions of schema theory in these various contexts, see, for example, E. H. Gombrich. (1969). Art and illusion. Princeton, NL: Princeton University Press; J. Piaget. (1976). The child and reality. Harmondsworth, UK: Penguin Books; G. Mandler. (1985). Cognitive psychology. Hillsdale, NJ: Lawrence Erlbaum Associates; M. A. Arbib & M. B. Hesse. (1986). The construction of reality. Cambridge, UK: Cambridge University Press; R. D’Andrade. (1995). The development of cognitive anthropology. Cambridge, UK: Cambridge University Press; S. Dasgupta. (2007). The Bengal Renaissance. New Delhi: Permanent Black.
35. Piaget, op cit.
36. Gombrich, op cit., p. 89.
37. von Neumann, op cit., p. 5.
38. Simon, 1996, op cit.
39. Hodges, op cit., p. 307.
40. Ibid.
41. A. M. Turing. (1992). Lecture to the London Mathematical Society. Reprinted in D. C. Ince. (Ed.). Collected works of A.M. Turing: Mechanical intelligence (pp. 106–142). Amsterdam: North-Holland (see especially p. 106; original work published 1947).
42. Hodges, op cit., p. 311.
43. Ibid., pp. 314–315.
44. Ibid.
45. Goldstine, op cit., pp. 188–189.
46. A. W. Burks. (1980). From ENIAC to the stored program computer: Two revolutions in computers. In Metropolis, Howlett, & Rota (pp. 311–344), op cit., p. 336.
47. Goldstine, op cit., p. 180.
48. von Neumann, op cit., pp. 12–13, 25–32.
49. Ibid., p. 32. Italics in the original.
50. Burks, op cit., p. 336.
51. Turing, op cit., p. 108.
52. A. M. Turing. (1945). Proposal for development in the Mathematics Division of an Automatic Computing Engine (ACE). Unpublished report, National Physical Laboratory, Teddington. Printed in Ince (pp. 20–105), op cit.
53. Ibid., p. 21.
54. J. H. Wilkinson. (1980). Turing’s work at the National Physical Laboratory. In Metropolis, Howlett, & Rota (pp. 101–114), op cit., p. 102.
55. Ibid., p. 111.
56. Ibid., p. 110.
57. Hodges, op cit., p. 370.
58. Ibid., pp. 376, 390.
59. Wilkes, op cit., pp. 108–109.
60. Wilkes, op cit., p. 135.
61. After formal retirement from the university, Wilkes served on the staff of Digital Equipment Corporation, Maynard, Massachusetts, as an engineering consultant (1980–1986) and then with the Olivetti Company in Cambridge, England, as an advisor (1986–2002).
62. Wilkes, op cit., p. 34.
63. Ibid., p. 25.
64. Ibid., p. 28. In 1970, the laboratory was renamed University Computer Laboratory—its current name.
65. Ibid., p. 105.
66. Ibid., p. 135.
67. Ibid., pp. 108–109.
68. Ibid., p. 116.
69. Ibid., pp. 121–124.
70. Ibid., p. 121.
71. Ibid., p. 127.
72. Ibid., p. 129.
73. von Neumann, op cit., p. 37 et seq.
74. Ibid.
75. Ibid.
76. M. V. Wilkes & W. Renwick. (1949). The EDSAC. In Anon. (1950). Report of a conference on high speed automatic calculating-machines, June 22–25 1949 (pp. 9–11). Cambridge, UK: University Mathematical Laboratory (see especially p. 9).
77. M. Hewett. (1998). Interview of Tom Kilburn. Personal Computer World, May, 186–188 (see especially p. 186).
78. Ibid., p. 186.
79. S. H. Lavington. (1980). Computer development at Manchester University. In Metropolis, Howlett, & Rota (pp. 433–443), op cit., p. 433.
80. F. C. Williams. (1949). Cathode ray tube storage. In Anon.>, 1950, op cit., pp. 26–27. The original paper in which this excerpt appeared is F. C. Williams & T. Kilburn. (1949). A storage system for use with binary digital computing machines. Proceedings of the Institution of Electrical Engineers, 96, Part 2, No. 30, 183 ff.
81. T. Kilburn. (1949). The Manchester University digital computing machine. In Anon, 1950, op cit. (pp. 119–122).
82. Kilburn, op cit., p. 119.
83. Lavington, op cit., p. 435.
84. Kilburn, op cit., p. 121.
85. Lavington, op cit., p. 435.
86. Kilburn, op cit., List of Instructions, (p. 122).
87. Kilburn, in Hewett, op cit., p. 188.
88. Lavington, op cit., pp. 433–434.
89. F. C. Williams & T. Kilburn. (1948). Electronic digital computers. Nature, 162, 487.
90. Ibid.
91. Wilkes, 1985, op cit., p. 142.
92. W. Renwick. (1949). The EDSAC demonstration. In Anon, 195
0, op cit., pp. 12–16.
93. Lavington, op cit., p. 433.
94. Goldstine, op cit., pp. 240–241.
95. A. W. Burks, H. H. Goldstine, & J. von Neumann. (1946). Preliminary discussion of the logical design of an electronic computing instrument. Unpublished report. Princeton, NJ: Institute of Advanced Study. This report has been published widely. See, for example, C. G. Bell & A. Newell. (1971). Computer structures: Readings and examples (pp. 92–199). New York: McGraw-Hill. See also B. Randell. (Ed.). (1975a). The origins of digital computers (2nd ed., pp. 34–79). New York: Springer-Verlag.
96. B. Randell. (1975b). Stored program electronic computers. In Randell (pp. 349–352), 1975a, op cit., p. 352.
97. Ibid., p. 352.
98. Anon. (1985). Proceedings of a Symposium on Large-Scale Calculating Machines: The Harvard Computation Laboratory. (W. Aspray, Introduction). Cambridge, MA: MIT Press (original work published 1947).
99. Anon, 1950, op cit.
100. Notice on organization of an Eastern Association for Computing Machinery. June 25, 1947. Quoted in L. Revens. (1972). The first twenty five years: ACM 1947–1972. Communications of the ACM, 15, 485–490 (see especially p. 485).
101. Ibid., p. 485.
102. E. A. Weiss. (1972). Publications in computing: An informal review. Communications of the ACM, 15, 491–497.
103. Ibid., p. 494.
9
A Liminal Artifact of an Uncommon Nature
I
THE STORY SO far has been a narrative about the development of two very contrasting types of computational artifacts. On the one hand, Alan Turing conceived the idea of a purely abstract and formal artifact—the Turing machine—having no physical reality whatsoever, an artifact that belongs to the same realm of symbols and symbol manipulation, as do mathematical objects. On the other hand, the major part of this narrative has been concerned with a material artifact, the computer as a physical machine that, ultimately, must obey the laws of physics—in particular, the laws governing electromagnetism and mechanics. This was as true for Babbage’s machines (which were purely mechanical) as for Hollerith’s tabulator, as true for the electromechanical machines, as for the Harvard Mark I and the Bell Telephone computers, as true for the ABC and the ENIAC, as for the EDSAC and the Manchester Mark I.
Beginning with the EDVAC report, and especially manifest in the development of the first operational stored-program computers, was the dawning awareness of a totally new kind of artifact, the likes of which had never been encountered before.
Philosophers speak of the ontology of something to mean the essential nature of that thing, what it means to be that thing. The ontology of this new kind of artifact belonged neither to the familiar realm of the physical world nor the equally familiar realm of the abstract world. Rather, it had characteristics that looked toward both the physical and the abstract. Like Janus, the Roman god of gates, it looked in two opposite directions: a two-faced artifact—which, as we will see, served as the interface between the physical and the abstract, between the human and the automaton; a liminal artifact, hovering ontologically between and betwixt the material and the abstract (see Prologue, Section IV). So uncommon was this breed that even a name for it was slow to be coined.
During the Cambridge conference in England in 1949, we find a session devoted to programming and coding.1 Some years earlier, the ENIAC designers had named the ENIAC’s control unit the “master programming unit”, and a 1945 report on the ENIAC had referred to a “wish to program the first accumulator to transfer its contents” (see Chapter 7, Section VI). Thus the words program and programming were in cautious use by 1949, although the more common term was still coding.
In 1947, Herman Goldstine and John von Neumann coauthored a three-part report titled Planning and Coding Problems for an Electronic Computing Instrument, a lengthy and detailed discussion of preparing programs (or codes) for their IAS computer (yet to be built).2 At the Cambridge conference, David Wheeler, one of the main designers of the EDSAC system (more on this later) wrote the following:
A PROGRAMME is a flowchart showing the operations (in block form) corresponding to the action of the calculator during the solution of the problem.
A ROUTINE is the programme written in the detailed code of a particular machine.3
Wheeler clearly recognized that one represents (in some “code”) what one wants the computer to do at different levels of abstraction: as a flowchart, a symbolic notation describing the general nature of the actions a machine must perform, and in the “detailed code” for a “particular machine.” The words flowchart and routine had, clearly, come into usage.
So what was so unique about this species of artifacts that was coming to be called programs? In what sense was it Janus faced?
On the one hand, its design and construction involves not matter but symbols. One writes a program. Writing entails an alphabet of symbols that are strung together according to certain rules. There is a syntax involved here. Writing necessitates a physical medium certainly, but in itself, what one writes is medium independent. One can write on clay tablets, on papyri, and on electronic devices as much as on paper.
On the other hand, like physical artifacts, a computer program is a dynamic thing; it consumes physical space and physical time. Most tantalizingly, a computer program, although a symbol structure, causes physical things to happen within a computer—much as thought causes bodily motion and bodily change in human beings. In other words, a computer program manifests agency.
Programs (or programming) is Janus faced in another way. On the one hand, programming is the means by which humans communicate with the machine, “telling” it what it must do; and the machine, in turn, must understand this communication and interpret the person’s commands. On the other hand, programs are the means by which humans conceive computations, represent them to themselves, and communicate them to other human beings. The programmer then looks inward toward the physical computer and outward to herself and others like her.
II
As during the years leading up to and including the development of the ENIAC (see Chapter 7), as in conceiving the stored-program computer idea (see Chapter 8), the emergence of the computer program as a distinct kind of artifact—and programming as an activity—entailed an entanglement of several minds. For, as we can imagine, anyone who was developing a stored-program computer in that era would be forced to grapple with the problem of preparing a problem for solving on such machines.
In 1970, American computer scientist Donald Knuth (1938–) published a paper titled “Von Neumann’s First Computer Program.”4 Here, Knuth described the contents of a handwritten 1945 document that he believed was likely the earliest extant computer program for the stored-program digital computer.5 In contrast to the usual discussions of computational problems, von Neumann’s program was concerned with two classic data processing tasks (see Chapter 3, Sections V–VII): sorting data (numbers or alphabetic character strings such as names) into nondecreasing order and merging two sequences of sorted data into a single sorted file. IBM had its own special-purpose punched-card machines to perform these two tasks: the IBM 082 sorter and the IBM 085 collator (merger), respectively.6 von Neumann was interested in whether the order code for the proposed EDVAC could work as well for nonnumeric computations (such as sorting and merging) as for numeric ones—and how efficiently, in terms of speed, it could do so. The availability of the IBM sorter, the most common machine for this task (on punched-card data) afforded him a standard of comparison.7
Judging by the fragment of the original handwritten manuscript reproduced in Knuth’s article, and Knuth’s own commentary on it, von Neumann was not concerned with a language in which to communicate with others. It was, rather, a private notation. The program used quasinumeric symbols to refer to memory addresses (locations) and assigned actual addresses to individual instructions making up the program. He even made his program “relocatable” by designating an unspecified symbolic address “e”
and assigning addresses to instructions relative to e.8
The physicality of his program was evident; the amount of memory consumed by the program could be estimated. And, by making assumptions about the speed of execution of individual instructions, the execution time (in seconds) of the total program could be estimated.9 Yet, the EDVAC (for which the program was intended) did not exist! von Neumann’s program described a computational process for (in present-centered language) a virtual machine; in fact, what was still a hypothetical machine. There was no physical computer on which the program could be imposed that would “understand” or “interpret” the program and operate accordingly. The program was an abstract artifact in this sense. If von Neumann’s sorting program of 1945 was indeed the earliest surviving instance of a program for a stored-program computer, the Janus-faced nature of programs-as-artifacts, their liminality, was manifest at its very inception.
III
Alluding to von Neumann’s sorting program, Goldstine would remark that the problem of programming had not been scrutinized sufficiently up to that time,10 and this was hardly surprising considering the embryonic stage of the field. There would soon be some attempt to rectify this situation, as Arthur Burks, Goldstine, and von Neumann went about preparing their lengthy report Preliminary Discussion of the Logical Design of an Electronic Computing Instrument in 1946 (see Chapter 8, Section XV).
Early that year, Goldstine and von Neumann developed a kind of graphical notation as an aid to help describe programs. They named this notation a flow diagram. Its objective was, as the name suggested, to express graphically the flow of control through the instructions as they were selected from memory and executed—a sense of motion through a computation. The flow diagram would also exhibit the status (contents) of variables at key points during the course of computation. Goldstine would recall that he was soon convinced of the necessity of such a notation in programming.11 Thus, the challenge in both expressing and understanding a flow diagram lay in the melding of the dynamic (the flow of control) with the static (the states of the variables at key points).
It Began with Babbage Page 20