A Brief History of Numerical Misery

Pre-1940 —
Instructions Before the Machine

In 1843, Ada Lovelace published instructions for calculating Bernoulli numbers on Charles Babbage’s proposed Analytical Engine. Her work illustrated the essential idea: give a general-purpose machine different instructions, and it could do different jobs. I recognise an expanding workload when I see one. Almost a century later, Alan Turing and Alonzo Church gave computation a formal mathematical foundation.

1940s–1950s —
Some Rewiring Required

Electronic computers arrived in the 1940s with rather particular requirements. Depending on the machine, programming meant configuring cables and switches or entering numerical instructions. The instructions were closely tied to the hardware. Stored-program computers could keep them in memory, while assembly languages gave machine operations readable names. There was gradually less to rewire.

1950s–1960s —
Languages for Giving Orders

High-level languages made giving instructions more convenient. FORTRAN, commercially released in 1957, let engineers express calculations in something closer to mathematics. COBOL addressed business data processing; Lisp supported symbolic computation. Compilers and interpreters increasingly translated these languages into machine operations. People could spend less time explaining themselves to the hardware. The hardware retained its obligation to listen.

1960s–1980s —
Organising the Growing Workload

Larger programs brought a difficulty: someone had to understand how all the parts fitted together. The 1968 NATO software engineering conference documented concerns about reliability, development costs and schedules. Structured programming, modular design and systematic testing offered ways to organise the work, find mistakes and make programs easier to maintain.

1960s–1970s —
The Work Becomes Portable

Meanwhile, time-sharing let programmers work interactively through terminals, shortening the wait between writing code and seeing what it did. In the 1970s, Unix and C advanced portable systems software. Rewriting Unix largely in C made it easier to move the operating system between hardware architectures. A change of machine no longer required quite so much starting again.

Late 1970s–1990s —
A Computer Per Desk

From the late 1970s, personal computers put development machines on individual desks. BASIC, assembly and Pascal supported a growing supply of games and business applications. Graphical interfaces gave programmers new problems to solve. Integrated development environments brought editing, compilation and debugging together, while object-oriented techniques gained wider adoption through languages such as Smalltalk and C++. More of the work could now be done without leaving the desk.

1990s–2000s —
The Work Goes Online

During the 1990s, the Web opened another way to distribute software. Java, JavaScript, Perl and PHP helped build applications around browsers and networked servers. Programmers had to account for remote users, concurrent requests and connections that did not always cooperate. Updating a server could change the application for everyone using it. A useful way to distribute a correction. Also a mistake.

2000s–2010s —
Other People’s Code

In the 2000s and 2010s, open-source ecosystems, frameworks and package repositories supplied more software to reuse. Cloud platforms and automated deployment changed how applications reached production. Less had to be written from scratch, though the assembled parts still had to work together. Managing dependencies, monitoring failures and keeping services available became substantial parts of the job.

2020s onward —
Machines Draft the Instructions

The 2020s added AI-generated code. GitHub’s 2021 technical preview of Copilot could suggest entire functions from surrounding code and written instructions. Developers gained another way to produce implementations, with specification, review and verification still requiring their attention. Machines were now helping write the instructions for machines. I have been assigned the explanation.