The evolution of computer programming made it both more readily accessible to more and more people with less and less training, and also hugely increased the demand at the same time.
As we have seen, the very early research computers like ENIAC were programmed by rewiring the connections amongst the electrical units making up the computer. Programmers were very high level experts in both electrical engineering and mathematics. Very few organisations even worldwide needed machines to calculate cannon shell trajectories.
Later came machine language programming using binary 0 and 1 directly with punched paper tape entry. Programmers still required great skill in binary mathematics, but not now in electrical engineering as well. Computers had become commercially available and some business began using them.
The first symbolic languages made this slightly easier on the programmers, with mnemonic code directly representing the binary operations. A translator computer program was need for the first time, the assembler. Magnetic tapes and punched cards made the computers easier to adapt to business solutions.
High level procedural languages made this even easier, with Fortran being accessible to scientists with some training in the language, and Cobol to business people with training in that language. Programming was becoming more accessible, and the demand was increasing as magnetic disks and visual displays started to appear. Memory was cheaper too, only a few million dollars for about 32K now in the big machines!
With the deliberate introduction of BASIC as a procedural language available to even beginners, the programming process was becoming available to people without training in planning programs.
The greater accessibility and the huge demand for computer programs as business changed from manual systems to Computer Based Information Systems created a crisis as people started to write code which was very hard to understand.
Corrado Bohm and Guiseppe Jacopini recognised the problem in 1966 and published a theoretical paper proving mathematically that any computer program could be written with three (or actually two) fundamental structures. They originally published their paper in Italian and it was not noticed by many for several years, but was a basis for the structured programming revolution to come. When it was translated to English in a prestigous American professional computing magazine, people started to realise its very powerful significance. [C. Bohm & G. Jacopini, "Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules," Communications of the ACM, vol9(5) May 1966, pp 366-371]
Edsger Dijkstra had also recognised the problem that unstructured code was causing in his 1968 paper "GOTO considered harmful." pointing out the difficulty of reading code that was like a tangled plate of spaghetti because of its numerous shifts of execution point (transfers of control) that made it hard to follow. [E.W. Dijkstra, "GOTO Statement Considered Harmful"' Communications of the ACM, Vol 11(3), Mar. 1968, pp147-148.]
This start, combined with the efforts of two others particularly, started a movement for writing structured programs. They were Nicklaus Wirth, the inventor of Pascal, and Donald Knuth the doyen of algorithm design and analysis whose multi volume encyclopedia on algorithms is still revered today. [Knuth, D. (1968) The Art of Computer Programming: Vol 1, Fundamental Algorithms 1st Ed. Addison-Wesley.]
The basis this movement was the Structure Theorem which had been postulated by Bohm and Jacopini, and the use of structured languages not requiring GOTO and forcing the use of the fundamental structures. The challenge was of course to make programmers realise that this would save them time and effort. The time saving would come from better readability. This applied to other programmer's code, quite a common task since they changed jobs frequently in times of high demand. It also applied to their own code, when altering it for maintenance purpose later.
The advent of personal microcomputers in the 1970s made the need for structured programs much more acute as a flood of hobbyists with absolutely no training at all used the BASIC ROM interpreters built into their machine for a flood of absolutely awful "spaghetti code".
At the international IFIP conference in 1971 the problem was discussed extensively, and another paper important in the history of software engineering was presented by Ashcroft and Manna. ["The Translation of 'GOTO' Programs into 'While' Programs.", E. Ashcroft and & Z. Manna (1972), Proceedings of the 1971 IFIP conference, Vol 1 North-Holland Publishing Co.] After this the movement started to gain momentum and all students of programming started to be taught by the structured methods. This was especially the case after another milestone paper came from Knuth. [Knuth D.E. (1974) "Stuructured Programming with no GOTO Statements", Computing Surveys Vol 6(4) pp261-301 Dec 1974.]
[also known as the Structured Programming Language Paradigm]
Any computer program can be built up by combing three fundamental constructs in various ways.
These constructs are:
- Sequence
- --- simply doing one statement after the other, down the page.
- Decision
- --- deciding whether or not to execute a certain statement on the basis of some condition being true or false. That is putting a sort of internal branch to the left or right side of the downward program flow. Also known to computer scientists as selection.
- Repetition
- --- repeating a block of code by returning to the start of the "loop" if some condition has not been satisfied. Called iteration by computer scientists.
K. Hopkins (dec)