Future Tense: Program Notes


Most of the tools that humans have invented are designed to increase physical ability. Only a few tools have been invented to increase mental ability—language was the first. Then math. Then books. And finally, computers. (If I’ve missed any, someone will happily point it out in the comments section. Thanks in advance.)

But a computer, by itself, is about as useful as a boat anchor in South Dakota. You don’t buy a computer to own a computer, you buy it to run software. And it’s not software you want either. What you want are the services that all that hardware and software makes possible.

You buy a computer and you fill it with software so you can expand your ability to process information, simulate situations, extrapolate possibilities, make informed choices, discover synergistic opportunities, access information. And communicate, so you can be informed, educated, and entertained. You use software to expand the reach of your mind, your identity, and your ability to affect your environment.

That’s pretty good for something that’s ultimately nothing more than a bunch of ones and zeroes. The real trick is knowing how to put the ones and zeroes in the right order. Remember, the plumber doesn’t get paid for banging on the pipes, he gets paid for knowing which pipe to bang.

Here’s everything I know about writing code.

Writing—all writing—is nothing more than list-making. There’s no such thing as a writer’s block, just ask yourself what comes next and you’re unblocked. See? Problem solved.

A computer program is a specialized form of writing—and there is one thing that is true of all computer programs, regardless of language, regardless of hardware, regardless of corporate promises, and I don’t care how cute Justin Long is or how much John Hodgman looks like a labradoodle too polite to tell you that you’re standing on his tail—a computer program is nothing more than a list of instructions .

That’s all. Nothing else.

Do this. Do that. If if this is true do this, otherwise do the other thing. Count these until you find one that matches this. Poke this pixel, now poke that one, and the next and the next and the next one after that. Do all this so fast it looks instantaneous.

Your computer will follow instructions exactly. It will do only what it is told. Nothing more, nothing less. It will add nothing, it will subtract nothing. It will have no opinion of its own. You can depend on that. (I think that’s one of the reasons so many of us like computers so much.) It understands nothing. It just follows instructions. Hooray for computers. Don’t you wish your teenager could follow instructions?

Your computer will execute two billion instructions per second, more if you have a faster chip, much more if you’re running a multi-core processor, and even more than that if you’re over-clocking. (And if you’re reading Maximum PC, you probably are.)

The truly astonishing thing about your computer is that with all those billions and billions of instructions that you ask it to execute every minute, all those trillions and quadrillions and quintillions of instructions it performs throughout the years of its life, it does all that with an error rate that’s so far on the distant side of the decimal point, it practically doesn’t exist. We take it for granted that our machines are error-free. In the domain of microprocessors, if an error rate is measurable it’s too high.

And if a program ever does crash, if the software stops dead, if your machine freezes up, if you’re suddenly looking at incomprehensible white writing on a blue screen, your first prayer is almost always, “Please Ghu, let it be something I did.”

Because that’s the most easily fixable error.

Otherwise it’s time to sacrifice a goat on the altar of Yendor.

“Oh, Great Computer Guru, my machine crashes when I do this.”

“Stop doing it. That’ll be $125, please.”

The software that makes all this joy and agida possible is a kind of mass hallucination—an agreement among users and programmers alike about how things should work.

There is nothing magical about the process. Good programmers are always looking for ways to make their code more efficient and their user interfaces easier and more intuitive. Users are always looking for software that gets the job done quickly, is easy to use, and even has a component of fun to it.

The result of this ongoing conversation between progammers and users, providers and customers, is an evolution of interface design, software features, and overall functionality. The folks on the bleeding edge of this conversation are the code-wranglers, the ones who think in algorithms and dream in Java.

I’m not kidding about the dreaming. When I was learning BASIC, I remember quite vividly that for a week or two I actually dreamt in BASIC, seeing problems breaking apart into their underlying algorithms, each step as a specific line of code. I knew then that I had finally grokked a programmer’s fundamental way of being.

I experienced that same near-hallucinatory experience again when I dove head-first into Turbo Pascal. After several long days of wrassling an unruly herd of stubborn VGA functions (and losing two falls out of three), I fell into a fevered sleep and dreamt of procedures and pointers and variable records. Oh my. It was both thrilling and annoying—annoying because I just wanted to sleep, but thrilling because it meant I had gotten far enough up the learning curve that I was finally experiencing the methodology of the language from the inside.

Programmers don’t see the computer experience the same way users do. Users see an interface, not the underlying machineries of logic. Programmers see the particles of the problem, the individual steps, the lists of instructions and the larger constructions they form. It’s a vastly different way of thinking about how to produce a result—methodical, precise, disciplined, and alien to those who still have VCRs blinking 12:00.

The art of programming is learning to see problems in terms of algorithms—as exercises in methodology. And based on my own experience of programmers, those same skills carry over into the routines of their daily lives.

Ask a programmer how to find a parking place quickly and he’ll tell you to visualize the parking lot as a two-dimensional array with the most desirable spaces (those closest to the theater) already filled. Proceed immediately to the least-desirable corner of the lot and you will find many empty spaces. Your protest that you don’t want to walk that far will be met with a blank stare and the response: “You didn’t specify that as a condition of the original problem.”

He will then add, “But now that we have modified the conditions of the problem to include desirability based on proximity to the destination, then depending whether it’s a weekday, a weekend, or a holiday weekend, depending on the time of the day, the capacity of the theater, and the desirability of the movie playing, all of which will affect the preexisting allocation of spaces, you should proceed toward that area of the parking lot array that now represents the optimal set of conditions determined by an inverse proportion ratio between desirability and distance from the destination.”

Translation: “Don’t go for the far corner, but don’t try to get the only-happens-in-the-movies convenient spot in front of the theater either. Go for the edges of the existing mass of cars, and don’t go trawling up and down the aisle, wasting time, gas, and what’s left of your patience, because that’s not the wisest use of your time and energy. Stop being afraid of walking. And…Christmas Eve conditions are not predictable without a quantum supercomputer.”

And no, I do not exaggerate.

The point is, computer nerds and geeks think about problems methodically. That’s what drives so-called “normal” people crazy.

I love it.

David Gerrold is a Hugo and Nebula award-winning author. He has written more than 50 books, including "The Man Who Folded Himself" and "When HARLIE Was One," as well as hundreds of short stories and articles.  His autobiographical story "The Martian Child" was the basis of the 2007 movie starring John Cusack and Amanda Peet. He has also written for television, including episodes of Star Trek, Babylon 5, Twilight Zone, and Land Of The Lost. He is best known for creating tribbles, sleestaks, and Chtorrans. In his spare time, he redesigns his website, www.gerrold.com

Around the web