The Underlying Reasons Are Complex
The next step is to consider why we have this problem. After all, bridges do stand, they do span rivers, and they do bear traffic. Why can’t software do the same? Ah, but we have had several thousand years to learn how to build bridges. Software development dates only from the middle of the twentieth century. And what did it face?
- It faced a horrendous rate of change. Programs grew from a few hundred lines of code to many millions. Programming languages went through four or five generations. The hardware advanced at a rate previously unheard of—from processing a few hundred lines of code per second to hundreds of millions. Users multiplied from a handful of experts in glass-enclosed air-conditioned palaces to nearly everybody.
- It faced a massive increase in complexity. Large programs used to run only on very large computers, or even many computers in tandem. Today, personal computers approach the computational capacity of what were supercomputers a couple of decades ago. Scores of programs jostle each other on a single computer, trying to work together.
- It faced a daunting multiplication of relationships. At first, a single program ran on a single computer. Then several computers exchanged simple messages. Modems attached computers to each other, via the telephone network. The Department of Defense financed the DARPANet for a dozen or so research centers. In the 1990’s, this network metamorphosed into the Internet, with hundreds of millions of users worldwide.
The sticking point is this: All these programs have to work in harmony with all the other programs. Sometimes they don’t—like several times a week—and your system crashes. If your system is doing something critical, a crash may be destructive.