Page 2 of 3
With computer hardware becoming more widespread the crisis of software was starting to make itself felt. It just took too long to write a program, too long to debug it and far too long to modify it.
The reason was that programmers wrote programs in terms of primitive operations that the hardware could carry out. Each instruction didn't get very much done at all and standard operations such as working out some arithmetic had to be broken down into many small steps - and this was very time consuming and error prone. It also required an expert in the way the machine worked.
What was needed was some way of allowing programmers to work in a more natural and machine independent way. This required a high level language to get away from the primitive hardware - and all hardware is primitive compared to software. It costs a lot to elaborate hardware but by comparison software is easy to create and change, even without a high level language.
There had been earlier attempts at high level languages but there were severe difficulties in trying to write a translator or compiler to convert the high level language into machine code.
The biggest problem was the translation of algebraic expressions. The reason is simply that when you write something like 4+5*3 there is an implied order of calculation which doesn't follow the order in which the operators are written down. A simple left to right scan suggests doing the addition first but in practice it is the multiplication that needs to be done first. Expressions are difficult to compile because they can be arbitrarily complex and so you cannot solve the problem just using a look up table of types of expression.
The compiler needs a description of the rules of forming and interpreting such an expression - in other words it need a grammar of the arithmetic expression.
At the end of 1953 Backus wrote a letter to his boss proposing a practical high level language. The idea was greeted with enthusiasm and Backus formed a small team - Irving Ziller, Harlan Herrick and Robert A Nelson were the key people. They put together a specification for a language that would could be compiled to produce programs that were as efficient as hand coding could produce.
For some time the language had no name but eventually Backus thought up FORmula TRANslation, or FORTRAN, and in absence of any better ideas the name was adopted. The main concern of the language's design was the production of an efficient compiler and you can see this in the choice of commands and the restrictions imposed.
Backus's group had little idea how to build a compiler and invented all the techniques they needed from scratch:
"We simply made up the language as we went along. We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler which could produce efficient programs"
Some criticise Backus for not concentrating on producing a more elegant design but he justified his approach in the following terms:
"To this day I believe that our emphasis on object program efficiency rather than on language design was basically correct. I believe that had we failed to produce efficient programs, the widespread use of languages like FORTRAN would have been serious delayed."
Difficult to believe?
From our viewpoint those early programmers must have been mad not to want FORTRAN more than anything else on the earth - but they didn't want it and were highly sceptical of the whole idea. The reason was that programming was a black art and machine efficiency was the god that it served. High level languages, if they were possible, would waste machine time even if they saved programmer time.
The Original Fortran Manual For the 704
It is important to realise that Backus wasn't the first to think of using high level languages. Grace Hopper had implemented a number of high level languages but none of them tackled the problem of compiling expressions. Probably the first such high level language was implemented by JH Laning and N Zierler in 1952-53 as part of the Whirlwind project.
Backus wasn't aware of any of this because communication of programming methods was so poor. Backus and his team invented as they went along and because of this they had no idea how long it would take to complete the compiler. When asked they would always say six months - this being their far horizon.