Friday, April 16, 1993

Elegance and Entropy

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.

In "Close to the Machine" you tell the tale of a boss at a small
company whose new computer system lets him monitor the work of a loyal
secretary -- something he'd never before thought necessary. You call
that "the system infecting the user." But a lot of people view the
computer as a neutral tool.

Tools are not neutral. The computer is not a neutral tool. A hammer
may or may not be a neutral tool: you know, smash a skull or build a
house. But we use a hammer to be a hammer. A computer is a
general-purpose machine with which we engage to do some of our deepest
thinking and analyzing. This tool brings with it assumptions about
structuredness, about defined interfaces being better. Computers abhor
error.

I hate the new word processors that want to tell you, as you're
typing, that you made a mistake. I have to turn off all that crap.
It's like, shut up -- I'm thinking now. I will worry about that sort
of error later. I'm a human being. I can still read this, even though
it's wrong. You stupid machine, the fact that you can't is irrelevant
to me. Abhorring error is not necessarily positive.

It's good to forgive error.

And we learn through error. We're sense-making creatures who make
sense out of chaos, out of error. We zoom around in a sea of
half-understood and half-known things. And so it affects us to have
more and more of our life involved with very authoritarian,
error-unforgiving tools. I think people who work around computers get
more and more impatient. Programmers go into meetings and they hate
meetings. If someone meanders around and doesn't get to the point,
they'll say, what's your point!?! I think the more time you spend
around computers, the more you get impatient with other people,
impatient with their errors, you get impatient with your own errors.

Machines are also wonderful. I enjoy sitting there for hours, and
there's a reason it's so deeply engaging. It's very satisfying to us
to have this thing cycling back at you and paying attention to you,
not interrupting you. But it's not an unalloyed good -- that's my
point. It's changing our way of life deeply, like the automobile did,
and in ways we don't yet understand.

When people talk about computers, they fall into two groups: the true
believers -- you know, technology will save us, new human beings are
being created. For me, as an ex-Communist, let me tell you, when
people start talking about a new human being, I get really scared.
Please! We're having trouble enough with this one! And on the other
hand, other people think computers are horrible and are ruining our
lives. I'm somewhere in the middle. I mean, we can't live without this
any more. Try to imagine modern banking. Try to imagine your life in
the developed world without computers. Not possible.

There's a lot of romanticism, in places like Wired magazine, about
digital technology evolving its own messy, chaotic systems. In "Close
to the Machine," you lean more to the view that computer systems are
rigid and pristine.

From the standpoint of what one engineer can handle, yes. You can't
program outside of the box, and things that happen that were not
anticipated by the programmer are called design flaws or bugs. A bug
is something that a programmer is supposed to do but doesn't, and a
design flaw is something that the programmer doesn't even think about.

So it's a very beautifully structured world. In computing, when
something works, engineers talk about elegant software. So in one
sense, we're talking about something very structured and reductive.
And in another sense, we're really not, you're talking about elegance,
and a notion of beauty.

What makes a piece of software code elegant?

I'll try to speak by analogy. Physicists right now are not happy about
their model of the world because it seems too complicated, there are
too many exceptions. Part of the notion of elegance is that it's
compact. And that out of something very simple a great deal of
complexity can grow -- that's why the notion of fractals is very
appealing. You take a very, very simple idea and it enables tremendous
complexity to happen.

So from the standpoint of a small group of engineers, you're striving
for something that's structured and lovely in its structuredness. I
don't want to make too much of this, because with most engineers
there's a great deal of ego, you want to write the most lines of code,
more than anybody else, there's a kind of macho.

Yet the more elegant program does the same thing in fewer lines.

When you're around really serious professional programmers, this code
jockey stuff really falls away, and there is a recognition that the
best programmers spend a lot of time thinking first, and working out
the algorithms on paper or in their heads, at a white board, walking.
You dream about it, you work it out -- you don't just sit there and
pump out code. I've worked with a lot of people who pumped out code,
and it's frightening. Two weeks later, you ask them about it, and it's
like it never happened to them.

So the motive of a true program is a certain compact beauty and
elegance and structuredness. But the reality of programming is that
programs get old and they accumulate code over the years -- that's the
only word I can use to describe it, they accumulate modifications. So
old programs, after they've been in use 10 or 15 years, no one person
understands them. And there is a kind of madness in dealing with this.

And with the new systems we're creating, even the ones that are
running now, there's a tremendous amount of complexity. Right now, if
you talk to people who try to run real-world systems, it is a struggle
against entropy. They're always coming apart. And people don't really
talk about that part much. The real-world experience of system
managers is a kind of permanent state of emergency. Whereas
programmers are kind of detached for a time and go into this floating
space, networking people live in this perpetual now.

