If you’re looking for an insight into the mindset of many modern computer programmers, you could do worse than start with how they name their nemeses: bugs.
The word bug itself, when used to describe a fault within machinery, is far older than modern computing. As early as 1878, the American inventor Thomas Edison was writing to an associate about “bugs” occurring in the process of invention. “The first step is an intuition, and comes with a burst, then difficulties arise—this thing gives out and [it is] then that ‘Bugs’—as such little faults and difficulties are called—show themselves,” he explained in a letter to Tivadar Puskás, his agent in Paris, describing his continuing efforts to develop a practical electric light.32
Edison’s familiar use of the term suggests something already known to engineers, and it continued to be used in a machine context through the first half of the twentieth century (unlike the younger term glitch, which entered English—from the Yiddish word glitsh, “a slip”—in the 1960s, as a word used by electronic engineers and popularized by the US space program).
Bug got its first outing as a computer term pretty much as soon as electronic computers arrived and was spread via a story told by the computer science pioneer Grace Hopper, who in 1947 encountered a log book by a fellow member of the team working on the Harvard University Mark II Aiken Relay Calculator. The entry recorded an error being fixed by the removal of a dead moth from the machine’s workings—a moth physically affixed to the log book next to the caption “first actual case of bug being found.”33
Perhaps the world’s most literal case of successful debugging, Hopper’s tale suggests an engineering culture that had already begun to breed variations, subsets, and playful reinterpretations. Today, that taxonomy has reached a scale appropriate to the many varieties of electronic error: and, as you might expect, its margins boast some fine oddities.
One notable such term is the Heisenbug—named after Werner Heisenberg’s eponymous uncertainty principle because it changes its behavior the moment a programmer attempts to isolate it, effectively vanishing the moment it is observed.
Continuing the theme, a “Bohr bug”—named after Danish physicist Niels Bohr—behaves in the opposite way to a Heisenbug, being easy to reproduce under defined conditions (by analogy with Niels Bohr’s predictable, deterministic model of an atom).
Then, named after mathematician Benoît Mandelbrot, come “mandelbugs”—programming errors so complex that they appear chaotic, like the infinite layers of fractal complexity found in a Mandelbrot set.
More mysterious still are “Schroedinbugs”—named after Erwin Schrödinger’s famous thought-experiment involving a cat that manages to be alive and dead at the same time. Similarly, a Schroedinbug can lurk for years within an apparently perfect piece of computer programming, until someone notices an esoteric error that ought to stop it from working—at which point the program does, indeed, stop working.34