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
![]()
efougner
January 25, 2010 at 8:35am
while(!this.understand)
{
LearnToCode();
}
My only problem with being a programer / web developer is sometimes as I'm trying to relax or go to sleep, my brain randomly tries to process Java, HTML, CSS, C#, SQL Server, and C++ all at once which gives me a headache and forces me to take a "knock-out pill" better known as Tyonol PM. For all of you non-programers out there, if you want to take a brief look, just right click anywhere in a webpage(except over a link, menu or video) and select view source. What you are now looking at is what your browser uses to display the web page you are on!
![]()
MSgtDan
January 15, 2010 at 9:46am
No matter how complicated a program's organization, in the end it is a list of instructions.
![]()
uhwut
January 14, 2010 at 2:23pm
"discover synergistic opportunities" bet your d shriveled back inside your body when you typed that out
![]()
Jipstyle
January 14, 2010 at 2:02pm
Programming evolved beyond what is described in this article decades ago.
While entertainingly written, it is so far out of date that every programmer who reads it will shudder at the recycling of misconceptions.
There are many different programming paradigms. The paradigm of the list of instructions described in this article describes the structured model of imperative programming. In essence, imperative programming is interested in the state of the machine and how it can be altered to perform tasks. Sadly, the article ignores more modern and far more interesting programming models.
For instance, object-oriented programming describes objects and how they interact with each other. Rather than a series of steps, OOP describes objects and their inter-relations. This style of programming accounts for the majority of commercial code written today. Rather than describing lists of steps, OOP describes the state of the machine using objects and affects their state using their own definitions in order to affect the state of the machine.
Declarative programming what a program should accomplish rather than how it will be accomplished. One model of declarative programming, called functional programming, applies mathematical functions recursively and another, called logical programming, generates logical models to solve problems. Both of these are often used in academic research relating to linguistics, artificial intelligence and intelligence modelling.
Perhaps the author could use less declarative statements regarding computer science and mathematics and stick to describing what he knows ... using over-reaching descriptions of fields of knowledge leads to bitter academics posting corrective notes on your articles.
![]()
quickone
January 14, 2010 at 3:33pm
It wasn't writing for a programmers conference, or an upper level
college CompSci class, it was writing for a tech blog. Anything much
more in depth and he would have lost most readers. We OC, we upgrade
and we game, not all of us program. We just take for granted those who
make our everyday experience seamless for granted, I think that is
what he was getting at. How complicated even a watered down intro to
programing is
~~The difference between insanity and genius is merely succes~~
![]()
Jipstyle
January 14, 2010 at 4:27pm
Oh, I understand that.
My beef is with people who present analogies as facts. It is misleading and, well, wrong.
I also dislike stereotypical representations of 'programmers' ... the parking lot example was cliche.
![]()
nekollx
January 14, 2010 at 12:39pm
That takes me back...when i was learning C++ in college i litterly fell asleep in class. And everytime the professor would call me to the board to answer a function i'd look at it for a few seconds then finish the equasion right there, then after class i'd beasking about content we haden't got to yet...
------------------------------
Coming soon to Lulu.com --Tokusatsu Heroes--
Five teenagers, one alien ghost, a robot, and the fate of the world.















