Science and the Compulsive Programmer

from Computer Power and Human Reason [1976]

by Joseph Weizenbaum

The computer programmer, however, is a creator of universes for which he alone is the lawgiver.  So, of course, is the designer of any game.  But universes of virtually unlimited complexity can be created in the form of computer programs.  Moreover, and this is a crucial point, systems so formulated and elaborated act out their programmed scripts.  They compliantly obey their laws and vividly exhibit their obedient behavior.  No playwright, no stage director, no emperor, however powerful, has ever exercised such absolute authority to arrange a stage or a field of battle and to command such unswervingly dutiful actors or troops.

One would have to be astonished if Lord Acton’s observation that power corrupts were not to apply in an environment in which omnipotence is so easily achievable.  It does apply.  And the corruption evoked by the computer programmer’s omnipotence manifests itself in a form that is instructive in a domain far larger than the immediate environment of the computer.  To understand it, we will have to take a look at a mental disorder that, while actually very old, appears to have been transformed by the computer into a new genus: the compulsion to program.

Wherever computer centers have become established, that is to say, in countless places in the United States, as well as in virtually all other industrial regions of the world, bright, young men of disheveled appearance, often with sunken glowing eyes, can be seen sitting at computer consoles, their arms tensed and waiting to fire their fingers, already poised to strike, at the buttons and keys on which their attention seems to be as riveted as a gambler’s on the rolling dice.  When not so transfixed, they often sit at tables strewn with computer printouts over which they pore like possessed students of a cabalistic text.  They work until they nearly drop, twenty, thirty hours at a time.  Their food, if they arrange it, is brought to them: coffee, Cokes, sandwiches.  If possible, they sleep on cots near the computer.  But only for a few hours—then back to the console or the printouts.  Their rumpled clothes, their unwashed and unshaven faces, and their uncombed hair all testify that they are oblivious to their bodies and to the world in which they move.  They exist, at least when so engaged, only through and for the computers.  These are computer bums, compulsive programmers.  They are an international phenomenon.

How may the compulsive programmer be distinguished from a merely dedicated, hard-working programmer?  First, by a fact that the ordinary professional programmer addresses himself to the problem to be solved, whereas the compulsive programmer sees the problem mainly as an opportunity to interact with the computer.  The ordinary computer programmer will usually discuss both his substantive and his technical programming problem with others.  He will generally do lengthy preparatory work, such as writing and flow diagramming, before beginning work with the computer itself.  His sessions with the computer may be comparatively short.  He may even let others do the actual console work.  He develops his program slowly and systematically.  When something doesn’t work, he may spend considerable time away from the computer, framing careful hypotheses to account for the malfunction and designing crucial experiments to test them.  Again, he may leave the actual running of the computer to others.  He is able, while waiting for results from the computer, to attend to other aspects of his work, such as documenting what he has already done.  When he has finally composed the program he set out to produce, he is able to complete a sensible description of it and to turn his attention to other things.  The professional regards programming as a means toward an end, not as an end in itself.  His satisfaction comes from having solved a substantive problem, not from having bent a computer to his will.

The compulsive programmer is usually a superb technician, moreover, one who knows every detail of the computer he works on, its peripheral equipment, the computer’s operating system, etc.  He is often tolerated around computer centers because of his knowledge of the system and because he can write small subsystem programs quickly, that is, in one or two sessions of, say, twenty hours each.  After a time, the center may in fact be using a number of his programs.  But because the compulsive programmer can hardly be motivated to do anything but program, he will almost never document his programs once he stops working on them.  A center may therefore come to depend on him to teach the use of, and to maintain, the programs that he wrote and whose structure only he, if anyone, understands.  His position is rather like that of a bank employee who doesn’t do much for the bank, but who is kept on because only he knows the combination to the safe.  His main interest is, in any case, not in small programs, but in very large, very ambitions systems of programs.  Usually the systems he undertakes to build, and on which he works feverishly for perhaps a month or two or three, have very grandiose but extremely imprecisely stated goals.  Some examples of these ambitions are: new computer languages to facilitate man-machine communication; a general system that can be taught to play any board game; a system to make it easier for computer experts to write super-systems (this last is a favorite).  It is characteristic of many such projects that the programmer can long continue in the conviction that they demand knowledge about nothing but computers, programming, etc.  And that knowledge he, of course, commands in abundance.  Indeed, the point at which such work is often abandoned is precisely when it ceases to be purely incestuous, i.e., when programming would have to be interrupted in order that knowledge from outside the computer may be acquired.

Unlike the professional, the compulsive programmer cannot attend to other tasks, not even to tasks closely related to his program, during periods when he is not actually operating the computer.  He can barely tolerate being away from the machine.  But when he is nevertheless forced by circumstances to be separated from it, at least he has his computer printouts with him.  He studies them, he talks about them to anyone who will listen—though, of course, no one else can understand them.  Indeed, while in the grip of his compulsion, he can talk of nothing but his program.  But the only time he is, so to say, happy is when he is at the computer console.  Then he will not converse with anyone but the computer.  We will soon see what they converse about.

