I was beginning to think my plan had a flaw.
I followed Niklaus Wirth’s flight online, and I knew it had landed safely at Hartsfield-Jackson. But where was the Good Professor?
The plan was that I’d pick him up, drive him to my home base in Athens, Georgia, and we’d strike out in a Bonanza F33 the next day for a multi-day trip to San Diego. But now I couldn’t find him.
I positioned myself in front of the massive bank of escalators that endlessly ejected people from the underground tunnel that connects the terminals. 260,000 people go through the Atlanta airport each day.
At the time, I thought it was the only way out. Years later during my seemingly endless commute from home to Silicon Valley, I learned there are other nooks and crannies that folks could escape from. Still, there were so many people pouring on the elevators that I kicked myself for not bringing a “Prof. Wirth” sign even though we’d met a year earlier at what turned out to be the last Joint Conference of Modular Programming Languages.
Then I saw it. I happened to glimpse a sky blue turning cap, one I had seen so many times during our time in Oxford. It was heading down the terminal, so I was quick to catch up with it.
Time spent with Wirth can’t be explained in words, probably because of where I was in my software design journey that June of 2007. A younger me, earlier in my career, wouldn’t have been able to absorb his history, judgment, and aesthetic.
I’ve met many young coders who are argumentative for what they know (or believe to know) to be true. I’ve met plenty who are swayed by the fashion of the day because they haven’t learned enough to be able to reflect on what’s important and what’s just an accident. I was just such a young man.
I’ve had many indelible conversations that I wish I could retract. My only solace is the thought that the person I was talking to was someone like me today, patient and understanding of the immature enthusiasm of youth.
The next day, the radio tower announced, “November, six, six, seven, five, lima, cleared for take-off.” I double tapped the push-to-talk button and swung the Bonanza onto runway two-seven. I slowly advanced the throttle in the low wing single-engine plane that held up to four passengers. Today, it just held me and the professor.
If you haven’t ridden in a small plane, you probably can’t imagine the noise. Between you and a 300 horsepower engine is a firewall of thin metal. The noise of the exhaust and three-bladed propellers would alone make conversation difficult, were it not for that wonderful invention of general aviation: the headset.
This isn’t like the headset of a phone operator, not like the one used by Lily Tomlin’s character Ernestine (“Is this the party to whom I’m speaking?”). No, these headsets provide the same ear protection that target shooters use, only with a mic, speakers, and a few electronics known as the intercom. The headset allowed us to converse easily, despite the ambient noise.
As the plane’s speed reached fifty knots, I pulled back on the yoke (the sort-of steering wheel of an airplane), and the nose pitched up a bit. When it pushed past sixty, it left the ground. The vertical speed indicator swung to show a 500 feet-a-minute climb. We’re on our way.
It was late afternoon, now. Turns out Swiss-Air had lost Wirth’s luggage and their van took its sweet time finding us at my office. It worked out, though, because it allowed the good professor to have a few minutes of shut-eye on my sofa while we waited. (I still have not and will not part with that sofa. It has followed me from office from building to building.)
As the plane leveled out, the sunbathed South stretched out before us.
People are always surprised at how travel feels so slow in a small plane. Sure, in a commercial jet (what we in the know call an Airline Transport Aircraft) the world moves somewhat slowly below us, but the sounds and sensations of going 500 miles an hour at 36,000 feet give one a sensation of speed.
On a small plane, we’re only at 8,000 feet going 170 miles an hour. This seems quite slow in smooth air. That day it gave us plenty of time to watch Georgia float by as I navigated north, avoiding the busy Atlanta airspace. I headed over the hills of north Alabama, and then to the flattening landscape of Mississippi with its Catfish farms, and crop fields.
The sky was clear. There was no need for instrument flight rules on that trip. The headwinds began to get strong though. I dropped lower in the hopes of finding easier going. Sure enough, they were less strong the lower I got.
We stopped to stretch our legs at a fuel stop in Little Rock, calling ahead to make reservations at a hotel in Oklahoma City. Blasting off west, we climbed into the late afternoon air and into the sunshine.
But it was getting more turbulent as we went. A dry but strong weather system had found us. It’s not always smooth up there. Sometimes you get your teeth rattled. Planes’re strong and there isn’t much danger, but it can be uncomfortable, especially for someone not used to it.
The good Professor was doing fine through the worst of it. We kept a wide-ranging conversation going over the intercom. He was like an old pro, loving the sights, sounds, and scents of the trip.
This man had an immense influence on my professional growth. I first learned Pascal in the 1970s, not terribly long after its first appearance on the scene. It took the computer science world by storm, becoming the go-to language for any academic paper of the era.
And his books! Such books they are. For the practicing programmer who studied them back then, they lifted our thinking from a quagmire of gotos to something more. We began to think about designing software. Truly, he helped all of us structure design and see the value of it. We stopped focusing on the instructions and instead devised solutions.
It was as if programmers used a mouse to click on letters, then suddenly someone handed us a qwerty keyboard and taught us how to touch type. What we used to have to think about became instinct. Function calls emerge from our fingers, born full-grown, just by thinking about selection, iteration, procedures, and nesting.
But the greatest gift his books gave us was simplicity. We’ve all kind of known about it all along. Certain other art forms have had their own purveyors, such as Strunk and White. The simplicity conveyed in other art forms are not simplistic, sterile, or barren.
At least for the last century, this has always been valued in writing, especially writing for books. The pages emerged from the writer’s typewriter in a flowing stream of pages, stacked, read, re-read, worked, and re-worked, and then typed again, only to be finally sent to a publisher. The publisher then reads, edits, and re-works it again. Only then does it get set into type, loaded in the gigantic press and the full sheets of double-sided print emerge to be folded, trimmed, and sown into their binding for people to read. The number of readers who journey through the book makes all the work of being elegant, simple, clear, worth it.
Software is the same. Sure, only a few read it, but those readers are important. Errors can be disastrous. They can create security breaches that hide in code for years, only to crawl out when the environment around them changes. Just like editing, reading code to seek out bugs is key. But if that code is too complex, how can we read it? We quickly get lost in a tangle of functions and long variable names. The flow of control becomes a labyrinth that even the Minotaur couldn’t figure his way out of.
Execution of software can approach the infinite. Not literally, but thinking about the sheer number of instances on Google’s, Facebook’s, or Twitter’s servers feels a lot like standing on the edge of the Pacific Ocean, looking out into the vast expanse. Some software lives a very long time. There are programs currently running on IBM z14 machines that were written in the ’60s! Given all that, doesn’t it seem worthwhile to make that software as good, efficient, and bug free, as possible?
What characteristic of software makes this so? Well, I can’t explain that here. It’s exactly what Wirth’s body of work has taught many. Before that plane trip, I had read his books. I had read “The School of Niklaus Wirth.” I had studied his OS and compiler code. I was ready to absorb everything I could from him. It’s not often you fly a Turing Award winner across the country.
By the time we got to Oklahoma City, it was downright bouncy. As we did an extended downwind north of the airport, I was having to manhandle the machine with quick jabs of yoke and rudder. After some practice, pilots can anticipate when a wing is going to be shoved upward by the invisible hand of turbulence, preemptively moving the aileron on that wing up to keep the airplane level. If you’re good, the passengers only sense a bit of weaving. But if those passengers looked out the window at the movable panels on the wings, they’d see them bouncing up and down with each jab of the controls to steady the thing.
Wirth and I get to the FBO (Fixed Base Operator) for general aviation at OK City. They tie down the plane and fill it with fuel for the next day. We go to the hotel, enjoy a nice meal, more conversation, and each head off to bed, worn out by the day’s events. Thoughts mix in my head about systems and languages and VORs and air traffic control and the coming day of flying. I’m glad Swiss Air lost his luggage and delayed our departure. That just means more days in the air.