- Home
- David Auerbach
Bitwise Page 3
Bitwise Read online
Page 3
My high school physics teacher introduced my class to James Joyce, whom he considered the greatest author of the twentieth century. He told us that Ulysses was dauntingly complex and that Finnegans Wake was simply incomprehensible. The difficulty and obscurity of Ulysses intrigued me as a teenager much as that Logo tree program had as a child. How could a book of fiction be “difficult”? Did it too hold a kind of programmatic complexity to it?
I had stumbled on the writers of the Oulipo, the French-dominated group specializing in experimental works of “potential literature,” after Martin Gardner, amateur mathematical enthusiast, had published several articles on the group in his column in Scientific American.*10 Their most famous members—Raymond Queneau, Georges Perec, Italo Calvino, and Harry Mathews—specialized in the innovation of literature through the use of formal constraints. One of the most infamous was Perec’s novel La disparition (A Void in Gilbert Adair’s English translation), which contains not a single e in its three hundred pages. That kind of constraint—leaving out a letter or set of letters—is called a lipogram. The poet Jean Lescure’s “S+7” method replaces every noun in a text with the seventh noun following it in the dictionary. “Lend me your ears” becomes “Lend me your easels.” Raymond Queneau’s One Hundred Thousand Billion Poems is a set of ten sonnets with the exact same rhyme scheme and rhyme sounds. By mixing and matching lines, there are ten possible first lines, ten possible second lines, and so on, resulting in 1014 possible sonnets.
Georges Perec’s mighty Life: A User’s Manual describes the inhabitants of the ninety-nine rooms of a 10x10 apartment building (one corner is missing), where each successive room is a chess knight’s move away from the current room, and each room is visited only once.*11 The intricate structuring, I later discovered, had close ties to computer science. Perec was fascinated by a mathematical technique called the Graeco-Latin square, a device that pairs up two sets of elements so that each pair occurs only once. The pairs are distributed in a square so that each element also occurs only once in every row and column. Perec used (and abused) Graeco-Latin squares to structure his works: the original plan for Life: A User’s Manual was to utilize over twenty squares to determine what objects, characters, times, furniture, clothing, and music to place into each chapter. Finding these squares was a devilish task: in the eighteenth century, Euler thought no 10x10 Graeco-Latin squares existed, and one was only found in 1959, with the assistance of a computer.
Brecht Evens’s rendition of the 10x10 apartment building in Georges Perec’s Life: A User’s Manual.
Perec, unable to construct squares of sufficient sizes himself, wrote to Indra Chakravarti, one of the authors of the 1960 paper “On Methods of Constructing Sets of Mutually Orthogonal Latin Squares Using a Computer,” who provided Perec with two 12x12 squares. One of Chakravarti’s coauthors was computer scientist Donald Knuth, who would go on to write the monumental bible of algorithmic programming, The Art of Computer Programming. Knuth calls Life: A User’s Manual “perhaps the greatest 20th century novel.” Perec could not have written some of his works without the help of a computer. Knuth found a majestic novel in the combination of algorithmic constraints and Perec’s protean creativity.
A 5x5 Graeco-Latin square. Each pair occurs only once, and each symbol occurs only once in each row and column.
The mathematical appeal of constraints like the Knight’s Tour and the Graeco-Latin square lies, I believe, in how precisely specified and quantified they are. An author can write “a science-fiction story” or a “third-person narrative” or a “prison narrative,” but these are only the most general terms for vaguely defined genres. There are no hard-and-fast rules for what qualifies as a particular type of story. Oulipian constraints, like the lipogram or S+7, are fixed and firm, and therefore algorithmic—most of the time. Raymond Queneau’s Exercises in Style consists of ninety-nine different retellings of a banal anecdote about two men encountering each other on the bus and then on the street. Some versions are purely formal, permutations of letters and words according to precise algorithms, but many are stylistic variations in slang, music, descriptive language, dialogue, and other modes of expression. They are not wholly formal maneuvers; the book is formally organized to spur impulsive, creative expression under posited constraints. Comic artist Matt Madden later reproduced the conceit with different visual styles in 99X. I found Queneau’s looser stylistic rules more compelling than the purely formal permutational algorithms. My life did not resemble the fractal pattern of that Logo tree, for better or for worse. It could not be generated or replicated by a simple algorithm. The Oulipo captivated me because the movement’s members incited creativity, not because they eliminated it.
When I encountered the Oulipians, I felt the first tug between what I’ll call the analytic impulse and the heuristic impulse. The analytic impulse finds its fulfillment in the sheer beauty of formal maneuvers. A perfect algorithm, a beautiful mathematical proof, a meticulously organized table of contents: structure, coherency, and elegance are the motivations that drive analytically inclined people to accomplishment. Yet these systems were too detached from the messiness of “real” “life” to absorb me fully. In contrast, there is the heuristic approach, by which we make provisional and approximate estimates in order to deal with intractable complexity and ambiguity, drawing from our gut instincts, our past experience, our subconscious, and other mental processes that we ourselves may not fully understand. The modern sense of the term “heuristic” was coined by mathematician George Pólya, who described heuristics as possessing both logical and psychological aspects, inextricably tied together. Pólya deemed them integral to mathematical thinking, but their use goes far beyond that. The nuances of human language and emotion, the difficulties of justice and politics, and the profundity of aesthetic experience are phenomena that have resisted being neatly quantified into the sort of analytic boxes that mathematics and logic provide. So rather than perfect an analytic representation, we accept inaccuracy and error.
These kinds of opposing tendencies have been noticed by many. Neither side is specific to science or the humanities. Both the analytic and the heuristic exist within any domain of study, whether literature, logic, or sport. In 1905, mathematician, astronomer, and writer Henri Poincaré distinguished two types of mathematicians:
The one sort are above all preoccupied with logic; to read their works, one is tempted to believe they have advanced only step by step, after the manner of a Vauban who pushes on his trenches against the place besieged, leaving nothing to chance. The other sort are guided by intuition and at the first stroke make quick but sometimes precarious conquests, like bold cavalrymen of the advance guard….Logic, which alone can give certainty, is the instrument of demonstration; intuition is the instrument of invention.
Intuition, Poincaré says, is both necessary and fallible. I call it “heuristic” because it is the often-unconscious art of selecting which facts are relevant, which phenomena are linked, and which shortcuts to take. Seventy years later, mathematician Mark Kac spoke of two species of genius, scientific and otherwise: the “ordinary” and the “magician.” The difference, Kac says, is that even after we understand what a magician like Richard Feynman has done, we still have no idea how they got there.
Heuristics may seem like inferior mental shortcuts compared to the exactness of an algorithm, but in the 1950s, Nobel economic laureate and polymath Herbert Simon promoted heuristics as a necessary tool for coping with a world too complex to understand analytically. For Simon, heuristics were a necessary mechanism for dealing with the limitations we face in solving any problem: limitations of time, of knowledge, of brainpower. Psychologist Gerd Gigerenzer goes further, emphasizing that a failed complex analysis often generates worse results than a simple, heuristic decision. We bring our biases to problems not because we are flawed but because we would be utterly lost without them: “Without bias, a mind could not functio
n well in our uncertain world.”
Heuristics are indeed necessary for human functioning, but we must be cautious in how we apply them and their biases. As we’ll see later, when heuristics are carelessly translated to computers, trouble follows.
Bits and pieces inevitably slip through the cracks of heuristics. Those lost fragments, too complex to be captured by formal analysis or heuristic shorthand, fascinated me as much as the formal systems. When Oulipian writers wove formal abstractions into human joy and grief, as Jacques Roubaud did in The Great Fire of London and Perec did in W, or The Memory of Childhood, they brought out the gaps between those abstractions and the irreducible complexity of reality. The formal and the analytic, in their hands, became a heuristic tool in itself. Oulipian techniques offered me unorthodox tools for connecting with the world of human will and emotion.
The Oulipians played great games as well, but sometimes the game seemed to take precedence over the human significance of the story. If one is going to generate stories out of an arrangement of tarot cards, as Italo Calvino did in The Castle of Crossed Destinies, will the results pierce the human heart? At times yes, at times no, and so I found myself increasingly drawn to the less constrained writing of Virginia Woolf and Herman Melville.
But it was at the station of James Joyce where I moored my boat. I read Ulysses with a brilliant and sympathetic teacher. The book was damnably hard,*12 with incomprehensible passages of Irish dialect, Catholic theology, and gutter obscenity. Joyce’s ideas ranged from puerile to abstruse to profound, freely mixed together with no easily grasped logic. Joyce’s book was meticulously written, yet his plan remained opaque to me. That challenge kindled a similar curiosity in me as Logo had done years prior. But while computational concepts, however difficult, resolved themselves clearly, Joyce’s Ulysses opened itself up to a myriad of interpretations. The characters of Ulysses—Stephen Dedalus, Molly Bloom, and Leopold Bloom—possessed lives that were laden with tragedy, loss, and pain. Stephen’s loss of his mother, the Blooms’ loss of their son, and the wayward wandering of their daughter—to me they were matters of the highest importance.
Yet for all of Ulysses’s rich messiness, it had been rigorously structured, even overstructured, by Joyce. Joyce distributed several schemas purporting to lay out the plan of the book, describing chapter-by-chapter parallels with episodes of the Odyssey, as well as the symbols and organs of the body that dominated each chapter. Yet Joyce’s own words make it clear that the schema is not the be-all and end-all of the book. It was only one way (or eight ways) of seeing the novel, and Joyce had worked himself to exhaustion to ensure that no one interpretation or analysis could be final. The overlaid structures contradicted one another. A character could be a hero or a villain, or a success or a failure, depending on what prismatic structure the reader applied. No single one was correct. This was Joyce’s way of drawing out what was lost in those gaps, by providing not one but many conflicting heuristics for understanding the book. Joyce’s goal, as I came to see it, was not just to leave in ambiguity but to pile on contradiction upon contradiction. To enrich rather than reduce.
The formal patterns of Ulysses were fascinating to me, but not in and of themselves. Rather, they disguised and then revealed clues to the deepest puzzles of existence, those half-shown to us in dim light as the knotted tendrils of human feeling. Computers could not compare.
The Join
It is only a frivolous love that cannot survive intellectual definition; great love prospers with understanding.
—LEO SPITZER
I met my wife Nina when I was eighteen. We wouldn’t get married for ten years, because who could possibly trust their eighteen-year-old self to be competent at choosing a partner? Our meeting had been a freak accident. I was visiting friends at Harvard, who were hosting an end-of-Passover pizza dinner at Pizzeria Uno. Seven or eight of us squeezed around a small table, and the person next to me was Nina. Nina wanted to be a poet. I wanted to be a novelist. We were both programmers. Nina and I each decided that the other was more interesting than anyone else at the table. I did not see her again for six months.
Over the summer, we exchanged emails daily while I did data entry and programming for a factory that made self-locking fasteners. We exchanged adolescent angst and book and movie recommendations. She liked the Cocteau Twins. I liked the Gang of Four. We made cassette mix tapes for each other. We eventually met up again and got together. Both of us had grown up as science and math geeks, yet both of us were enamored of literature and emotional quandries. She gave me James Agee and Walker Evans’s Let Us Now Praise Famous Men. I gave her Jorge Luis Borges’s Ficciones. We looked for the supposed plate memorializing William Faulkner’s Quentin Compson on the Charles River Bridge in Cambridge. We never found it, though we did nearly freeze.*13 A friend told me she knew Nina was special because she had convinced me to wear rainbow shoelaces. She had a far better ear for language and music than me, and she made me see beauty where I had only been looking for rigor and strain.
One version of the patterns of Ulysses, as set down by Joyce.
If there was an algorithm for our feelings, it had to be reverse engineered. Our emotions and reactions often seize us with so much force that they wipe away any possibility of detached cognition. Love is irrational, it is passionate, it is madness. When I met Nina, I was scared. My previous relationship had ended badly and left me shell-shocked. It took months, if not longer, for me to separate Nina from my past.
There is a standard progression to many relationships: There is the initial crush, during which we are quick to overlook the flaws of the other person. When the rush of hormones and infatuation fades, we see what we previously couldn’t. The other person reveals their flaws, their peccadilloes, and their small failures. Then begins the real work of negotiating. We remember the feeling of the initial crush. Maybe we wonder how things changed and why it is that the other person can no longer provoke that same level of positive joy. If we’re cynical, we see that our minds become high on chemicals and gratifying delusions—tiny and harmless perversions of the true picture of the other person.
Dating and relationships give us a personal, private history of memories and associated feelings. From that, we construct reductive judgments. We sum up the incomplete data we have about our partners into heuristic measures: how loving they are, how smart, how dutiful, how talented, how promising. We recalculate constantly. Our willingness to continue the relationship depends on how positive those judgments continue to be.
But do we make these judgments with any consistency or rationality? Can we ever be sure we are weighing the evidence carefully enough? My wife and I waited ten years to get married.*14 When I read the storybook romances of the New York Times wedding section, I think: the plural of anecdote is not data.*15 Just as bugs lurk in the most beautiful of code, many loving marriages stand a good chance of ending in divorce. Inauspicious data kept us from getting engaged, and it would have surprised me then to know I was entering a relationship that has now spanned over half my life.
For anyone who uses the phrase “Till death do us part,” marriage is predicated on the certain belief that it will be permanent. Mistrustful of emotions, especially my own, I was determined to make my decision based on evidence, not feeling. I did not know then what love meant, and whether it even meant the same thing to different people. Love as I conceived of it was less a matter of feeling love than defining it. Love was what made a successful relationship possible.
After college, I worked as a software engineer, first at Microsoft and then at Google. At night, I busied myself reading literature and writing. I also attended to the hard work of a relationship. I worked because my feelings and intuitions were insufficient. I wanted the hard verification of experience. I said to myself: My partner and I are both software engineers. We code and build programs. One of those programs is our marriage. The code for our marri
age is made up of our words, our actions, and our thoughts. Our job is to prevent bugs in our code from crashing the marriage.
We could not avoid the bugs. Every programmer makes them. Instead, we tried to anticipate and mitigate the damage. Robust code can survive unexpected inputs and circumstances. But often bugs will cause a crash, heralded by a message known to anyone who’s ever programmed in Linux or Unix: Segmentation fault (core dumped). The same software engineering maxims that saved my code have also saved our marriage. Here are seven.
1. AVOID VAPORWARE.
Many products have crashed on the shoals of ambitious announcements that proved impossible for programmers to fulfill. Delays in shipping a new product could last years—occasionally decades—and the end result, if it is in fact realized, is inevitably a disappointment. The pressure to deliver “vaporware” puts immense strain on programmers, since they fear they can’t live up to what’s been promised—a legitimate worry. What’s the ultimate in relationship vaporware? “Till death do us part.” Nina and I removed that line from our marriage vows and replaced it with quotes from Robert Musil (“Love is the most talkative of all feelings”) and James Wright (“Somewhere in me there is a crystal that I cannot find alone”). Another way of putting this maxim is: underpromise and overdeliver. I often tell my wife that I would far prefer to exceed her expectations than disappoint her. I would rather have her expect too little of me than too much.
2. BETA-TEST.
We were young and callow when we got together. So were our feelings. The code I wrote when I was twenty-one was good, but it was also naive. Our relationship survived not because of who we were then, but because of what we learned in the years following. We understood this sufficiently to mistrust the feeble and inept judgments of our younger selves. We waited a decade to get married, to accumulate enough evidence that the code was now robust enough to keep the product running smoothly. But even foundations do not last forever. Regular maintenance and upgrades are crucial, lest a once-healthy system decline into a creaky machine.