I used to pass by a large computer system with the
feeling that it represented the summed-up knowledge of human
beings. It reassured me to think of all those programs as
a kind of library in which our understanding of the world
was recorded in intricate and exquisite detail. I managed
to hold onto this comforting belief even in the face of 20
years in the programming business, where I learned from the
beginning what a hard time we programmers have in maintaining
our own code, let alone understanding programs written and
modified over years by untold numbers of other programmers.
Programmers come and go; the core group that once understood
the issues has written its code and moved on; new programmers
have come, left their bit of understanding in the code and
moved on in turn. Eventually, no one individual or group knows
the full range of the problem behind the program, the solutions
we chose, the ones we rejected and why.
Over time, the only representation of the original knowledge
becomes the code itself, which by now is something we can
run but not exactly understand. It has become a process, something
we can operate but no longer rethink deeply. Even if you have
the source code in front of you, there are limits to what
a human reader can absorb from thousands of lines of text
designed primarily to function, not to convey meaning. When
knowledge passes into code, it changes state; like water turned
to ice, it becomes a new thing, with new properties. We use
it; but in a human sense we no longer know it.
The Year 2000 problem is an example on a vast scale of knowledge
disappearing into code. And the soon-to-fail national air-traffic
control system is but one stark instance of how computerized
expertise can be lost. In March, the New York Times reported
that IBM had told the Federal Aviation Administration that,
come the millennium, the existing system would stop functioning
reliably. IBM's advice was to completely replace the system
because, they said, there was "no one left who understands
the inner workings of the host computer."
No one left who understands. Air-traffic control
systems, bookkeeping, drafting, circuit design, spelling,
differential equations, assembly lines, ordering systems,
network object communications, rocket launchers, atom-bomb
silos, electric generators, operating systems, fuel injectors,
CAT scans, air conditioners -- an exploding list of subjects,
objects and processes rushing into code, which eventually
will be left running without anyone left who understands them.
A world full of things like mainframe computers, which we
can use or throw away, with little choice in between. A world
floating atop a sea of programs we've come to rely on but
no longer truly understand or control. Code and forget; code
and forget: programming as a collective exercise in incremental
forgetting.