75 Years of Programming

Every change in how programming is done moves the programming from doing something in terms of the machine toward more human. At each step, the programmer says a little more about what they want and a little less about how the machine should do it.

A staircase from wiring to machine code, assembly, high-level languages, libraries and English


And at each step, someone said the new way was not real programming.

With each step, the programmer said more about what they wanted and less about how. Is there a point where saying "what you want" stops being programming?

Hu argues that time sharing turned programmers into "users," made to feel like intimate partners of the computer while the other users on the same machine disappeared from view. Galloway argues that the web works like continuity editing in film: it hides its own apparatus so you never notice the cuts. Each step up the staircase hides more of the machine. Is that progress, or continuity editing? At the top step, programming in English, what is hidden from you?

Notes

75 Years of Programming

Timeline of programming eras from 1945 to 2025

Black bars show the main method of programming in each period. Gray bars show methods that are no longer mainstream but are still used as the basis for existing software.
Notes

Milestones

YearWhat happenedWhat changed for the programmer
1945ENIAC is completedA program is a wiring pattern
1948The Manchester Baby runs the first stored programA program is numbers in memory
1950sPunch cards and batch processing become standardA program is a deck of cards you hand in
1952Grace Hopper's team builds the A-0 compilerThe machine starts translating for you
1957FORTRANWrite formulas, not machine instructions
1958 to 1959LISP and COBOLLanguages for AI research and for business
1961Time-sharing demonstrated at MITMany users, one computer, feedback in seconds
1964BASIC at DartmouthStudents in any major can program
1968NATO conference names "software engineering"Programming becomes a profession
1979VisiCalc, the first spreadsheetProgrammers without the title
1984Apple MacintoshGraphical interface for everyone
1995JavaScriptCode that runs in every browser
2008GitHub and Stack OverflowProgramming as searching and assembling
2021GitHub CopilotAI suggests the next lines
2022ChatGPTWhole programs from a conversation
2025Coding agentsAI writes, runs and fixes code across a project
Notes

Programming as Wiring: ENIAC

ENIAC
ENIAC had no stored program. To give it a new problem, people worked out the math on paper, then set switches and plugged cables by hand. Setting up one problem could take days to weeks.

Its first programmers were six women: Kay McNulty, Betty Jennings, Betty Snyder, Marlyn Wescoff, Fran Bilas and Ruth Lichterman. The work was considered clerical. The engineers who built the hardware got most of the credit.

To program, you had to understand the machine's circuits.

Illustration of a plugboard with cables

ENIAC's first programmers were treated as clerical workers, and the people who built the hardware got the credit. What kind of work in programming today gets treated as "not the real work"?

Another way to see it: the machine as a lab

Wiring ENIAC was like setting up a lab experiment. The investigator designs the experiment and gets the credit. The technician builds the apparatus, calibrates it and makes it run, and is often left out of the main credits in papers. The ENIAC programmers may have had similar status to the technicians in a science lab.


↑ Back to 75 Years of Programming

Notes

The Stored Program

In 1948 the Manchester Baby ran the first program stored in a computer's memory. Instructions became numbers, kept in the same memory as the data they work on.

Memory cells holding both instructions and data

This is the idea every computer since has used, including your phone. A program became something you write, not something you build. But it was still written in raw numbers.

The machine code here is made up for illustration, not a real CPU

Black and white photo of two engineers in lab coats at the Manchester Baby. One presses keys on a small panel of buttons among racks of vacuum tubes and wiring.

How the numbers got in: switches in, dots out. There was no keyboard, no text on a screen and no file. The program went in one bit at a time.

The Baby's programmers thought in bits (0s and 1s) because the switches were bits (on/off 0s/1s). What does today's interface (a text editor, or a chat with an AI) make you think in?

In a text editor, you think in:
  • Strict grammar: one missing bracket or quote and nothing runs, so you think about exact spelling and punctuation.
  • Programming constructs: loops, conditions and variables are the building blocks you reach for.
  • Structure: functions let you group steps into a named box and reuse it.
  • The result itself: you run it and ask whether it is working or not working.

↑ Back to 75 Years of Programming

Notes

Punch Cards

Punch cards came from the Jacquard loom and from Herman Hollerith's machines for the 1890 US census. From the 1950s into the 1970s, they were how most programs got into a computer.

A punch card holding the line X = A + B

Punch cards are a medium, not a language. Machine code, assembly, FORTRAN and COBOL were all punched onto cards.

Why 80 characters? Many code editors still draw a guide line at column 80, and Python's official style guide limits lines to 79 characters.
Notes

A Program as Physical Object

A deck of punch cards with a diagonal stripe
A real punch card

A large program could be thousands of cards in a box. Programmers drew a stripe across the top of the deck and punched sequence numbers into the last columns, so a dropped deck could be put back in order.
Notes

Batch Processing

You did not use the computer. You submitted a job.