The compulsive programmer spends all the time he can working on one of his big projects.  “Working” is not the word he uses; he calls what he does “hacking.”  To hack is, according to the dictionary, “to cut irregularly, without skill or definite purpose; to mangle by or as if by repeated strokes of a cutting instrument.”  I have already said that the compulsive programmer, or hacker as he calls himself, is usually a superb technician.  It seems therefore that he is not “without skill” as the definition would have it.  But the definition fits in the deeper sense that the hacker is “without definite purpose”: he cannot set before himself a clearly defined long-term goal and a plan for achieving it, for he has only technique, not knowledge.  He has nothing he can analyze or synthesize; in short, he has nothing to form theories about.  His skill is therefore aimless, even disembodied.  It is simply not connected with anything other than the instrument on which it may be exercised.  His skill is like that of a monastic copyist who, though illiterate, is a first-rate calligrapher.  His grandiose projects must therefore necessarily have the quality of illusions, indeed, of illusions of grandeur.  He will construct the one grand system in which all other experts will soon write their systems.

   

Programming systems can, of course, be built without plan and without knowledge, let alone understanding, of the deep structural issues involved, just as houses, cities, systems of dams, and national economic policies can be similarly hacked together.  As a system so constructed begins to get large, however, it also becomes increasingly unstable.  When one of its subsystems fails in an unanticipated way, it may be patched until the manifest trouble disappears.  But since there is no general theory of the whole system, the system itself can be only a more or less chaotic aggregate of subsystems whose influence on one another’s behavior is discoverable only piecemeal and by experiment.  The hacker spends part of his time at the console piling new subsystems onto the structure he has already built—he calls them “new features”—and the rest of his time in attempts to account for the way in which substructures already in place misbehave.  That is what he and the computer converse about.

The psychological situation the compulsive programmer finds himself in while so engaged is strongly determined by two apparently opposing facts:  first, he knows that he can make the computer do anything he wants it to do; and second, the computer constantly displays undeniable evidence of his failures to him.  It reproaches him.  There is no escaping this bind.  The engineer can resign himself to the truth that there are some things he doesn’t know.  But the programmer moves in a world entirely of his own making.  The computer challenges his power, not his knowledge.

Indeed, the compulsive programmer’s excitement rises to its highest, most feverish pitch when he is on the trail of a most recalcitrant error, when everything ought to work but the computer nevertheless reproaches him by misbehaving in a number of mysterious, apparently unrelated ways.  It is then that the system the programmer has himself created gives every evidence of having taken on a life of its own and, certainly, of having slipped from his control.  This too is the point at which the idea that the computer can be “made to do anything” becomes most relevant and most soundly based in reality.  For, under such circumstances, the misbehaving artifact is, in fact, the programmer’s own creation.  Its very misbehavior can, as we have already said, be the consequence only of what the programmer himself has done.  And what he has done he can presumably come to understand, to undo, and to redo to better serve his purpose.  Accordingly his mood and his activity become frenzied when he believes he has finally discovered the source of the trouble.  Should his time at the console be nearly up at that moment, he will take enormous risks with his program, making substantial changes, one after another, in minutes or even seconds without so much as recording what he is doing, always pleading for just another minute.  He can, under such circumstances, rapidly and virtually irretrievably destroy weeks and weeks of his own work.  Should he, however, find a deeply embedded error, one that actually does account for much of the program’s misbehavior, his joy is unbounded.  It is a thrill to see a hitherto moribund program suddenly come back to life; there is no other way to say it.  When some deep error has been found and repaired, any different portions of the program, which until then had given nothing but incomprehensible outputs, suddenly behave smoothly and deliver precisely the intended results.  There is reason for the diagnostician to be pleased and, if the error was really deep inside the system, even proud.

But the compulsive programmer’s pride and elation are very brief.  His success consists of his having shown the computer who its master is.  And having demonstrated that he can make it to do this much, he immediately sets out to make it do even more.  Thus the entire cycle begins again.  He begins to “improve” his system, say, by making it run faster, or by adding “new features” to it, or by improving the ease with which data can be entered into it and gotten out of it.  The act of modifying the then-existing program invariably causes some of its substructures to collapse; they constitute, after all, an amorphous collection of processes whose interactions with one another are virtually fortuitous.  His apparently devoted efforts to improve and promote his own creation are really an assault on it, an assault whose only consequence can be to renew his struggle with the computer.  Should he be prevented from so sabotaging his own work, say, by administrative decision, he will become visibly depressed, begin to sulk, display no interest in anything around him, etc.  Only a new opportunity to compute can restore his spirit.