Ten years ago I took my first real job as a computer programmer. Perhaps three weeks later I picked up a book, The Philosophical Programmer by Daniel Kohanski. Title notwithstanding, it is not a very philosophical book. Today I work as an IT Architect for a multinational corporation. There is still something that draws me toward technology, just as there is still discontent which I seek to understand. In 2002, I read a better book, Close to the Machine: Technophilia and its Discontents by Ellen Ullman. Written in 1997, it is a better book because Ullman tells a personal story of her seduction to technology, the swoon of power, the impact on her relationships, and her eventual disillusionment.
Computers offer a cool alternate reality. Programming takes one into a transcendental zone like mathematics, where reality is symbolic and gritty human particulars don’t matter. Programmers are seduced by complete creative control of their little worlds. Others admire and reward their activity. Occupying this virtual reality is not just tempting but probable since software systems require constant attention. A system is never finished.
When I first started programming, I worried that it was putting people out of jobs. I was wrong. It changes their jobs. It is equally worrisome. Everyone winds up making concessions to the bugs and the system. Soon it becomes tautological — a new bigger system is required. The logic of the system is self-sustaining, sucking everyone in, changing them to suit its needs. “Our accommodations begin simply with small workarounds, just to avoid the bugs: ‘We just don’t put in those dates!’ … We conform to the range of motion the system allows. We must be more orderly, more logical. Answer the question, Yes or No, OK or Cancel.”
It is in Ullman’s account of users that I know she gets my angst. “The world as humans understand it and the world as it must be explained to computers come together in the programmer in a strange state of disjunction.” Every twist a user’s mind might invent must be anticipated. Other kinds of design, e.g., elevator design, must also anticipate user actions, but not for the purpose of replacing human thought. People want software so they don’t have to think through data processing tasks. The coder is building technology to replace human thought, and with little to no room for uncertainty. Where a user might generalize a concept or fudge the numbers, the code is exacting and demands precise resolution. Design analysis forces users to understand their thinking, perhaps for the first time. It is a painstaking process. Most often, the design documents blur over the difficult ideas, and it is finally up to the programmer to resolve human thought.
Computer programming in a standard business application context has about five years of juice in it. There are many interesting nuances, but in the end it just comes down to data and rules for processing it. The technology keeps getting repackaged in new forms, and it is not a trivial matter to keep up with it. “It had to happen to me sometime: sooner or later I would have to lose sight of the cutting edge. That moment every technical person fears — the fall into knowledge exhaustion, obsolescence, techno-fuddy-duddyism — there was no reason to think I could escape it forever.” The fact that I cannot write code forever brings a smile to my face. To stay in the business one has to find new juice: the intellectual challenge of the problems, the intimacy of analyzing thought, the desire to make life genuinely better for others. As always, human relations trump the thrills of technology.
[Originally posted on this site on 2011-01-15]