But, for Backus, the programming itself was as tedious as medical memory work. In the early 50’s, most of it was being done in binary-coded numbers the computer hardware could interpret. The simplest machine instruction was a laborious process of setting down rows of “0’s” and “l’s” in precise order.
“Much of my work has come from being lazy,” he says. “I didn’t like writing programs, and so, when I was working on the IBM 701, writing programs for computing missile trajectories, I started work on a programming system to make it easier to write programs for the 701. And that wound up as something called Speedcoding.”
Later, when the IBM 704 was in development up at the old Homestead lab in Poughkeepsie [N.Y.], Backus persuaded the designers to build directly into its hardware features that Speedcoding simulated.
From then on,” he said, “the question became, what can we do for the poor programmer now? You see, programming and debugging were the largest parts of the computer budget, and it was easy to see that, with machines like the 704 getting faster and cheaper, the situation was going to get far worse.
Backus decided there might be a way use mathematical notation to address the computer and have it work out its programs of “0’s” and “l’s” automatically. He wrote a letter to his boss, Dr. Cuthbert Hurd, head of the applied science department, saying that it might be possible to develop an automatic programming system for the 704, and make it practical. Hurd, who, in 1951, had the foresight to encourage the company to hire John von Neumann as a consultant, said yes.
Most people, Backus says today, “think FORTRAN’s main contribution was to enable the programmer to write programs in algebraic formulas instead of machine language. But it isn’t. What FORTRAN did primarily was to mechanize the organization of loops.” A loop, heavily used in scientific work and in computing payrolls, is a series of instructions repeated a number of times until a specific result is reached.
FORTRAN did greatly increase programmer productivity. What had previously taken 1,000 machine instructions could now be written in 47 statements. And, as intended, more scientists and engineers learned to do their own programming. But the language was slow, at first, in catching on. “Users,” says its creator, “just found it hard to believe that a machine could write an efficient program.”
It could. By the fall of 1958, more than half the machine instructions of the 704 were being generated by FORTRAN. It was soon being used on other machines as well. “In a way, FORTRAN was a great boon to our competitors,” says Backus, “because with their programs tied up in machine language, IBM customers weren’t about to reprogram for another computer. But if a competitor could come up with a program that would translate a FORTRAN program into the language of his machine, he had a selling point.”
The telephone rang, and he crossed the room to answer it. “I’ve had an associate for several months now,” he said, returning. “A former associate professor at Cornell. When I’m working at home, we often spend an hour a day on the phone.”
What had inspired his new work?
“I just got sick of seeing more and more new programming languages — what I call von Neumann languages,” he replied. “They’ve just become so baroque and unwieldy that few of them make programming sufficiently cheaper to justify their cost. FORTRAN started the trend. You see,” Backus continued, “all programming languages are essentially mirrors of the von Neumann computer. Each one may add a gimmick or two, to automate some of the dirty work, but it’s usually done at the price of a much more complicated language. Today’s programming manuals are that thick.” He held up a thumb and forefinger. “Some of them have 500 pages. It’s just a vicious circle, because language designers design to fit the computer, and computer designers think they must design to fit the languages.
“Von Neumann’s concept was brilliant. of course, and worked fine 30 years ago,” said Backus. ‘But,” he paused, making arches of his hands, “here’s my highly oversimplified analysis of the von Neumann computer. It consists of two boxes. One is the central processing unit, where the calculations take place, and the other is the store, or memory. Traffic between them takes place, figuratively speaking, through a narrow passage that I call the von Neumann bottleneck. Because it is just that. You see, the purpose of a program is to make a big change in the store. But how does it do it? By huffing and puffing words (a computer word is only 32 bits — 0s” and ‘l’s”) back and forth through the tiny passage between the store and the CPU. One word at a time.”
The result, says Backus, is that the programmer is left with an enormous task of how to get things out of the store, combine and pump them back into the store so that the ultimate result is achieved. Everything that can be said in a conventional programming language has to be thought of in advance, making the language huge and inflexible. “And because it takes pages and pages of gobbledygook to describe how a programming language works, it’s hard to prove that a given program actually does what it is supposed to. Therefore, programmers must learn not only this enormously complicated language but, to prove their programs will work, they must also learn a highly technical logical system in which to reason about them.
“Now, in the kinds of systems I’m trying to build,” he explained, “you can write a program as essentially an equation, like equations in high school algebra, and the solution of that equation will be the program you want. What’s more, you can prove your programs in the language of the programs themselves. The entire language can be described in one page. But,” he raised a finger, “there’s a catch. They’re what I call applicative languages, which means that there’s no concept of a stored memory at all.”
But surely a computer can’t do without a stored memory?
“Well, in one sense it can,” said Backus.
“What I want to do is to come up with a computing system that doesn’t depend on a memory at all, and combine that system, in a rather loose fashion, with one that has a memory but keeps the simplicity and the algebraic properties of the memoryless system. Then, hopefully, the process of algebraically speeding up programs can be mechanized so that people can write the simplest programs and not have to care whether they are efficient or not. The computer will do the hard work. And, more than that, perhaps a lot of programs can be written simply by describing the program you want with an equation.”
The sun had left the hill and, farther out, was turning the blue of the ocean to gold. “The FORTRAN language,” Backus reflected, “took about nine months to devise. I’ve been working on this project since 1970, and it’s still evolving. It’s been difficult because it requires breaking one of the traditions of spoken English.
“For example, when we write sentences, we interpret the sentence not by the words themselves, but in terms of what they refer to. When you say, ‘the cat is running,’ you don’t mean the word, ‘cat,’ you mean the animal. The same with computer programs. When you write ‘x equals y plus z,’ you are certainly not referring to adding the letters ‘y’ and ‘z.’ Yet my languages do just that. I call them anti-quote languages. When you use the word ‘cat’ in an anti-quote language, you are referring to the word, not the animal.
“Now, if you were to say that, from now on, all English sentences are to be interpreted in this new way, everybody would be terribly confused, and of course, it wouldn’t make sense in the case of English. Yet, that’s essentially the change I’ve made in programming.”
There was a taxi waiting and a plane to catch.
“I wouldn’t be surprised if I’ve boggled you,” Backus said, as he saw me down the steps. “My stuff boggles computer scientists, too, at first. It’s a terrible wrench in our accustomed way of thinking and just normal language usage. But what I can show is that if they do make the switch, then a lot of advantages flow from it.”