In retrospect, thinking of programs as automobiles wasn’t so bad. Automobiles are pretty simple. If their car stops working, people expect any good mechanic to be able to figure out why and fix the problem.

Twenty years ago, people felt that way about programs too. Programs were something they could understand. Even if they weren’t willing to admit that a program is a mathematical object, they still felt that, like an automobile, a program could be debugged with the aid of logical reasoning.

That’s no longer the case. In the intervening years, computer programs have become much more complicated. People no longer expect to be able to deduce what’s wrong when a program doesn’t work. Instead of thinking of programs as automobiles, people now think of them as biological systems.