21st: Elegance and Entropy

Ellen Ullman talks about what makes programmers tick.

Published October 9, 1997 7:00PM (EDT)

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.

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.


By Scott Rosenberg

Salon co-founder Scott Rosenberg is director of MediaBugs.org. He is the author of "Say Everything" and Dreaming in Code and blogs at Wordyard.com.

MORE FROM Scott Rosenberg


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