It's the world of pagers.

They've got things that buzz them. They're ready to be gone in a
minute. To try to keep the network running is very much to be at the
edge of that entropy where things really don't want to keep running.
There's nothing smooth, there's nothing elegant. It's ugly, full of
patches, let's try this, let's try that -- very tinker-y.

That's such a different picture from the rosy vision of the Net as
this indestructible, perfectly designed organism.

One of the things I'm really glad about the success of the Web is that
more people now are being exposed to the true reality of working on a
network. Things get slowed up. It doesn't answer you; it's down. How
often can't you get to your e-mail?

I couldn't send e-mail to you to tell you I'd be late for this interview.

Some little server out there, your SMTP server, it's busy, it's gone,
it's not happy. Exactly. And this is a permanent state of affairs. I
don't see anything sinister or horrible about this, but it is more and
more complex.

The main reason I wrote "Close to the Machine" was not just to talk
about my life. Of course, everyone just wants to talk about
themselves. But I have this feeling that imbedded in this technology
is an implicit way of life. And that we programmers who are creating
it are imbedding our way of being in it.

Look at the obvious: groupware. That doesn't mean software that helps
people get together and have a meeting. It means, help people have
access to each other when they're far apart, so they don't have to get
into a room, so they don't have to have a meeting. They don't have to
speak directly. That is a programmer's idea of heaven. You can have a
machine interface that takes care of human interaction. And a defined
interface. Programmers like defined interfaces between things.
Software, by its nature, creates defined interfaces. It homogenizes,
of necessity. And some of that's just plain damn useful. I'm happy
when I go to the bank and stick a card in and they give me a wad of
money. That's great.

For someone who is so immersed in the world of technology, you take an
unusually critical view of the Net.

The Net is represented as this very democratic tool because everyone's
a potential publisher. And to an extent that's true. However, it is
not so easy to put a Web site up. Technically, it's getting more and
more difficult, depending on what you want to do. It's not as if the
average person wants to put up a Web site.

The main thing that I notice is the distinction between something like
a word processor and a spreadsheet, and a Web browser. From the user's
point of view there's a completely different existential stance. The
spreadsheet and the word processor are pure context -- they just
provide a structure in which human beings can express their knowledge.
And it's presumed that the information resides in the person. These
are tools that help you express, analyze and explore very complex
things -- things that you are presumed already to know. The
spreadsheet can be very simple, where essentially you're just typing
things in and it helps you to format them in columns. Or it can be a
tool for really fantastically complicated analysis. You can grow with
it, your information grows with it -- it's the ideal human-computer
tool.

With a Web browser, this situation is completely reversed. The Web is
all content with very limited context. With the Web, all the
information is on the system somewhere -- it's not even on your
computer. It's out there -- it belongs to the system. More and more
now even the programs don't reside with you -- that's the notion of
the thin client, the NetPC and Java.

So the whole sphere of control has shifted from the human being, the
individual sitting there trying to figure out something, to using
stuff that the system owns and looking for things that are on the
system. Everyone starts at the same level and pretty much stays there
in a permanent state of babyhood. Click. Forward. Back. Unless you get
into publishing, which is a huge leap that most people won't make.

But the Net is not one central system, it's a million systems. That
creates a lot of the confusion -- but the advantage is that there's
such a vast and diverse variety of material available.

My criticism, I suppose, is not of the Net but of the browser as an
interface, as a human tool. I'm looking at it as a piece of software
that I have to use. This is the only way I can interact with all this
stuff. Some of what's out there may be good, some of it may not be.
But I don't have the tools to analyze it. I can print it -- that's it.
I can search for occurrences of a certain word. I can form a link to
it. I can go forward and back. Am I missing anything here?

What do you mean by "analyzing" a Web page?

At this point, when you put something up on the Web, you don't have to
say who put it up there, you don't have to say where it really lives,
the author could be anyone. Which is supposedly its freedom. But as a
user, I'm essentially in a position where everyone can represent
themselves to me however they wish. I don't know who I'm talking to. I
don't know if this is something that will lead to interesting
conversation and worthwhile information -- or if it's a loony toon and
a waste of my time.

I'm not a big control freak, I don't really know who would administer
this or how it would be. But I would just like to see that a Web page
had certain parameters that are required: where it is and whose it is.
I would like to have some way in which I could have some notion of who
I'm talking to. A digital signature on the other end.

That's feasible today.

Yeah, but the ethos of the Net is that everything should be free,
everyone should do whatever they want -- you're creating this
marketplace of ideas I can pick and choose in. But if I don't have the
tools to pick and choose and I don't know who I'm talking to,
essentially I'm walking into a room and I have blindfolds on.

