About Me

Friday, April 16, 1993

Elegance and Entropy

BY SCOTT ROSENBERG | Like thousands of software engineers, EllenUllman writes code. Unlike her colleagues, she also writes about whatit'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 ofprofessional programmers -- and introduced a lot of readers to anintricate new world. "The programming life," as Ullman depicts it, isa constant tug of war between the computer's demand for exactitude andthe entropic chaos of real life.

In her new book, "Close to the Machine," which is being excerpted inSalon 21st this week and next, she tells autobiographical stories frominside today's software-engineering beast -- everything from thetrials of programming a Web service for AIDS patients and clinics to aromance with a shaggy rebel cryptographer who wants to finance hisanonymous global banking system by running an offshore porn server.

I talked with Ullman in the brick-lined downtown San Francisco loftshe shares with a sleek cat named Sadie and four well-hiddencomputers.

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

Tools are not neutral. The computer is not a neutral tool. A hammermay or may not be a neutral tool: you know, smash a skull or build ahouse. But we use a hammer to be a hammer. A computer is ageneral-purpose machine with which we engage to do some of our deepestthinking and analyzing. This tool brings with it assumptions aboutstructuredness, about defined interfaces being better. Computers abhorerror.

I hate the new word processors that want to tell you, as you'retyping, 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 sortof error later. I'm a human being. I can still read this, even thoughit's wrong. You stupid machine, the fact that you can't is irrelevantto me. Abhorring error is not necessarily positive.

It's good to forgive error.

And we learn through error. We're sense-making creatures who makesense out of chaos, out of error. We zoom around in a sea ofhalf-understood and half-known things. And so it affects us to havemore and more of our life involved with very authoritarian,error-unforgiving tools. I think people who work around computers getmore and more impatient. Programmers go into meetings and they hatemeetings. If someone meanders around and doesn't get to the point,they'll say, what's your point!?! I think the more time you spendaround 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, andthere's a reason it's so deeply engaging. It's very satisfying to usto have this thing cycling back at you and paying attention to you,not interrupting you. But it's not an unalloyed good -- that's mypoint. 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 truebelievers -- you know, technology will save us, new human beings arebeing created. For me, as an ex-Communist, let me tell you, whenpeople start talking about a new human being, I get really scared.Please! We're having trouble enough with this one! And on the otherhand, other people think computers are horrible and are ruining ourlives. I'm somewhere in the middle. I mean, we can't live without thisany more. Try to imagine modern banking. Try to imagine your life inthe developed world without computers. Not possible.

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

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

So it's a very beautifully structured world. In computing, whensomething works, engineers talk about elegant software. So in onesense, 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 abouttheir model of the world because it seems too complicated, there aretoo many exceptions. Part of the notion of elegance is that it'scompact. And that out of something very simple a great deal ofcomplexity can grow -- that's why the notion of fractals is veryappealing. You take a very, very simple idea and it enables tremendouscomplexity to happen.

So from the standpoint of a small group of engineers, you're strivingfor something that's structured and lovely in its structuredness. Idon't want to make too much of this, because with most engineersthere'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 codejockey stuff really falls away, and there is a recognition that thebest programmers spend a lot of time thinking first, and working outthe 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 andpump 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'slike it never happened to them.

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

And with the new systems we're creating, even the ones that arerunning now, there's a tremendous amount of complexity. Right now, ifyou talk to people who try to run real-world systems, it is a struggleagainst entropy. They're always coming apart. And people don't reallytalk about that part much. The real-world experience of systemmanagers is a kind of permanent state of emergency. Whereasprogrammers are kind of detached for a time and go into this floatingspace, 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 aminute. To try to keep the network running is very much to be at theedge of that entropy where things really don't want to keep running.There's nothing smooth, there's nothing elegant. It's ugly, full ofpatches, let's try this, let's try that -- very tinker-y.

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

One of the things I'm really glad about the success of the Web is thatmore people now are being exposed to the true reality of working on anetwork. Things get slowed up. It doesn't answer you; it's down. Howoften 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. Idon't see anything sinister or horrible about this, but it is more andmore complex.

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

Look at the obvious: groupware. That doesn't mean software that helpspeople get together and have a meeting. It means, help people haveaccess to each other when they're far apart, so they don't have to getinto a room, so they don't have to have a meeting. They don't have tospeak directly. That is a programmer's idea of heaven. You can have amachine interface that takes care of human interaction. And a definedinterface. 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 happywhen I go to the bank and stick a card in and they give me a wad ofmoney. That's great.

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

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

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

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

