• No results found

• Logical specification of computer architectures. • Algorithmic and programming languages.

• Automatic programming seen as compilation or translation of programs. • Problem of programming cost recognised.

• Problem of program correctness recognised.

Programming languages and programs emerged with computers. During the Second World War (1939–1945) electro-mechanical and electronic digital computing machines were produced for special applications; for example:

Name Responsible Demonstration Year

Model I G Stibitz 1940

Z3 K Zuse 1941

Differential Analyser J Atanasoff & C Berry 1942 ASCC (Harvard Mark I) H Aiken, C D Lake,

F E Hamilton & B M Durfee

1943 COLOSSUS T H Flowers & M H A Newman 1943 ENIAC J Mauchly & J P Eckert 1945

Zuse’s Z3 is the earliest electro-mechanical general purpose program controlled computer. The ENIAC (Electronic Numerical Integrator and Computer) is well known as an early elec- tronic computer that was close to being general purpose. It was programmed by setting switches and plugging in cables. Later it was redeveloped with stored program facilities (the EDVAC completed in 1952), and led to a commercially available machine the UNIVAC.

By 1949 some electronic universal stored program machines were operational; for example:

Name Responsible Demonstration Year

Prototype Manchester Mark I F C Williams & T Kilburn 1948

EDSAC M Wilkes 1949

IAS Computer J von Neumann & H Goldstine 1951

The Manchester Mark I was the first electronic stored program machine to operate, on 21 June 1948; it was developed into the first commercially available machine, the Ferranti Mark I, and sold to 11 customers. The EDSAC (Electronic Delay Store Automatic Calculator) which was successful in practical terms and played a significant rˆole in the development of

2.4. EARLY PROGRAMMING IN THE DECADE 1945-1954 37

programming. The IAS Computer was developed 1946-52 and was influential from its inception. The designs of these and other machines were copied and refined by many groups and companies within the decade.

Like Babbage’s creations, these early electrical machines are great achievements. For our purposes, that of reflecting on the origins of programming, the early machines can be classified by the physical properties of their programs. For example, the means for program sequencing and the storage of programs lead us to Figure 2.2.

The design of such machines combined engineering and mathematical ideas and, in the case of the earliest machines, they were programmed by the people who built them. To establish the independent status of programming, a logical view of a machine is essential, one that abstracts from the machine’s physical implementation. Isolating the logical view of a machine and reflecting on programming structures was the work of scientists trained in mathematical logic.

Mathematical logic has played a completely fundamental rˆole in computer science from its inception, especially in the field of programming languages. The most important contribution was Alan Turing’s concept of a mathematical machine and the theorems about its scope and limits that he proved in 1936. The theorem on the existence of a universal Turing machine able to simulate all other Turing machinesisthe discovery of the universal stored program computer. Turing’s discoveries led to the theory of computable functions which played a decisive role in the development of mathematical logic in the previous decade 1935-1944. Historically, the theory of computable functions is the start of the theory of programming languages.

As part of the ENIAC project, the logical idea of machine architecture was made explicit in John von Neumann’s First draft of a report on the EDVAC of 1945. The independence of the architecture from technology was emphasised by describing components not in terms of current technologies but using logical components taken from McCulloch and Pitts pioneering work on logical models of the nervous system of 1943; the theory of neural networks was inspired by computability theory. A full account of the basic features of a computer architecture appears in A Burks, H Goldstine and John von Neumann’s Preliminary discussion of the logical design of an electronic computing instrument. The report was written in 1946, at the start of the project to build the IAS Computer and was widely circulated. The report helped promote the term von Neumann architecture, though many of the ideas were known to others.

Programming these machines was difficult, partly because of the deficiencies of the hardware, and partly because of the codes used to communicate with the machine. To develop computing, the general problem of programming must be tackled:

General Question How can programming be made less time consuming and error prone?

Plus ¸ca change, plus c’est la mˆeme chose!

However, in the decade 1945-55 this timeless question led to some timeless theoretical prob- lems and first steps to their solution.

In 1945-46, Konrad Zuse invented a general language for expressing algorithms called the Plankalk¨ul. It was not intended to be machine implementable but to provide a framework for preparing programs. Appropriately, it is referred to as analgorithmic language rather than a programming language. It was based on the data type of booleans and had some type form- ing operations. Sample programs included numerical calculations and testing correctness of expressions. See Bauer and Wossner 1972 (Bauer and W¨ossner [1972]) for a summary.

Herman Goldstine and John von Neumann wrote a series of papers calledPlanning and cod- ing problems for an electronic computing instrument in 1947-48. (See Goldstine and von Neu- mann 1947, Goldstine and von Neumann [1947].) As can be seen from their classification of the programming process into six stages, their view was that programs were needed to solve mainly applied mathematical problems. Among their ideas, they used flow diagrams as a pic- torial way of representing the flow of control in a program containing jump instructions. These reports were essentially the only papers on programming widely available until the first text- book on programming, namely Wilkes, Wheeler and Gill 1951 (Wilkes et al. [1951]), based on the EDSAC.

In addition to understanding the logic of programs, there was the following:

Problem 2 How can we make programming notations that are more expressive of their ap- plications, easier to understand and to translate into machine codes?

There was a need for high level notations and tools to translate higher level notations into machine codes. Hardware was limited and much needed to be programmed. Since programming meant writing programs in terms of primitive codes for specific machines, this led to the idea automatic programming. Early on, some recognised that the inadequacies of programming notations and tools for programming were the main barriers to the development of computing. Linked to the ideas of programming methodologies and languages was the following:

Problem 3 How can we reason about the behaviour of programs?

Problems of reasoning about programs were noted in thePlanning and coding reports of Gold- stine and von Neumann (Goldstine and von Neumann [1947]). At the inaugural conference of the EDSAC in 1949, Alan Turing lectured on checking a large routine (see Morris and Jones 1984, Morris and Jones [1984]).