Read It Began with Babbage Online
Authors: Subrata Dasgupta
14
. Ibid.
15
. Ibid.
16
. For an example of random logic in the design of a computer's control unit, see, for example, S. Dasgupta. (1989).
Computer architecture: A modern synthesis. Volume I: Foundations
(pp. 170â173). New York: Wiley.
17
. Wilkes, op cit., p. 59.
18
. For a discussion of empirical and conceptual problems in the natural sciences, see L. Laudan. (1977).
Progress and its problems
(pp. 11â69). Los Angeles, CA: University of California Press. For a discussion of empirical versus conceptual problems in the design of artificial sciences, see S. Dasgupta. (2009).
Design theory and computer science
(pp. 13â30). Cambridge, UK: Cambridge University Press (original work published 1991).
19
. M. V. Wilkes. (1984).
The origins and development of microprogramming
. Presented at a public lecture at the University of Louisiana, Lafayette, Louisiana, October 29.
20
. M.. V. Wilkes in an interview with S. Dasgupta, December 19, 1991, Olivetti Research Laboratory, Cambridge, UK.
21
. S. Dasgupta. (2011). “Contesting (Simonton's) blind variation, selective retention theory of creativity.
Creativity Research Journal, 23
, 2, 166â182 (see especially pp. 170â172).
22
. A. Koestler. (1964).
The act of creation
. London: Hutchinson.
23
. Wilkes, 1986, op cit., p. 117.
24
. M. V. Wilkes. (1981). The design of a control unit: Reflections on reading Babbage's notebooks.
Annals of the History of Computing, 3
, 116â120 (see especially p. 118).
25
. Wilkes, 1985, op cit., p. 178.
26
. Thus, a microinstruction actually encoded multiple operations called
microoperations;
the execution of each microoperation caused a specific control signal to be issued.
27
. S. Dasgupta. (1979). The organization of microprogram stores.
ACM Computing Surveys, 11
, 39â65.
28
. M. V. Wilkes & J. B. Stringer. (1953). Microprogramming and the design of the control circuits in an electronic digital computer.
Proceedings of the Cambridge Philosophical Society, 49
, 230â238.
29
. Wilkes, 1985, op cit., pp. 184â185.
30
. M. V. Wilkes, W. Renwick, & D. J. Wheeler. (1958). The design of a control unit of an electronic digital computer.
Proceedings of the Institution of Electrical Engineers, 105
, 121â128.
31
. M. V. Wilkes. (1992). EDSAC 2.
IEEE Annals of the History of Computing, 14
, 49â56 (see especially p. 52).
32
. Wilkes, 1985, op cit., p. 187.
33
. R. Moreau. (1984).
The computer comes of age
(pp. 56â58). Cambridge, MA: MIT Press.
34
. Wilkes, 1985, op cit., p. 185.
35
. Moreau, op cit., p. 68.
36
. Wilkes, 1985, op cit., p. 185.
37
. Ibid.
38
. Ibid., p. 188.
39
. M. V. Wilkes. (1969). The growth of interest in microprogramming: A literature survey.
Computing Surveys, 1
, 139â145.
40
. Ibid.
41
. Wilkes, 1992, op cit., p. 56.
42
. Wilkes, 1951, op cit., p. 60.
43
. Dasgupta, 1979, op cit.
44
. Dasgupta, 1989, op cit., pp. 214â227.
45
. R. F. Rosin, G. Frieder, & R. H. Eckhouse, Jr. (1972). An environment for research in microprogramming and emulation.
Communication of the ACM, 15
, 248â260; A. B. Salisbury. (1976).
Microprogrammable computer architectures
. New York: Elsevier; E. I. Organick & J. A. Hinds. (1978).
Interpreting machines: Architecture and programming of the B1700/B1800 series
. New York: North-Holland.
IT MUST HAVE
been entirely coincidental that two remarkable linguistic movements both occurred during the mid 1950sâone in the realm of natural language, the other in the domain of the artificial; the one brought about largely by a young linguist named Noam Chomsky (1928â), the other initiated by a new breed of scientists whom we may call
language designers
; the one affecting linguistics so strongly that it would be deemed a scientific revolution, the other creating a class of abstract artifacts called
programming languages
and also enlarging quite dramatically the emerging paradigm that would later be called computer science.
As we will see, these two linguistic movements intersected in a curious sort of way. In particular, we will see how an aspect of Chomskyan linguistics influenced computer scientists far more profoundly than it influenced linguists. But first things first: concerning the nature of the class of abstract artifacts called programming languages.
There is no doubt that those who were embroiled in the design of the earliest programmable computers also meditated on a certain
goal
: to make the task of programming a computer as natural as possible from the human point of view. Stepping back a century, we recall that Ada, Countess of Lovelace specified the computation of Bernoulli numbers in an abstract notation far removed from the gears, levers, ratchets, and cams of the Analytical Engine (see
Chapter 2
, Section VIII). We have seen in the works of Herman Goldstine and John von Neumann in the United States, and David Wheeler in England
that, even as the first stored-program computers were coming into being, efforts were being made to achieve the goal just mentioned. Indeed, a more precise statement of this goal was in evidence: to compose computer programs in a more abstract form than in the machine's “native” language.
The challenge here was twofold: to describe the program (or algorithm) in such a language that other humans could comprehend, without knowing much about the computer for which the program was writtenâin other words, a language that allowed communication between the writer of the program and other (human) readersâand also to communicate the program to the
machine
in such fashion that the latter could execute the program with minimal human intervention.
The flow diagram invented by Goldstine and von Neumann was a pictorial kind of language that realized this twofold goal only in part, because a flow diagram, although appropriate for humanâhuman communication, could not serve as a means of humanâmachine communication without further human intervention. The assembly language Wheeler created for the EDSAC facilitated the goal of automatic humanâmachine communication. A program written in this assembly language could be transformed automatically into EDSAC machine language using another program, the “assembler” (see
Chapter 9
, Section VI). However, Wheeler's language was specific to the EDSAC, as were all subsequent assembly languages. To write programs in the EDSAC assembly language, one must be intimately familiar with the EDSAC.
Even before Goldstine and von Neumann began constructing the flow diagram notation, tucked away in a small village in the Alps, German computer designer Konrad Zuse was developing a programming language that, as would emerge much later, was well ahead of its time.
The year was 1945. The war in Europe had finally ended, if not the one in the Pacific. Zuse was in his retreat along with the Z4 computer, the only one of his wartime inventions to survive (see
Chapter 5
, Section XI). Germany was in ruins. It was not the time to pursue practical work in computing. In any case, the Z4 was barely working.
1
Instead, Zuse turned to the design of a language he called
Plankalkül
(or
program calculus
) that could serve to specify computational problems using some general symbolic notation.
2
Zuse's 1945 manuscript on Plankalkül and its use in constructing programs was never published at the time. It lay ignored or unnoticed until 1972, when it appeared in a German journal. That same year, two German scientists, Friedrich Bauer and H. Wössner brought Plankalkül to the attention of the English reading world with an article in the silver jubilee issue of
Communications of the ACM
.
3
Thus, Zuse could claim priority once more. In building the Z3, which became operational in 1941, he was the first to have built a fully operational, general-purpose,
programmable computer (see
Chapter 5
, Section XI); in developing Plankalkül in 1945, he invented what was arguably the first programming language that was not tied to a specific computer. Indeed, as Zuse would reflect years later, there
was
no computer in 1945 that conformed to the principles laid out in Plankalkül.
4
In present-centered language, Plankalkül was a
machine-independent
programming language or (also in present-centered language) a
high-level
programming language. His goal in designing Plankalkül, as stated by Zuse in his 1945 manuscript, was “to provide a purely formal description of any computational procedure.”
5
Of course, what Turing had offered in his 1936
Entscheidungproblem
paper was a formal way of specifying computation. Zuse's goal was far more practical: to describe formally algorithms that did not reference any specific physical computer and yet
assumed an underlying, implicit, abstract “model” of a real computer that, in principle, could interpret and execute algorithms described in this language
. Zuse had undoubtedly grasped, almost a decade before others, an essential characteristic of a programming language.
Plankalkül was never carried to the stage at which it could be implementedâthe second goal of a programming language, to enable humanâmachine communication. As such, it remained a “paper language,” one that met the desire for humanâhuman communication of algorithms. It illustrated the
kinds
of features a generalized, machine-independent programming language should have.
Perhaps most impressive was Zuse's recognition of the concept that would later be called
data structures
or
information structures
âabstract representations of the various kinds of data objects with which algorithms have to deal. There were features in Plankalkül that could define a range of data structures, beginning with the most primitive, the “bit” or Boolean data (having values 1 or 0), spanning integers and real numbers, and extending to “composite” data objects such bit sequences, arrays of arbitrary dimensions, and “records,” comprised of two or more composite data objects that would allow, for example, paired items such as names and dates of birth to be specified as a single data object.
6
These sorts of data structures anticipated by almost a decade features that would become established aspects in later and more mature programming languages.
One of Zuse's seemingly innocuous, but in fact quite profound, inventions was the concept of the “assignment” operation; he used the symbol => to denote this.
7
An assignment, say, of the form
Z
+ 1 =>
Z
where
Z
is an integer variable, in Plankalkül notation signified that the “current” integer value of
Z
is “augmented” by oneâthat is, the current value of
Z
is incremented by one and this becomes
Z
's “new” value. The assignment operator => thus indicates a
process
involving both a direction and a temporal flow of data. As Donald Knuth and Luis Trabb Pardo, in their extensive survey of early programming languages pointed out, an operator
such as the assignment was quite unknown in mathematicsâindeed, it signified “a distinct break between computer science thinking and mathematical thinking.”
8
Zuse recognized the necessity of “conditional commands”
9
âthe ability to decide to go one way or another during the course of computation on the presence or absence of a condition. Thus, Plankalkül allowed for the specification (in present-centered language) of “If
cond
Then
action
” statements; if the state of computation at that point in the program is such that
cond
is true, then perform
action
; otherwise, proceed to the next statement in the program. The language also provided for “iteration”; until such-and-such condition is met, continue to execute such-and-such sequence of statements repetitively.
10
And, quite remarkably, Zuse provided for one program to be specified and be invoked from another programâthis, at least 2 years before John Mauchly conceived the idea of the subroutine in general terms, and 4 years before Wheeler invented a concrete mechanism for subroutine programming and activation for the EDSAC (see
Chapter 10
, Sections IV and V). Indeed, both the “calling” and the “called” programs were expressible in a uniform manner that, later, was termed
procedure
.
11
To a later eye, the notation Zuse created for Plankalkül would seem clumsy at best, dreadfully opaque at worst. The invention of notation, we will see, will become a contentious issue among later language designers, and Zuse certainly had no antecedents to guide him. But the
features
denoted by the notation in Plankalkül were unmistakably modern; and insofar as Zuse's goal was concerned, the language was remarkably comprehensive in its power. The original (1945) manuscript included Plankalkül descriptions of a wide variety of algorithms that, in the words of Knuth and Pardo, were “far more complex than anything written before.”
12
There were programs for sorting, performing integer and floating-point arithmetic in binary notation, determining whether a logical (Boolean) formula was syntactically correct, even algorithms for chess moves.
13
Bauer and Wösner presented, in their article, Plankalkül programs for the syntax checking of Boolean expressions and one of the chess-playing programs.