VII
instructions. The authors established an epistemological relationship between
Babbage’s work and the principle of a large store.
15
Furthermore, from the au-
thors’ perspective, the incentive to use a large store was primarily an engineering
one.
When ENIAC was under construction, von Neumann and his co-workers de-
voted considerable attention to the problem of the optimum form of a calcu-
lating machine. As a result of this it was shown that a calculating machine
should have a storage capacity of the order of 1,000 [8,000]
16
words and that,
given this, both operating instructions and pure numbers could be stored in
the same unit. [20, p.15, my emphasis]
Choosing to store both “operating instructions” and “pure numbers” in the
same store — as opposed to storing each in a separate store — was based on
practical concerns, not theoretical reasoning.
17
Likewise, the incentive among
many computer builders to list all instructions consecutively in one part of the
store and the pure numbers in another part (of the same store) was, according
to the Booths, based on the practical concerns of “simple process control” and
economic use of “memory capacity” [20, p.15, 23–24].
18
Common storage of numbers and instructions inside the computer opened
the door for new programming techniques. And, the realization that many com-
putations can be reduced to iterative processes made it “most desirable” that
data could be erased in any given memory location and be replaced by new
material [20, p.23, my emphasis] — a topic which I shall return to shortly.
19
Common storage was, however, not a prerequisite to embark on program-
ming. Some people, like Konrad Zuse, stored commands apart from numbers (cf. [53,
p.76]). Similarly, Haskell Curry made a sharp conceptual distinction between
commands and pure numbers [77]. Another important name in this regard is
Aiken, as the following words from Grace Hopper in 1978 indicate:
Aiken was totally correct in saying that the programs and the data should be
in separate memories, and we’re just discovering that all over again in order
to protect information. [111, p.21]
Indeed, in practice today, most software never treats data as code [49].
20
Space Cadets
Specifying the orders to accomplish a computation was a tedious task. Relieving
the programmer from that task was the job of the “space cadets” — a name that
Carr gave in 1953 to those programmers who wanted to invest time and money in
building interpreters and compilers [113, p.210–211]. Carr and his space cadets
(including Booth, Gorn, Perlis, and Wilkes) advocated automatic programming.
They wanted to design “pseudo codes” — “each order of which will, in general,
represent a number of orders in the true machine code” [20, p.212].
In my eyes, Carr stood out in the 1954 ‘Symposium on Automatic Program-
ming for Digital Computers’ [91] in that he consistently and repeatedly described
both the true machine code and the pseudo code as a “language”.
21
Carr viewed
VIII
automatic programming as the problem of closing the “gap” between the “exter-
nal decimal language” and the “intermediate binary language”, of recognizing a
“dual language system” and the need to program the “translation between the
two languages” [22, p.85].
22
Finally, the “lack of compatibility” between existing
digital computers was the incentive to search for a “universal language” — an
idea that was mostly, although not solely, Gorn’s [22, p.89][85].
Indeed, it was Carr’s later good friend, Saul Gorn, who — in the eyes of Grace
Hopper — stole the show at the 1954 symposium on automatic programming.
“Looking forward to what Dr. Gorn will tell us”, Hopper expressed her curiosity
in her opening address towards the development of a “universal code” that can
be taught to mathematicians and that each computer installation can provide
by means of an interpreter or compiler [91, p.4–5]. To counter the proliferation
of “specialized codes”, Gorn stressed in his talk the need for “a code more or
less independent of the machine”, so that the “artists, scientists, and professions
can then return to a common language and creative thinking” [53, p.74–75].
23
During the first half of the 1950s, Gorn worked at Aberdeen Proving Ground
where three “general purpose machines” were in use simultaneously: the ENIAC,
EDVAC, and ORDVAC. This diversity in machinery prompted a “universal coding”
experiment. And so Gorn developed a “general purpose common pseudo-code”
that could serve as input to both the EDVAC and the ORDVAC [56, p.6].
Loop Control
At the symposium, Gorn enumerated four machine requirements that had to be
met in order to provide for a universal code, and he did this by referring to Carr’s
prior research on loop controlled machines — research that I have yet to come
across in primary sources. Gorn’s account, reproduced below, serves to back up
my conjecture that up and till around 1954 Carr and Gorn did not view loop
controlled computers as practical realizations of universal Turing machines.
The first machine requirement to obtain loop control, Gorn said, was due
to the universal code being “translatable by the machine into the machine lan-
guage”. Therefore, the machine had to be able to “construct and adjust its own
commands”.
24
To do the latter, “[w]e will therefore assume that commands are
stored internally just like other words, so that the only way in which a word
is recognized as a command is that it reaches the control circuits through the
sequencing of previous commands. (In the terminology of J.W. Carr III, we are
requiring a Type II Variable Instruction Machine.)”.
25
In addition to common
storage, the machine should also have “the other two properties described by
Carr as necessary for ‘loop control’, namely that they be able to transfer con-
trol out of sequences, and that they be able to make decisions”. Finally, as a
fourth requirement, the machine should be capable of carrying out elementary
commands, such as “adding, multiplying, subtracting, extracting a digit, tak-
ing absolute values, taking negatives, shifting digits, and, most elementary of
all, stopping, reading, writing, and generally transferring information from one
place to another.”
26
To do this, the machine should have “one or more forms of
erasable internal storage” [53, p.76–77, my emphasis].