So the whole sphere of control has shifted from the human being, theindividual sitting there trying to figure out something, to usingstuff that the system owns and looking for things that are on thesystem. Everyone starts at the same level and pretty much stays therein a permanent state of babyhood. Click. Forward. Back. Unless you getinto 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. Thatcreates a lot of the confusion -- but the advantage is that there'ssuch a vast and diverse variety of material available.

My criticism, I suppose, is not of the Net but of the browser as aninterface, as a human tool. I'm looking at it as a piece of softwarethat I have to use. This is the only way I can interact with all thisstuff. 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 toit. 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 tosay 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 auser, I'm essentially in a position where everyone can representthemselves to me however they wish. I don't know who I'm talking to. Idon't know if this is something that will lead to interestingconversation and worthwhile information -- or if it's a loony toon anda waste of my time.

I'm not a big control freak, I don't really know who would administerthis or how it would be. But I would just like to see that a Web pagehad 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 whoI'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 thismarketplace of ideas I can pick and choose in. But if I don't have thetools 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'sanother thing that comes out of the programming social world. Youknow, whoever's the most technically able can do whatever they want.It's really not "everyone can do whatever they want"; it's that themore technically able you are, the more you should be able to do. Andthat's the way it is online to me. It is a kind of meritocracy in avery narrow sense.

How did you first become a programmer?

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

I was doing some animation stuff, and I saw people doingcomputer-aided animation and found it fascinating. I asked them howthey did it, and they said, well, do you know Fortran? I wasn'tthinking of becoming a professional programmer. This was 1971, 1972.The state of the art was primitive, and I didn't become a programmerat that point. I did photography for a living; I was a mediatechnician. I moved out here [to the Bay Area], pumped gas, answeredtelephones for a living -- I mean, talk about professions that havebeen technologically made obsolete. I liked being a switchboardoperator, 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 radioprograms, photography shows. I came of age doing media at a time whenwe thought it should be imbedded in social action. And then I got moreinvolved in political work, in lesbian politics and women's politics,and then eventually got tired of the splits -- people were alwaysdividing. 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. Ofcourse, I did technical and media stuff for them -- I was responsiblefor their graphic-arts darkroom and laying out their newspaper. Theinevitable part of my life is to be involved with machines.

In "Close to the Machine" you talk about the parallels between being aprogrammer 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 turnyourself into this machine. We were supposed to be proud of beingcogs, and really suppressing and banishing all that messy, wetchemical life that we're a part of.

Now, supposedly, only a cadre was supposed to go through this; therest of humanity wasn't. Eventually, you realize, if the world isbeing remade by these people who've suppressed all these other partsof themselves, when they're done with all their decades and decades ofstruggle, will they remember how to be a complicated human being? Thatcan 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. Isay in the book, I was promoted very rapidly because my employer wasamazed at my ability to work hundreds of hours a week withoutcomplaining. But I had been rather damaged by that year. I spentmonths just sitting there working symbolic logic proofs. That was allI could do. It was the only way I could calm myself down and try toget my brain back.

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

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

To what extent are programming languages actually languages? Can youlook 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 ofperson they were. Code is not expressive in that way. It doesn't allowfor enough variation. It must conform to very strict rules. Butprogrammers have styles, they definitely have styles. Some peoplewrite very compact code. Compact and elegant. Also, does one commentthe code, and how generous are those comments? You can get a sense ofsomeone's generosity. Are they writing the code with the knowledgethat someone else has to come by here, or not? Good code is writtenwith the idea that I'll be long gone and five years from now it, orsome remnant, will still be running, and I don't want someone justhacking it to pieces. You sort of protect your code, by leaving clearcomments.

Another rule of thumb is that all programmers hate whoever came beforethem. You can't help it. There's a real distinction in programmingbetween new development people and people who work on other people'scode. I had this space of five years where I did only new developmentfor systems that had no users. Programming heaven! But very fewprogrammers get that. It's a privilege. The places you have to expressyourself 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 inventpoetry, to try to express things that are very hard to express. Inprogramming you really can't. Finally, a computer program has only onemeaning: what it does. It isn't a text for an academic to read. Itsentire meaning is its function.SALON | Oct. 9, 1997http://archive.salon.com/21st/feature/1997/10/09interview.html