Up: Software Stories | [Related] «^» «T» |
Thursday, January 30, 2003
Getting Close to the Machine
By Paul Ford
A collection of quotes from a book by Ellen Ullman, prefaced by some good-natured technical meandering.
I just finished Ellen Ullman's Close to the Machine (City Lights Books, 1997). It's one of the best books ever written about computing, with the exception of Tracy Kidder's Soul of a New Machine, and certainly the most personal. Ullman's prose is lucid, and her narrative of romancing a cypherpunk, coding big applications, and trying to resolve her feelings concerning her father's death, are described with a sort in a tone that oscillates between involvement and detachment, between the real and virtual that anyone who uses computers seriously will find resonant. Much of Ullman's life, we find, happens in gray areas: she is partial, sexually, to women and men alike; she does not go to an office, but puts together teams, and when a project ends, she loses track of her employees. She does not feel she fits in when she meets the polished vice-presidents of banking firms, their lives uncomplicated and their daily paths oiled by wealth. Ullman is an outsider, not a resentful one, but a 46-year-old woman conscious of how she fits in with a larger social order, grateful for her comforts and safety, but aware that, while she is brilliant, funny, and attractive, her passions, her excitements, keep her out of the mainstream. For her, the logical space of the computer is not an alternative or a refuge, exactly, but a place where she does not have to explain herself, where external standards and judgements are irrelevant. The world is ambiguous, but the world inside a computer is neutral, pliable, full of wonders. With one mind, she explores them both.
She captures the passion of being inside a totally abstract space, exploring the strange point-and-click riff on Boolean logic that is the modern programming environment, the excitement of the moment when your mind and the computer's producedural methods are in perfect sync. But she does not neglect eating, sex, and death, and what's great about Ullman's book is that she is willing to enjoy the seductions of both worlds - programming is not simply escape for her, but excitement and passion, and her real life is substantive and meaty, albeit comfortable and privileged, as befits a senior software engineer in the mid-90s.
The book reminded of a moment from Steve McConnell's Code Complete (Microsoft Press), where McConnell comments on an Ed Yourdon quote:
If you haven't spent at least a month working on the same program - working 16 hours a day, dreaming about it during the remeaining 8 hours of restless sleep, working several nights straight through trying to elimate that “one last bug” from the program - then you haven't really witten a complicated computer program. And you may not have the sense that there is something exhilarating about programmings.
- Edward Yourdon
- Edward Yourdon
This lusty tribute to programming machismo is pure B.S. and an almost certain recipe for failure. Those all-night programming stints make you feel like the greatest programmer in the world, but the you have to spend several weeks correcting the defects you installed during your blaze of glory. By all means, get exited about programming. But learn how to handle the fireaarm before you shoot yourself in the foot (769).
McConnell is probably right, but Ullman is more on the side of Yourdon; her programming is a fever, one that requires careful methods and planning, but is consummated in bursts. Those late-night sessions, to her, are supremely erotic, charged, filled with pleasure. She burns something out of herself on those nights, discharges pent-up intellectual static, and the completion of a project under deadline is described in sensual terms, as a grand release, both of software and psychic energy.
After the deadline is met, Ullman's body is sensitized, and a programmer's hand on her arm works like the clapper on a bell, sets her ringing. It's a side of software development - of working, of problem solving - that we rarely see; the media prefers tales of titans who move armies of workers with single commands and make billions. But Ullman's story, for its attempt to get to a psychological truth, for its willingness to show how “work” and “life” are as muddy and overlapping as the differences between an OS based on a microkernel and a Virtual Machine, and for her willingness to describe the eros of computing, of logical problem solving - her story is more important than the story of a thousand pompous CEOs.
Now, Ullman's publisher is releasing a book called The Bug , loosely based on real experiences but heavily fictionalized, about a programmer's year-long search for a bug in a piece of software. As she finished the book, she was interviewed by the SF Gate:
SF Gate: Is there a connection between the acts of coding and of writing?
Ullman: No. Code is designed to work, to do something. It is rarely illuminating to read; it's not designed primarily for the human reader. Writing, on the other hand, is only sometimes narrowly concerned with communicating information. Most of the time (one hopes), writing is expressive. It carries connotation, emotion, nuance. Code functions; it doesn't suggest.
Ullman: No. Code is designed to work, to do something. It is rarely illuminating to read; it's not designed primarily for the human reader. Writing, on the other hand, is only sometimes narrowly concerned with communicating information. Most of the time (one hopes), writing is expressive. It carries connotation, emotion, nuance. Code functions; it doesn't suggest.
This seems a valid point - but later in the same interview, Ullman said:
The Bug has several code samples in it, and I found that to write even such short routines, I had to imagine the shape of the whole system they were part of. And, immediately, I slipped right back into the coder's mind-set, hours going by in a kind of ferocious anxious humming. It was hugely pleasurable; it was exhausting. I soon found I was using code to avoid writing - oh, I'll just fiddle with this little section here - and a whole day would go by without my having written a scene or a line of dialogue. So I had to put the code aside.
(Both from an interview by Amy Moon in SFGate.com, “Q&A: Ellen Ullman.”)
Which makes me wonder about her first point. Her coding, in the second quote, has narrative intentions, and she ended up taking a detour into developing an entire framework in order to validate her narrative. She sees it as a distraction, but I have to wonder if it wasn't an attempt to unify the two urges, the literary with the computer-logical. I know that I have these urges with Ftrain, a sudden flaring of excitement as I rewrite the XSLT code under the site and attempt to integrate Semantic Web ideas into the way the narrative is structured and organized, that excitement feeding into dozens of new ideas about what I can write (whether the result is any good or not is up to opinion). For me, the code and the content, all expressed in XML, are entirely intertwined, and one does feed into the other.
I think there are ways that code can be a kind of creative product, a medium unto itself, where the compromise between the desires of the human reader and the binary demands of the computer. Certainly there are systems, like SmallTalk/Squeak, with its “Active Essays,” where the boundary between code and media is very blurry, where they flow into one another, where a musical synthesizer or line of text is yet another object for manipulating. And languages like CSound exist which compile your programs not to machine code, but to WAV files - music. Most people do not have the skills to get inside these systems and play, but for those who choose to learn (it's nowhere as hard as programmers like to make out), these systems have their own pleasures; you appreciate the code and the product at once, just as you might appreciate a book's typography (think of Glas or a well-set book of poems) while you read the words therein.
There are technical, “programming” artifacts all over common media. Think of a book as a single string of data - a straight line of language from the opening sentence to the closing sentence, intended to create a reaction from its audience. This string made of words is punctuated with helpful symbols that have no innate meanings, but produce reactions in the reader (i.e. the period does not mean anything, but its pause can be meaningful in more ways than any word). The string is divided into arbitrary lengths called “pages”, which are in turn subdivided into “paragraphs” made up on “lines.” Creating one of these long strings is what we call “writing,” and making the book is “publishing,” except the two have been intertwined for centuries; the writer approximates the form of the book as she works, thinking in terms of arbitrary units - paragraphs, chapters, parts - which have only tenous analogue in our day to day experience of spoken language.
The algorithms for book design are enormously complex, filled with arcana and rules about golden sections, kerning, hyphenation, and the interplay between space and ink. (We do not see these things when we read, if the design has been done to serve its readers, because they are so normal as to be invisible; you must look for them, just as you must look for “plot” when you read a well-crafted novel; the process of abstraction is nearly invisible in the best work.) Design, algorithmic though it might be, is not seen as a science, but an art. And rightly so: good design is too complex to fully emulate on a computer. Even today, systems like TeX/LaTeX or Lout, programming languages for typesetting, strive to encode the typographer's art, automatically dividing the long linear string of text via a process of data-crunching, but, because these systems lack the human eye and the instinct for evenness and pattern of good designers, such systems are always short of success, and require intervention to make a great page.
These systems are good with algorithms (and beloved by many engineers and computer scientists), but poor with heuristics; they cannot guess or use rules of thumb, and while TeX is freely available for download, with legions of fans, the classically trained designers stick with systems like Quark, which simulate the artifacts of typesetting history (the page, the line, the bounding box) on the screen exactly, and leave the tweaking, the pursuit of perfection, the refined application of heuristics, to the designer herself. She can manipulate information on the screen with a mouse until satisfied that, yes, this is a book.
(It's no surprise that textual scholars - most notably Jerome McGann - have been continually interested in the Internet, in the possibilities of code as it relates to textuality. Among literary critics, it's the textual scholars who have looked at the raw materials of the text and how it changes reading experience.)
So, my point: I think the interplay between algorithms and aesthetics is more subtle than Ullman describes. When she says of code, “it is rarely illuminating to read; it's not designed primarily for the human reader,” she is talking about writing code for the transactional exchange of structured data over sockets, for instance - infrastructure, but I think there is coding that rubs up against the edges of what we call “media,” and that requires closer consideration.
Take for instance the Csound community, where algorithms for synthesizer routines are freely exchanged, pored over, edited, improved, and re-used. Or the POV-RAY community, where the same holds true not for music, but for 3D images. As more people write and share code, code not for managing databases or talking to credit card systems, but code for drawing things, making things, code for play, and as code environments remove the boundaries between code object and the things they represent, I think the lines will muddy. It is happening now with music, with art, with graphic design, with filmmaking, and, very slowly and tentatively, with writing. Writing is already being poured into new forms - not just web pages, but whole new systems for organizing narratives like those designed by Chris Crawford (who would have a fascinating conversation with Ullman, I bet) and Graham Nelson, both of whom have created environments for interactive fiction games, and both of whom are actively uncovering the way that writing, writing with the expectation of an audience, writing as a way of modeling the world, intersect and overlap with programming.
When someone 50 years from now asks about the relationship between writing and coding, the answer will be different, I think, than Ullman's, because writing will be seen not only as rendering lines of kerned text into pages of 50+ lines which fit into pages divided by golden sections, but will be a fundamental task related to dozens of creative activities, from designing “artificial personalities” and natural-language-generating news-reporting avatars, to scripting games. The book will not die, the written word will not vanish; I think that worrying over the history of forms is wasted time. But the book will have new friends in the media environment. There will still be engineering-style coding, coding as bridge-building, coding as science, but there will also be media programming, coding closer to, and perhaps indistinguishable, regular human discourse.
Phew. In any case, I didn't set out to write all of that - I just wanted to include some relevant quotes from Close to the Machine, moments when I think Ullman captured something new and intimate about working with technology. I will now do that, with no further commentary:
And maybe, when I think of it, it's not such a great distance from communist cadre to software engineer. I may have joined the party to further social justice, but a deeper attraction could have been to the process, a system, a program. I'm inclined to think I always believed in the machine. For what was Marx's “dialectic” of history in all its inevitability but a mechanism surely rolling toward the future? What were his “stages” of capitalism but the algorithm of a program that no one could ever quite get to run?
And who was Karl Marx but the original technophile? Wasn't he the great materialist - the man who believed that our thoughts are determined by our machinery? Work in a factory on machines that divide the work into pieces, and - voilà - you are ready to see the social nature of labor, ready to be converted from wage slave to proletarian soldier. Consciousness is superstructure, we leftists used to say, and the machinery of economic life is the “base.” The machines decide where we are in history, and what we can be. (p 29)
When I watch users try the Internet, it slowly becomes clear to me that the Net represents the ultimate dumbing-down of the computer. The users seem to believe that they are connected to some vast treasure trove - all the knowledge of our times, an endless digitized compendium, some electronic library of Alexandria - if only they could figure out how to search it properly....
In front of the computer, however, their helplessness and confusion vanish. When users want to show me the sort of information they have been storing, they open elaborate, intricate spreadsheets full of lists and macros and mathematical formulas, links to databases, mail merge programs, and word processors. They have, in effect, been programming. I am amazed at the ingenuity shown in putting together these many tools. I am astounded at the complexity managed so deftly by these “naive” end users. (p 77)
I'd like to think that computers are neutral, a tool like any other, a hammer that can build a house or smash a skull. But there is something in the system itself, in the formal logic of programs and data, that recreates the world in its own image. Like the rock-and-roll culture, it forms an irressistible horizontal country that obliterates the long, slow, old cultures of place and custom, law and social life. We think we are creating the system for our own purposes. We believe we are making it in our own image. We call the microprocessor the “brain”; we say the machine has “memory.” But the computer is not really like us. It is a projection of a very slim part of ourselves: that portion devoted to logic, order, rule, and clarity. It is as if we took the game of chess and declared it the highest order of human existence. (p 89)
And finally...
The corollary of constant change is ignorance. This is not often talked about: we computer experts barely know what we're doing. We're good at fussing and figuring out. We function well in a sea of unknowns. Our experience has only prepared us to deal with confusion. A programmer who denies this is probably lying, or else densely unaware of himself. (p 110)