The political ethos of the Net, its extreme libertarianism -- that's
another thing that comes out of the programming social world. You
know, whoever's the most technically able can do whatever they want.
It's really not "everyone can do whatever they want"; it's that the
more technically able you are, the more you should be able to do. And
that's the way it is online to me. It is a kind of meritocracy in a
very narrow sense.

How did you first become a programmer?

I've had one foot in the world that speaks English and one foot in the
world of technology almost my whole life. I majored in English,
minored in biology. The minute I got out of college, I worked as a
videographer. A side note: Those were the days when we thought that
giving everybody a Portapak -- a portable video machine -- would
change the world. So I'd seen one technical revolution. And it made me
very skeptical about the idea that everyone having a PC would change
the world.

I was doing some animation stuff, and I saw people doing
computer-aided animation and found it fascinating. I asked them how
they did it, and they said, well, do you know Fortran? I wasn't
thinking of becoming a professional programmer. This was 1971, 1972.
The state of the art was primitive, and I didn't become a programmer
at that point. I did photography for a living; I was a media
technician. I moved out here [to the Bay Area], pumped gas, answered
telephones for a living -- I mean, talk about professions that have
been technologically made obsolete. I liked being a switchboard
operator, it passed the time very nicely.

That's a different way of being close to a machine.

The machine is very simple -- it's the people who don't cooperate.
Anyway, I did socially useful media for women's groups, women's radio
programs, photography shows. I came of age doing media at a time when
we thought it should be imbedded in social action. And then I got more
involved in political work, in lesbian politics and women's politics,
and then eventually got tired of the splits -- people were always
dividing. So I had some friends who had joined a Communist formation,
and it was the time to sort of put up or shut up. I joined up. Of
course, I did technical and media stuff for them -- I was responsible
for their graphic-arts darkroom and laying out their newspaper. The
inevitable part of my life is to be involved with machines.

In "Close to the Machine" you talk about the parallels between being a
programmer and being a Communist.

It's a very mechanistic way of thinking, very intolerant of error --
and when things got confusing we tried to move closer to the machine,
we tried to block out notions of human complexity. You tried to turn
yourself into this machine. We were supposed to be proud of being
cogs, and really suppressing and banishing all that messy, wet
chemical life that we're a part of.

Now, supposedly, only a cadre was supposed to go through this; the
rest of humanity wasn't. Eventually, you realize, if the world is
being remade by these people who've suppressed all these other parts
of themselves, when they're done with all their decades and decades of
struggle, will they remember how to be a complicated human being? That
can happen to you if you do programming. So I quit.

I actually went through a very serious and very damaging expulsion.
And I became a professional programmer because of that expulsion. I
say in the book, I was promoted very rapidly because my employer was
amazed at my ability to work hundreds of hours a week without
complaining. But I had been rather damaged by that year. I spent
months just sitting there working symbolic logic proofs. That was all
I could do. It was the only way I could calm myself down and try to
get my brain back.

Programming was both a symptom of how crazy I was and also a great
solace. So then I got a job, and I was promoted in a minute, and they
wanted to make me a product manager, I was a product manager for a
minute, then I said no, I can't stand it, I want to program. I was a
programmer, then I was put in charge of designing a new system, then
they wanted to make me a manager again.

This has been the history of my life. Eventually I became a
consultant, because I don't want to manage programmers.

To what extent are programming languages actually languages? Can you
look at someone's code and tell what kind of person wrote this?

I can tell what kind of programmer they were, but not what type of
person they were. Code is not expressive in that way. It doesn't allow
for enough variation. It must conform to very strict rules. But
programmers have styles, they definitely have styles. Some people
write very compact code. Compact and elegant. Also, does one comment
the code, and how generous are those comments? You can get a sense of
someone's generosity. Are they writing the code with the knowledge
that someone else has to come by here, or not? Good code is written
with the idea that I'll be long gone and five years from now it, or
some remnant, will still be running, and I don't want someone just
hacking it to pieces. You sort of protect your code, by leaving clear
comments.

Another rule of thumb is that all programmers hate whoever came before
them. You can't help it. There's a real distinction in programming
between new development people and people who work on other people's
code. I had this space of five years where I did only new development
for systems that had no users. Programming heaven! But very few
programmers get that. It's a privilege. The places you have to express
yourself are in the algorithm design, if you're in new development --
and that is an art. But not many people are programming at that stage.

So if you ask me, it's not a language. We can use English to invent
poetry, to try to express things that are very hard to express. In
programming you really can't. Finally, a computer program has only one
meaning: what it does. It isn't a text for an academic to read. Its
entire meaning is its function.
SALON | Oct. 9, 1997
http://archive.salon.com/21st/feature/1997/10/09interview.html