The batch cycle: write, keypunch, hand in, wait, run, printout, and back again on error

The computer was too expensive to sit idle while a person thought, so jobs were collected into batches and run one after another, with no one interacting with them. Turnaround was hours, often overnight.

Because every run was expensive, programmers checked their code carefully on paper before handing it in. Reading code was most of the job.

Batch programmers read their code carefully because running it was expensive. Running code costs almost nothing now. What happens to reading?

Notes

The Computer Center

A university computer center
"Computer users, for example science and engineering students at universities, would submit their programming assignments to their local computer center in the form of a deck of punched cards, one card per program line. They then had to wait for the program to be read in, queued for processing, compiled, and executed. In due course, a printout of any results, marked with the submitter's identification, would be placed in an output tray, typically in the computer center lobby. In many cases these results would be only a series of error messages, requiring yet another edit-punch-compile-run cycle."
Notes

From Bits/Numbers to Words

Add two numbers and keep the result:

LevelWhat the programmer writes
Machine code
0001 0110
0010 0111
0011 0101
1111 0000
Assembly
        LOAD  A     ; copy A into the register
        ADD   B     ; add B to it
        STORE X     ; save the result in X
        HALT        ; stop the program
A:      DATA  2     ; the first number
B:      DATA  3     ; the second number
X:      DATA  0     ; space for the result
FORTRAN
X = A + B
JavaScript
let x = a + b;
English, to an AI model
Add the two numbers and show me the result.
Assembly replaced numbers with short words like ADD. Then, in 1952, Grace Hopper's team built A-0, an early compiler: a program that writes machine code for you. Many people at the time doubted a computer could do anything but arithmetic.

↑ Back to 75 Years of Programming

Notes

High-Level Languages: "Automatic Programming"


At the time, this was called automatic programming. Experienced programmers argued that code produced by a compiler would always be slower and worse than code written by hand. Within a few years, compilers were good enough and the argument faded.

The programmer's skill moved from knowing the machine to knowing the problem.

Does that argument sound familiar?

↑ Back to 75 Years of Programming

Notes

Interactive Computing: Time-Sharing

One computer giving time slices to many terminals
Starting in the early 1960s, time-sharing systems let many people use one computer at the same time through terminals.

Feedback went from overnight to seconds. You could try something, watch it fail, and fix it in one sitting. Programming became a conversation with the machine.

BASIC (1964) was designed at Dartmouth so that students in any major could program on the college's time-sharing system.
Notes

Time it takes to get results

Chart of turnaround time by era, log scale

Each era shortened the loop between writing code and seeing what it does. Shorter loops changed how people work: less planning on paper, more trying things.

With AI, the loop is short again, but each turn produces far more code. The question becomes how much of it you actually read.
Notes

The Library/Networked Era: Programming as Assembling Preexisting Code

A project folder where most of the code lives in node_modules
With the web, open source and package managers, most of the code in a project is code someone else wrote.

Programming became finding the right library, reading its documentation, and connecting the pieces.

GitHub and Stack Overflow (both 2008) made other programmers' code and answers searchable. Copying and adapting became a normal, even expected, part of the job.

↑ Back to 75 Years of Programming

Notes

Natural Language

GitHub Copilot (2021) suggested the next lines of code. ChatGPT (2022) produced whole programs from a conversation. Coding agents (2025) write, run and fix code across an entire project.

In early 2023, AI researcher Andrej Karpathy wrote: "The hottest new programming language is English."

English (or natural language) functions as the interface to code that a machine runs. Arguably the skill moves towards precision in English: saying exactly what you want, then checking that you got it.
Loop of specify, generate, read and verify

What does precision mean?

↑ Back to 75 Years of Programming

Notes

Criticism of programming modalities

New wayThe criticismHow the skill used changed
CompilersMachine-written code will be slow and sloppyFrom understanding the machine to describing the problem in programming language
Interactive terminalsWithout careful planning on paper, programming turns into trial and errorTrying things became a way of thinking
Libraries You won't understand code you didn't writeChoosing, reading and connecting
AI models??
Each criticism was partly right. Something was lost each time, and something else became part of programming.

Fill in the "?" row of the criticism table for AI models. What is the worry, and where is the skill moving?

Why or when would someone prefer to think more like the machine?

Notes

Grafting the New to Old?

Stack of layers from transistors up to your prompt

Notes

The Programmer as Architect

Each era moved the programmer further from the machine. The role now looks more like an architect's.

An architect does not lay bricks. An architect:
When compilers, libraries and AI models do more of the building, the programmer's skill is knowing what to ask for and judging what comes back.

Google says 75% of the company's new code is AI-generated and reviewed by human engineers

Precision does not have to come from English alone. You can also:

An architect doesn't lay bricks but still has to understand structure. How much do you need to understand about code to judge what an AI hands back? How would you know if you don't know enough?

Notes

Discussion

Notes