(I'm not putting in lots of links from this page, even though all those essays are on the Web, because this is my essay dammit and right now you're reading me. You can read Raymond later.)
(I may have to make a bibliography page next. I'm starting to build up a significant list of Interesting People, or at least people who influenced me significantly, or at least people who influenced my web site. ("He influenced my web site." There's a commendation for you.))
So, I'm not going to pretend to a "Me and my buddy Eric" schtick here. He doesn't know me. He's way deep in the open-source movement, and he's written more open-source software than me, and I'm certain he's more in touch with Pan. (The Fount, the mysterious impulse, Apollo, wizardry, the unconscious mind -- pick your name for the Resident Muse.) Sometimes I think my life's work these days is strangling the second-to-last vestiges of the Fire, so that I can lock the last vestige up in a glass cage and commiserate alone with it for the rest of my life.
On the other hand -- sometimes I feel like I get a few things right.
There is a set of code words in our culture: cerebral, intellectual, logical. They're all Greek words. (Pan and Dionysius are -- la la la.) That's just because our scientific tradition is all from the Greek philosophers, and with that the tradition of Greek polysyllabic terminology. ("Many", "together", "taken"; "division", "the Word". Well, that broke it down to complete incoherence....) Greek culture -- okay, we have some of that too. But going out in the woods and dancing until the gods came down, that got lost somewhere along the way. Some of it got reimported from Africa, in a sense, with jazz and then rock-and-roll. There's dancing there. (I don't get into that -- see above.) But it's a youth thing. It's not supposed to go anywhere, and then you're told to grow out of it.
I've gotten away from some sort of point I had. Hang on.
Intellectual, right. Consider the following cliches: Computer programming is portrayed as cold. Cerebral. Passionless. When you show a geek getting excited about a computer, it's supposed to be funny. And eggheads never, never get drunk.
(I don't drink -- see above.)
That's the classic view. I think it's actually yielding to reality, overtaken by the programming-as-wizardry theme. Even the technophobes and the neophobes have realized that we can do something, we can make the miracles happen. But if you ask, you'll still hear that programming is intellectual.
There is precision, there is structure, there is ream after ream of technical detail: yes. You can't make an omelet without knowing the correct pan temperature. But this has never been the point. And you've learned the technical stuff when you can feel it. I knew myself a hacker when I knew the taste of a fencepost error, and the different taste of the half-open interval that is the-fencepost-error-avoided. The sinking quicksand of an unbounded loop, and the closed solidity of a recursion that always terminates. The sizzling sound of the right frying pan, do you see: not a numeric reading on a thermostat.
Code is clay, and I reach out and grasp it in my fingers and stretch it and bend it. No, it's not clay; it's clay spinning on a wheel, reshaping by its own logic when I touch here and there. Promises and expectations run up and down the strands like tension and compression in a suspension bridge.
I have lapsed into poesy. A moment, please.
Code is ornamentation. Problems are the real beauty. There is a passage in The Princess Bride, where Domingo Montoya is struggling to make the six-fingered sword. Here:
Some nights Inigo would awake to see him dancing. "What is it, Father?" "It is that I have found my mistakes, corrected my misjudgements." "Then it will be done soon, Father?" "It will be done tomorrow and it will be a miracle." "You are wonderful, Father." "I'm more wonderful than wonderful, how dare you insult me."When I was writing TextureFnoob, I went through this. Dare you not to doubt it. I paced and mumbled. I danced around and grinned. I swore and grimaced. I went to bed with data-flows knotting behind my eyes, and stared sleepless at the ceiling. I (really!) sat up in bed and cursed out loud that everything I had done was wrong, I had forgotten the simplest case, I had to start over, I lay down, I sat up again and said no, I already took care of that case, it would work! Tomorrow! I was more wonderful than wonderful.
But the next night, more tears. "What is it now, Father?" "The sword, the sword, I cannot make the sword." "But last night, Father, you said you had found your mistakes." "I was mistaken; tonight I found new ones, worse ones. I am the most wretched of creatures. Say you wouldn't mind it if I killed myself so I could end this existence...."
A whole year of that. A year of the handle being right but the balance being wrong, of the balance being right, but the cutting edge too dull, of the cutting edge sharpened, but that threw the balance off again, of the balance returning, but now the point was fat, of the point regaining sharpness, only now the whole blade was too short and it all had to go, all had to be thrown out, all had to be done again. Again. Again.
When I was finished, it was a miracle. TextureFnoob can surprise me. It has a way of doing things that I had to invent, but I couldn't have invented anything else, because there was only one right way. Only one beautiful way.
(It's not done yet. There's one critical thing TextureFnoob doesn't do yet -- functions of more than one pixel, which is to say, convolutions. Blur, sharpen, gradient. I haven't thought about this problem, because I know it will consume me just as much as the original. I'll have to throw away everything I've got, start over, do it all again, again. But differently. I don't know what will turn out to be beautiful and right, and I don't have time to find out. Someday.)
You don't understand. An API (application programming interface) is a contract negotiated between two people, the programmer who uses the API and the programmer who implements the API. One of them must use the tool, the other must build the tool, but first they must agree on exactly what the tool can and cannot do. Its shape. To be right, the API must give power and flexibility to the user, but not be unrealistically hard for the builder to build. The builder must be able to construct the API of his favorite materials, and it must lie snugly with all the other tools in the toolbox; but no matter what materials those are and what tools it fits with, the user must be confident how it will move in his hand. To make a tool like that, is art.
Now: With Glk, because of the way text adventures are created, there are three people, not two. One builds the tool, one uses the tool, and one enjoys the final artwork that the tool carves. Except that's not right, I've strained the analogy too far; the third person is using the tool just as much as the first two. Perhaps the work is a racing car: one person designs the engine, one designs a car to be run by the engine, one drives the car and feels the engine under his feet. The point is: a tool to fit three people is the square of the usual difficulty, and I swear to you, the joy is squared as well. I paced, I mumbled, I swore, I laughed at nothing visible. And this without any source code at all!
You can see why the story of the six-fingered sword appeals to me. The hardest part, the most rewarding part, is making it look like it was always perfect.
(Glk is not done yet. It will never be perfect, as no artwork is ever perfect, obviously. And not everybody enjoys my art. Of course, they're just affectless Philistines and the hell with them, eh?)
"I had this goofy grin." Entirely spontaneous. It's the same grin (so they tell me) that a lingering dose of LSD slings around. The muscles you smile with as an act of will are different from those that engage when something lights up your face.
"My eyes glaze over." It doesn't feel like that from the inside. It feels like my eyeballs are stretching out to infinity, because I've stopped paying attention to them, because I can see things in the inward view whose structure fell free of mere three-dimensional space years ago. Sometimes it's source code, sometimes it's the pattern of a program, sometimes it's the ending of a story which becomes obvious. It's always the particular convolution of meaning which I sometimes call "a really good joke" and sometimes "evil" and sometimes "enlightenment."
I'm told it's uncomfortable to get in the way of my eyes, when this happens. But it sure as the devil (or any dancing goat-figure you may prefer) feels good from this side.