Disappearing into the code: A deadline brings programmers to the place of no shame. Excerpt from "Close to the Machine."
By Ellen Ullman Oct. 9, 1997
This is the first of two excerpts in Salon 21st from Ellen Ullman's new book, "Close to the Machine: Technophilia and its Discontents" (City Lights Books, $21.95, 189 pp.), an autobiographical exploration of the lives and minds of software engineers.
I have no idea what time it is. There are no windows in this office and no clock, only the blinking red LED display of a microwave, which flashes 12:00, 12:00, 12:00, 12:00. Joel and I have been programming for days. We have a bug, a stubborn demon of a bug. So the red pulse no-time feels right, like a read-out of our brains, which have somehow synchronized themselves at the same blink rate.
"But what if they select all the text and --"
" -- hit Delete."
"Damn! The NULL case!"
"And if not we're out of the text field and they hit space --"
"-- yeah, like for --"
"-- no parameter --"
"So what if we space-pad?"
"I don't know ... Wait a minute!"
"Yeah, we could space-pad --"
" -- and do space as numeric."
"Yes! We'll call SendKey(space) to --"
"-- the numeric object."
"My God! That fixes it!"
"Yeah! That'll work if --"
"-- space is numeric!"
"-- if space is numeric!"
We lock eyes. We barely breathe. For a slim moment, we are together in a universe where two human beings can simultaneously understand the statement "if space is numeric!"
Joel and I started this round of debugging on Friday morning. Sometime later, maybe Friday night, another programmer, Danny, came to work. I suppose it must be Sunday by now because it's been a while since we've seen my client's employees around the office. Along the way, at odd times of day or night that have completely escaped us, we've ordered in three meals of Chinese food, eaten six large pizzas, consumed several beers, had innumerable bottles of fizzy water, and finished two entire bottles of wine. It has occurred to me that if people really knew how software got written, I'm not sure if they'd give their money to a bank or get on an airplane ever again.
What are we working on? An artificial intelligence project to find "subversive" talk over international phone lines? Software for the second start-up of a Silicon Valley executive banished from his first company? A system to help AIDS patients get services across a city? The details escape me just now. We may be helping poor sick people or tuning a set of low-level routines to verify bits on a distributed database protocol -- I don't care. I should care; in another part of my being -- later, perhaps when we emerge from this room full of computers -- I will care very much why and for whom and for what purpose I am writing software. But just now: no. I have passed through a membrane where the real world and its uses no longer matter. I am a software engineer, an independent contractor working for a department of a city government. I've hired Joel and three other programmers to work with me. Down the hall is Danny, a slim guy in wire-rimmed glasses who comes to work with a big, wire-haired dog. Across the bay in his converted backyard shed is Mark, who works on the database. Somewhere, probably asleep by now, is Bill the network guy. Right now, there are only two things in the universe that matter to us. One, we have some bad bugs to fix. Two, we're supposed to install the system on Monday, which I think is tomorrow.
"Oh no, no!" moans Joel, who is slumped over his keyboard. "No-o-o-o ." It comes out in a long wail. It has the sound of lost love, lifetime regret. We've both been programmers long enough to know that we are at that place. If we find one more serious problem we can't solve right away, we will not make it. We won't install. We'll go the terrible, familiar way of all software: we'll be late.
"No, no, no, no. What if the members of the set start with spaces. Oh, God. It won't work."
He is as near to naked despair as has ever been shown to me by anyone not in a film. Here, in that place, we have no shame. He has seen me sleeping on the floor, drooling. We have both seen Danny's puffy, white midsection -- young as he is, it's a pity -- when he stripped to his underwear in the heat of the machine room. I have seen Joel's dandruff, light coating of cat fur on his clothes, noticed things about his body I should not. And I'm sure he's seen my sticky hair, noticed how dull I look without make-up, caught sight of other details too intimate to mention. Still, none of this matters anymore. Our bodies were abandoned long ago, reduced to hunger and sleeplessness and the ravages of sitting for hours at a keyboard and a mouse. Our physical selves have been battered away. Now we know each other in one way and one way only: the code.
Besides, I know I can now give him pleasure of an order which is rare in any life: I am about to save him from despair.
"No problem," I say evenly. I put my hand on his shoulder, intending a gesture of reassurance. "The parameters never start with a space."
It is just as I hoped. His despair vanishes. He becomes electric, turns to the keyboard and begins to type at a rapid speed. Now he is gone from me. He is disappearing into the code -- now that he knows it will work, now that I have reassured him that, in our universe, the one we created together, space can indeed be forever and reliably numeric.
The connection, the shared thought-stream, is cut. It has all the frustration of being abandoned by a lover just before climax. I know this is not physical love. He is too young, he works for me; he's a man and I've been tending toward women; in any case, he's too prim and business-schooled for my tastes. I know this sensation is not real attraction: it is only the spillover, the excess charge, of the mind back into the abandoned body. Only. Ha. This is another real-world thing that does not matter. My entire self wants to melt into this brilliant, electric being who has shared his mind with me for twenty seconds.
Restless, I go into the next room where Danny is slouched at his keyboard. The big, wire-haired dog growls at me. Danny looks up, scowls like his dog, then goes back to typing. I am the designer of this system, his boss on this project. But he's not even trying to hide his contempt. Normal programmer, I think. He has 15 windows full of code open on his desktop. He has overpopulated his eyes, thoughts, imagination. He is drowning in bugs and I know I could help him, but he wants me dead just at the moment. I am the last-straw irritant. Talking: Shit! What the hell is wrong with me? Why would I want to talk to him? Can't I see that his stack is overflowing?
"Joel may have the overlapping controls working," I say.
"Oh, yeah?" He doesn't look up.
"He's been using me as a programming dummy," I say. "Do you want to talk me through the navigation errors?" Navigation errors: bad. You click to go somewhere but get somewhere else. Very, very bad.
"What?" He pretends not to hear me.
"Navigation errors. How are they?"
"I'm working on them." Huge, hateful scowl. Contempt that one human being should not express to another under any circumstances. Hostility that should kill me, if I were not used to it, familiar with it, practiced in receiving it. Besides, we are at that place. I know that this hateful programmer is all I have between me and the navigation bug. "I'll come back later," I say.
Later: how much later can it get? Daylight can't be far off now. This small shoal of pre-installation madness is washing away even as I wander back down the hall to Joel.
"Yes! It's working!" says Joel, hearing my approach.
He looks up at me. "You were right," he says. The ultimate one programmer can say to another, the accolade given so rarely as to be almost unknown in our species. He looks right at me as he says it: "You were right. As always."
This is beyond rare. Right: the thing a programmer desires above, beyond all. As always: unspeakable, incalculable gift.
"I could not have been right without you," I say. This is true beyond question. "I only opened the door. You figured out how to go through."
I immediately see a certain perfume advertisement: A man holding a violin embraces a woman at a piano. I want to be that ad. I want efficacies of reality to vanish, and I want to be the man with violin, my programmer to be the woman at the piano. As in the ad, I want the teacher to interrupt the lesson and embrace the student. I want the rules to be broken. Tabu. That is the name of the perfume. I want to do what is taboo. I am the boss, the senior, the employer, the person in charge. So I must not touch him. It is all taboo. Still --
Danny appears in the doorway.
"The navigation bug is fixed. I'm going home."
"I'll test it --"
It is sometime in the early morning. Joel and I are not sure if the night guard is still on duty. If we leave, we may not get back up the elevator. We leave anyway.
We find ourselves on the street in a light drizzle. He has on a raincoat, one that he usually wears over his too-prim, too-straight, good-biz-school suits. I have on a second-hand-store leather bomber jacket, black beret, boots. Someone walking by might wonder what we were doing together at this still-dark hour of the morning.
"Goodnight," I say. We're still charged with thought energy. I don't dare extend my hand to shake his.
"Goodnight, " he says.
We stand awkwardly for two beats more. "This will sound strange," he says, "but I hope I don't see you tomorrow."
We stare at each other, still drifting in the wake of our shared mind-stream. I know exactly what he means. We will only see each other tomorrow if I find a really bad bug.
"Not strange at all," I say, "I hope I don't see you either."
"THE OUTWARD MANIFESTATION OF THE MESSINESS OF HUMAN THOUGHT"
The project begins in the programmer's mind with the beauty of a crystal. I remember the feel of a system at the early stages of programming, when the knowledge I am to represent in code seems lovely in its structuredness. For a time, the world is a calm, mathematical place. Human and machine seem attuned to a cut-diamond-like state of grace. Once in my life I tried methamphetamine: That speed high is the only state that approximates the feel of a project at its inception. Yes, I understand. Yes, it can be done. Yes, how straightforward. Oh yes. I see.
Then something happens. As the months of coding go on, the irregularities of human thinking start to emerge. You write some code, and suddenly there are dark, unspecified areas. All the pages of careful design documents, and still, between the sentences, something is missing. Human thinking can skip over a great deal, leap over small misunderstandings, can contain ifs and buts in untroubled corners of the mind. But the machine has no corners. Despite all the attempts to see the computer as a brain, the machine has no foreground or background. It can be programmed to behave as if it were working with uncertainty, but -- underneath, at the code, at the circuits -- it cannot simultaneously do something and withhold for later something that remains unknown. In the painstaking working out of the specification, line by code line, the programmer confronts an awful, inevitable truth: the ways of human and machine understanding are disjunct.
Now begins a process of frustration. The programmer goes back to the analysts with questions, the analysts to the users, the users to their managers, the managers back to the analysts, the analysts to the programmers. It turns out that some things are just not understood. No one knows the answers to some questions. Or worse, there are too many answers. A long list of exceptional situations is revealed, things that occur very rarely but that occur all the same. Should these be programmed? Yes, of course. How else will the system do the work human beings need to accomplish? Details and exceptions accumulate. Soon the beautiful crystal must be recut. This lovely edge and that are lost. What began in a state of grace soon reveals itself to be a jumble. The human mind, as it turns out, is messy.
Gone is the calm, mathematical world. The clear, clean methedrine high is over. The whole endeavor has become a struggle against disorder. A battle of wills. A testing of endurance. Requirements muddle up; changes are needed immediately. Meanwhile, no one has changed the system deadline. The programmer, who needs clarity, who must talk all day to a machine that demands declarations, hunkers down into a low-grade annoyance. It is here that the stereotype of the programmer, sitting in a dim room, growling from behind Coke cans, has its origins. The disorder of the desk, the floor; the yellow post-it notes everywhere; the white boards covered with scrawl: all this is the outward manifestation of the messiness of human thought. The messiness cannot go into the program; it piles up around the programmer.
Soon the programmer has no choice but to retreat into some private interior space, closer to the machine, where things can be accomplished. The machine begins to seem friendlier than the analysts, the users, the managers. The real-world reflection of the program -- who cares anymore? Guide an X-ray machine or target a missile; print a budget or a dossier; run a city subway or a disk-drive read/write arm: it all begins to blur. The system has crossed the membrane -- the great filter of logic, instruction by instruction -- where it has been cleansed of its linkages to actual human life.
The goal now is not whatever all the analysts first set out to do; the goal becomes the creation of the system itself. Any ethics or morals or second thoughts, any questions or muddles or exceptions, all dissolve into a junky Nike-mind: Just do it. If I just sit here and code, you think, I can make something run. When the humans come back to talk changes, I can just run the program. Show them: Here. Look at this. See? This is not just talk. This runs. Whatever you might say, whatever the consequences, all you have are words and what I have is this, this thing I've built, this operational system. Talk all you want, but this thing here: it works.
SALON | Oct. 9, 1997
Ellen Ullman is a software engineer who lives in San Francisco and writes about her profession.
Sliced off by the cutting edge: It's impossible for programmers to keep up with every trend even when they're eager and willing. What happens when they despair? Excerpt from "Close to the Machine."
By Ellen Ullman Oct. 16, 1997
IT'S IMPOSSIBLE FOR SOFTWARE ENGINEERS TO KEEP UP WITH
EVERY NEW TECHNO-TREND EVEN WHEN THEY'RE EAGER AND
WILLING. BUT WHAT HAPPENS WHEN THEY START TO DESPAIR?
This is the second of two excerpts in Salon 21st from Ellen Ullman's new book, "Close to the Machine: Technophilia and its Discontents" (City Lights Books, $21.95, 189 pages), an autobiographical exploration of the lives and minds of software engineers.
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. Still, I didn't expect it so soon. And not there: not at the AIDS project I'd been developing, where I fancied myself the very deliverer of high technology to the masses.
It happened in the way of all true-life humiliations: when you think you're better than the people around you. I had decided to leave the project; I agreed to help find another consultant, train another team. There I was, finding my own replacement. I called a woman I thought was capable, experienced -- and my junior. I thought I was doing her a favor; I thought she should be grateful.
She arrived with an entourage of eight, a group she had described on the telephone as "Internet heavy-hitters from Palo Alto." They were all in their early 30s. The men had excellent briefcases, wore beautiful suits, and each breast pocket bulged ever so slightly with what was later revealed to be a tiny, exquisite cellular phone. One young man was so blonde, so pale-eyed, so perfectly white, he seemed to have stepped out of a propaganda film for National Socialism. Next to him was a woman with blonde frosted hair, chunky real-gold bracelets, red nails, and a short skirt, whom I took for a marketing type; she turned out to be in charge of "physical network configuration." This group strutted in with all the fresh-faced drive of techno-capitalism, took their seats beneath the AIDS prevention posters ("Warriors wear shields with men and women!" "I take this condom everywhere I bring my penis!"), and began their sales presentation.
They were pushing an intranet. This is a system using all the tools of the Internet -- Web browser, net server -- but on a private network. It is all the rage, it is cool, it is what everyone is talking about. It is the future and, as the woman leading the group made clear, what I have been doing is the past. "An old-style enterprise system" is what she called the application as I had built it, "a classic."
My client was immediately awed by their wealth, stunned silent by their self-assurance. The last interviewee had been a nervous man in an ill-fitting suit, shirt washed but not quite ironed, collar crumpled over shiny polyester tie. Now here came these smooth new visitors, with their "physical network configuration" specialist, their security expert, their application designer, and their "technology paradigm." And they came with an attitude -- the AIDS project would be lucky to have them.
It was not only their youth and high-IQ arrogance that bothered me. It wasn't just their unbelievable condescension ("For your edification, ma'am," said one slouch-suited young man by way of beginning an answer to one of my questions). No, this was common enough. I'd seen it all before, everywhere, and I'd see it again in the next software engineer I'd meet. What bothered me was just that: the ordinariness of it. From the hostile scowl of my own programmer to the hard-driving egos of these "Internet heavy-hitters": normal as pie. There they were on the cutting edge of our profession, and their arrogance was as natural as breathing. And in those slow moments while their vision of the future application was sketched across the white boards -- intranet, Internet, cool, hip, and happening -- I knew I had utterly and completely lost that arrogance in myself.
I missed it. Suddenly and inexplicably, I wanted my arrogance back. I wanted to go back to the time when I thought that, if I tinkered a bit, I could make anything work. That I could learn anything, in no time, and be good at it. The arrogance is a job requirement. It is the confidence-builder that lets you keep walking toward the thin cutting edge. It's what lets you forget that your knowledge will be old in a year, you've never seen this new technology before, you have only a dim understanding of what you're doing, but -- hey, this is fun -- and who cares since you'll figure it all out somehow.
But the voice that came out of me was not having fun.
"These intranet tools aren't proven," I found myself saying. "They're all release 1.0 -- if that. Most are in beta test. And how long have you been doing this? What -- under a year? Exactly how many intranets have you implemented successfully?"
My objections were real. The whole idea wasn't a year old. The tools weren't proven. New versions of everything were being released almost as we spoke. And these heavy-hitters had maybe done one complete intranet job before this -- maybe. But in the past none of this would have bothered me. I would have seen it as part of the usual engineering trade-offs, get something, give up something else. And the lure of the new would have been irresistible: the next cover to take off, the next black box to open.
But now, no. I didn't want to take off any covers. I didn't want to confront any more unknowns. I simply felt exhausted. I didn't want to learn the intranet, I wanted it to be a bad idea, and I wanted it all just to go away. "And what about network traffic?" I asked. "Won't this generate a lot of network traffic? Aren't you optimizing for the wrong resource? I mean, memory and disk on the desktop are cheap, but the network bandwidth is still scarce and expensive."
More good objections, more justifications for exhaustion.
"And intranets are good when the content changes frequently -- catalogs, news, that kind of stuff. This is a stable application. The dataset won't change but once a year."
Oh, Ellen, I was thinking, What a great fake you are. I was thinking this because, even as I was raising such excellent issues, I knew it was all beside the point. What I was really thinking was: I have never written an intranet program in my life, I have never hacked on one, I have never even seen one. What I was really feeling was panic.
I'd seen other old programmers act like this, get obstructionist and hostile in the face of their new-found obsolescence, and there I was, practically growing an old guy's gut on the spot. But the role had a certain momentum, and once I'd stepped on the path of the old programmer, there seemed to be no way back. "And what happens after you leave?" I asked. "There just aren't that many intranet experts out there. And they're expensive. Do you really think this technology is appropriate for this client?"
"Well," answered the woman I'd invited, the one I'd thought of as my junior, the one I was doing a favor, "you know, there are the usual engineering trade-offs."
Engineering trade-offs. Right answer. Just what I would have said once.
"And besides," said the woman surrounded by her Internet heavy-hitters, "like it or not, this is what will be happening in the future."
The future. Right again. The new: irresistible, like it or not.
But I didn't like it. I was parting ways with it. And exactly at that moment, I had a glimpse of the great, elusive cutting edge of technology. I was surprised to see that it looked like a giant cosmic Frisbee. It was yellow, rotating at a great rate, and was slicing off into the universe, away from me.
OLD PROGRAMMING LANGUAGES ARE LIKE OLD LOVERS
I learned to program a computer in 1971; my first programming job came in 1978. Since then, I have taught myself six higher-level programming languages, three assemblers, two data-retrieval languages, eight job-processing languages, seventeen scripting languages, ten types of macros, two object-definition languages, sixty-eight programming-library interfaces, five varieties of networks, and eight operating environments -- fifteen, if you cross-multiply the distinct combinations of operating systems and networks. I don't think this makes me particularly unusual. Given the rate of change in computing, anyone who's been around for a while could probably make a list like this.
This process of remembering technologies is a little like trying to remember all your lovers: you have to root around in the past and wonder, Let's see. Have I missed anybody? In some ways, my personal life has made me uniquely suited to the technical life. I'm a dedicated serial monogamist -- long periods of intense engagement punctuated by times of great restlessness and searching. As hard as this may be on the emotions, it is a good profile for technology.
I've managed to stay in a perpetual state of learning only by maintaining what I think of as a posture of ignorant humility. This humility is as mandatory as arrogance. Knowing an IBM mainframe -- knowing it as you would a person, with all its good qualities and deficiencies, knowledge gained in years of slow anxious probing -- is no use at all when you sit down for the first time in front of a UNIX machine. It is sobering to be a senior programmer and not know how to log on.
There is only one way to deal with this humiliation: bow your head, let go of the idea that you know anything, and ask politely of this new machine, "How do you wish to be operated?" If you accept your ignorance, if you really admit to yourself that everything you know is now useless, the new machine will be good to you and tell you: here is how to operate me.
Once it tells you, your single days are over. You are involved again. Now you can be arrogant again. Now you must be arrogant: you must believe you can come to know this new place as well as the old -- no, better. You must now dedicate yourself to that deep slow probing, that patience and frustration, the anxious intimacy of a new technical relationship. You must give yourself over wholly to this: you must believe this is your last lover.
I have known programmers who managed to stay with one or two operating systems their entire careers -- solid married folks, if you will. But, sorry to say, our world has very little use for them. Learn it, do it, learn another: that's the best way. UNIX programmers used to scoff at COBOL drones, stuck year by year in the wasteland of corporate mainframes. Then, just last year, UNIX became old-fashioned, Windows NT is now the new environment, and it's time to move on again. Don't get comfortable, don't get too attached, don't get married. Fidelity in technology is not even desirable. Loyalty to one system is career-death. Is it any wonder that programmers make such good social libertarians?
Every Monday morning, three trade weeklies come sliding through my mail slot. I've come to dread Mondays, not for the return to work but for these fat loads of newness piled on the floor waiting for me. I cannot possibly read all those pages. But then again, I absolutely must know what's in them. Somewhere in that pile is what I must know and what I must forget. Somewhere, if I can only see it, is the outline of the future.
Once a year, I renew my subscription to the Microsoft Professional Developer Network. And so an inundation of CD-ROMs continues. Quarterly, seasonally, monthly, whenever -- with an odd and relentless periodicity -- UPS shows up at my door with a new stack of disks. New versions of operating systems, libraries, tools -- everything you need to know to keep pace with Microsoft. The disks are barely loaded before I turn around and UPS is back again: a new stack of disks, another load of newness.
Every month come the hardware and software catalogs: the Black Box networking book, five hundred pages of black-housed components turned around to show the back panel; PCs Compleat, with its luscious just-out laptops; and my favorite, the Programmer's Paradise, on the cover a cartoon guy in wild bathing trunks sitting under a palm tree. He is all alone on a tiny desert island but he is happy: he is surrounded by boxes of the latest programming tools.
Then there is the Microsoft Systems Journal, a monthly that evangelizes the Microsoft way while handing out free code samples. The Economist, to remind myself how my libertarian colleagues see the world. Upside, Wired, The Red Herring: the People magazines of technology. The daily Times and Wall Street Journal. And then, as if all this periodical literature were not enough, as if I weren't already drowning in information -- here comes the Web. Suddenly, monthly updates are unthinkable, weekly stories laughable, daily postings almost passé. "If you aren't updating three times a day, you're not realizing the potential of the medium," said one pundit, complaining about an on-line journal that was refreshing its content -- shocking! -- only once a day.
There was a time when all this newness was exhilarating. I would pore over the trade weeklies, tearing out pages, saving the clips in great messy piles. I ate my meals reading catalogs. I pestered nice young men taking orders on the other end of 800 phone lines; I learned their names and they mine. A manual for a new programming tool would call out to me like a fussy, rustling baby from inside its wrapping.
What has happened to me that I just feel tired? The weeklies come, and I barely flip the pages before throwing them on the recycle pile. The new catalogs come and I just put them on the shelf. The invoice for the Professional Developer Subscription just came from Microsoft: I'm thinking of doing the unthinkable and not renewing.
I'm watching the great, spinning, cutting edge slice away from me -- and I'm just watching. I'm almost fascinated by my own self-destructiveness. I know the longer I do nothing, the harder it will be to get back. Technologic time is accelerated, like the lives of very large dogs: six months of inattention might as well be years. Yet I'm doing nothing anyway. For the first time in nineteen years, the new has no hold on me. This terrifies me. It also makes me feel buoyant and light.
SALON | Oct. 16, 1997
Ellen Ullman is a software engineer who lives in San Francisco and writes about her profession.
Elegance and entropy: An interview with Ellen Ullman.
By Scott Rosenberg
Oct. 9, 1997
By Scott Rosenberg
Like thousands of software engineers, Ellen Ullman writes code. Unlike her colleagues, she also writes about what it's like to write code. In a 1995 essay titled "Out of Time: Reflections on the Programming Life," included in the collection "Resisting the Virtual Life," Ullman got inside the heads of professional programmers -- and introduced a lot of readers to an intricate new world. "The programming life," as Ullman depicts it, is a constant tug of war between the computer's demand for exactitude and the entropic chaos of real life.
In her new book, "Close to the Machine," which is being excerpted in Salon 21st this week and next, she tells autobiographical stories from inside today's software-engineering beast -- everything from the trials of programming a Web service for AIDS patients and clinics to a romance with a shaggy rebel cryptographer who wants to finance his anonymous global banking system by running an offshore porn server.
I talked with Ullman in the brick-lined downtown San Francisco loft she shares with a sleek cat named Sadie and four well-hidden computers.