Disappearing into the code

A deadline brings programmers to the place of no shame. The body melts away, the mind races. Only one thing matters: Can you fix that demon bug? First of two excerpts from Ullman's "Close to the Machine."

Published October 9, 1997 9:03AM (EDT)

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's fixed."

He leaves.

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 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.

By Ellen Ullman

Ellen Ullman is a software engineer. She is the author of "Close to the Machine: Technophilia and its Discontents."

MORE FROM Ellen Ullman

Related Topics ------------------------------------------