Grace Hopper - First True CompilerOthers were pursuing the same goal, hoping to make computing less dependent on the programming priesthood. Perhaps the most outspoken advocate for change was Grace Hopper, who worked during the 1950s for Remington Rand on the UNIVAC, for Universal Automatic Computer. She defined the programming problem in much the same terms as John Backus. I felt that sooner or later our attitude should not be that people should have to learn how to code for the computer, she explained in 1976. Instead, Hopper said, the computer should learn how to respond to people because I figured we werent going to teach the whole population of the United States how to write computer code. There had to be an interface built that would accept things that were people-oriented and then use the computer to translate to machine code.
Hopper spoke frequently at computer gatherings to marshal support for what she called automatic programming. Under that banner, she grouped several software tools. She wrote an automatic programming system for the UNIVAC that stitched together pieces of code into a single program, and she called it the A-O compiler, and versions A-1 and A-2 would follow. But Hopper, who would later be a leader on the committee that oversaw the creation of COBOL, was always more a technologist, visionary, and industry stateswoman than a programming wizard. Her compiler produced programs that ran far too slowly for most commercial uses. And it was a collection of programming aids rather than software that meets the modern definition of a compiler: a program that translates instructions written in a language familiar to human beings into binary.
The first true compiler in the contemporary sense was probably built for the government-funded Whirlwind project at the Massachusetts Institute of Technology. A pair of MIT researchers, J. Halcombe Laning and Neal Zierler, wrote a program that translated algebraic equations into machine code in early 1954. Backus and Ziller visited MIT in June of that year to observe the compiler first-hand and speak with its creators. It was pretty good, very nicely done conceptually, Ziller recalled. But they took an academic approach. They couldnt care less about efficiency. In fact, programs using the MIT compiler took nearly 10 times longer to run than it took for hand-coded programs doing the same calculations.
Undaunted, the original FORTRAN trio Backus, Ziller, and Herrick set the ambitious goal for themselves of matching the work of human coders. Despite setbacks, they never wavered. Success or failure, they understood, would hinge on the efficiency of compiler translation far more so than the language itself. We simply made up the language as we went along, Backus explained. We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler that could produce efficient programs.
The approach may have been nonchalant, but the FORTRAN language design certainly left a legacy especially the seemingly innocuous decision to include the Go To statement as one of its basic commands. In 1968, Edsger Dijkstra, an academic champion for the concept of more disciplined structured programming, wrote an impassioned letter to the editor of Communications of the ACM, the journal of the leading professional society in the field, the Association for Computing Machinery. Under the playfully incendiary headline, Go To Statement Considered Harmful, Dijkstra observed that the quality of programmers is a decreasing function of the density of Go To statements in the programs they produce. The Go To statement, Dijkstra wrote, had had such disastrous effects that he was convinced that the Go To statement should be abolished from all higher level languages. By the late 1960s, when Dijkstra wrote, software programs had grown immensely in size and complexity. The Go To command is an unconditional jump, allowing a hop from one place in a software program to anywhere else, altering the flow and control of a programs execution.