From Punch Cards to Python


In today’s digital world, it’s easy for just about anyone to create a mobile app or write software, thanks to Java, JavaScript, Python, and other programming languages.

But that wasn’t always the case. Because the primary language of computers is binary code, early programmers used punch cards to instruct computers what tasks to complete. Each hole represented a single binary digit.

That changed in 1952 with the A-0 compiler, a series of specifications that automatically translates high-level languages such as English into machine-readable binary code.

The compiler, now an IEEE Milestone, was developed by Grace Hopper, who worked as a senior mathematician at the Eckert-Mauchly Computer Corp., now part of Unisys, in Philadelphia.

IEEE Fellow’s innovation allowed programmers to write code faster and easier using English commands. For her, however, the most important outcome was the influence it had on the development of modern programming languages, making writing code more accessible to everyone, according to a Penn Engineering Today article.

The dedication of the A-0 compiler as an IEEE Milestone was held in Philadelphia on 7 May at the University of Pennsylvania. That’s where the Eckert-Mauchly Computer Corp. got its start.

“This milestone celebrates the first step of applying computers to automate the tedious portions of their own programming,” André DeHon, professor of electrical systems, engineering, and computer science, said at the dedication ceremony.

Eliminating the punch-card system

To program a computer, early technicians wrote out tasks in assembly language—a human-readable way to write machine code, which is made up of binary numbers. They then manually translated the assembly language into machine code and punched holes representing the binary digits into cards, according to a Mediumarticle on the method. The cards were fed into a machine that read the holes and input the data into the computer.

The punch-card system was laborious; it could take days to complete a task. The cards couldn’t be used with even a slight defect such as a bent corner. The method also had a high risk of human error.

After leading the development of the Electronic Numerical Integrator and Computer (ENIAC) at Penn, computer scientists J. Presper Eckert and John W. Mauchly set about creating a replacement for punch cards. ENIAC was built to improve the accuracy of U.S. artillery during World War II, but the two men wanted to develop computers for commercial applications, according to a Pennsylvania Center for the Book article.

The machine they designed was the first known large-scale electronic computer, the Universal Automatic, or UNIVAC I. Hopper was on its development team.

UNIVAC I used 6,103 vacuum tubes and took up a 33-square-meter room. The machine had a memory unit. Instead of punch cards, the computer used magnetic tape to input data. The tapes, which could hold audio, video, and written data, were up to 457 meters long. Unlike previous computers, the UNIVAC I had a keyboard so an operator could input commands, according to the Pennsylvania Center for the Book article.

“This milestone celebrates the first step of applying computers to automate the tedious portions of their own programming.” —André DeHon

Technicians still had to manually feed instructions into the computer, however, to run any new program.

That time-consuming process led to errors because “programmers are lousy copyists,” Hopper said in a speech for the Association for Computing Machinery. “It was amazing how many times a 4 would turn into a delta, which was our space symbol, or into an A. Even B’s turned into 13s.”

According to a Hidden Heroes article, Hopper had an idea for simplifying programming: Have the computer translate English to machine code.

She was inspired by computer scientist Betty Holberton’s sort/merge generator and Mauchly’s Short Code. Holberton is one of six women who programmed the ENIAC to calculate artillery trajectories in seconds, and she worked alongside Hopper on the UNIVAC I. Her sort/merge program, invented in 1951 for the UNIVAC I, handled the large data files stored on magnetic tapes. Hopper defined the sort/merge program as the first version of virtual memory because it made use of overlays automatically without being directed to by the programmer, according to a Stanford presentation about programming languages. The Short Code, which was developed in the 1940s, allowed technicians to write programs using brief sequences of English words corresponding directly to machine code instructions. It bridged the gap between human-readable code and machine-executable instructions.

“I think the first step to tell us that we could actually use a computer to write programs was the sort/merge generator,” Hopper said in the presentation. “And Short Code was the first step in moving toward something which gave a programmer the actual power to write a program in a language which bore no resemblance whatsoever to the original machine code.”

A photo of a woman standing in front of a large computer bank. IEEE Fellow Grace Hopper inputting call numbers into the Universal Automatic (UNIVAC I), which allows the computer to find the correct instructions to complete. The A-0 compiler translates the English instructions into machine-readable binary code.Computer History Museum

Easier, faster, and more accurate programming

Hopper, who figured computers should speak human-like languages, rather than requiring humans to speak computer languages, began thinking about how to allow programmers to call up specific codes using English, according to an IT Professional profile.

But she needed a library of frequently used instructions for the computer to reference and a system to translate English to machine code. That way, the computer could understand what task to complete.

Such a library didn’t exist, so Hopper built her own. It included tapes that held frequently used instructions for tasks that she called subroutines. Each tape stored one subroutine, which was assigned a three-number call sign so that the UNIVAC I could locate the correct tape. The numbers represented sets of three memory addresses: one for the memory location of the subroutine, another for the memory location of the data, and the third for the output location, according to the Stanford presentation.

“All I had to do was to write down a set of call numbers, let the computer find them on the tape, and do the additions,” she said in a Centre for Computing History article. “This was the first compiler.”

The system was dubbed the A-0 compiler because code was written in one language, which was then “compiled” into a machine language.

What previously had taken a month of manual coding could now be done in five minutes, according to a Cockroach Labs article.

Hopper presented the A-0 to Eckert-Mauchly Computer executives. Instead of being excited, though, they said they didn’t believe a computer could write its own programs, according to the article.

“I had a running compiler, and nobody would touch it, because they carefully told me computers could only do arithmetic; they could not do programs,” Hopper said. “It was a selling job to get people to try it. I think with any new idea, because people are allergic to change, you have to get out and sell the idea.”

It took two years for the company’s leadership to accept the A-0.

In 1954, Hopper was promoted to director of automatic programming for the UNIVAC division. She went on to create the first compiler-based programming languages including Flow-Matic, the first English language data-processing compiler. It was used to program UNIVAC I and II machines.

Hopper also was involved in developing COBOL, one of the earliest standardized computer languages. It enabled computers to respond to words in addition to numbers, and it is still used in business, finance, and administrative systems. Hopper’s Flow-Matic formed the foundation of COBOL, whose first specifications were made available in 1959.

A plaque recognizing the A-0 is now displayed at the University of Pennsylvania. It reads:

During 1951–1952, Grace Hopper invented the A-0 Compiler, a series of specifications that functioned as a linker/loader. It was a pioneering achievement of automatic programming as well as a pioneering utility program for the management of subroutines. The A-0 Compiler influenced the development of arithmetic and business programming languages. This led to COBOL (Common Business-Oriented Language), becoming the dominant high-level language for business applications.

The IEEE Philadelphia Section sponsored the nomination.

Administered by the IEEE History Center and supported by donors, the Milestone program recognizes outstanding technical developments worldwide.