No ranting about politics or current events today. Let me tell you a story instead. It’s a true story of some importance, so refill the mug and kick back.
Time marches on, and in only one direction. But he whose memory is reliable will retain the important lessons of times past. Some of those lessons are more explicit than others. Some take a while to be appreciated fully.
I was a young man, only recently introduced to the layers of programming complexity beyond “Hello world,” when I encountered perhaps the most important lesson an aspiring software artisan can receive. It came after a dismal experience I’d had in attempting to make use of one of software’s “forbidden sins” (about which more later). I was recounting the frustration of the event to a “older and wiser head:” a graduate student in computer science named Bruce, who had befriended young and callow me out of motives that have no place in this tale.
After I’d run down about my failure, Bruce nodded knowingly. He said something like what follows (I can’t recall his exact words from fifty years back):
“There are three kinds of programmers,” Bruce said. (We hadn’t yet started calling ourselves “software engineers;” that particular vanity didn’t take hold until the Eighties.) “The first is the beginner. He programs simply. He doesn’t know enough to do anything else. That makes his programs easy to diagnose and debug. But after a couple of years, he becomes an intermediate programmer. That guy knows all the tricks and sophistications, and he’s determined to show them off in everything he writes. That makes his programs impossible to debug, because everything is wrapped around everything else. And may God help the programmer who’s asked to debug or extend one of them.”
I was listening closely, certain that Bruce was about to reveal a guild secret that would elevate me from the rude beginner that I was to the stratospheric levels of the elite. And it was so: I was about to hear such a secret…but its essence surprised me completely.
“The mature programmer,” Bruce said, “has been there and done that. His programs look a lot like those of the beginner, because he knows it’s best. If there are faults in his work, he’ll want to be able to find them quickly and confidently, and a program full of tricks and clevernesses isn’t that sort. If someone else has to extend his work, he wants that guy to be grateful for the ease of it, not resentful about all the time and labor he has to put in.”
I was a bit confused. Why learn about the advanced techniques, and all the clever tricks and gadgets, if you’re not supposed to use them? What’s the point of acquiring all that knowledge? But I was a beginner. I had to pass through the intermediate stage to appreciate Bruce’s insight. (In particular, I had to learn to avoid assembly language except in extreme circumstances, and to appreciate the prepackaged conveniences provided by operating-system vendors, but that journey will be left for another time.)
What was the forbidden sin, you ask? It was one of the true evils of programming practice: self-modifying code. And yes, I did encounter a problem in later years in which that evil seemed a virtue, but that tale will also be reserved for another day.
Time marches on. As the years passed I unlearned many practices I’d once thought were clever and useful. It was the crucible of experience that taught me better: mainly, the requirement to maintain and extend my own products. And so I came to understand what Bruce had tried to tell me, and I gradually passed from “intermediate” to “mature” as a software artisan.
When I first acquired supervisory responsibility, my subordinates were mostly raw beginners, fresh out of college. I strove to impress Bruce’s wisdom on them as they developed…and in almost every case, I failed utterly. Each of those young men and women had to pass through the “intermediate” stage, just as I had. It wasn’t about intellect or respect for the wisdom of others, but about the need to be bruised by one’s own sins. Another person’s experiences are seldom as educational as one’s own.
There’s a strong parallel here to Mike Gancarz’s parable about The Three Systems of Man. If you haven’t read it, please do so. It’s a mind-expander.
As time marches on, machinery ages. I learned that rather early in life, during my motorhead phase. Things frequently need to be repaired, sometimes replaced, and often discarded as unsalvageable. (Cf. Oliver Wendell Holmes’s The Wonderful One-Hoss Shay.”) This is also the case with the domestic systems that ensure our comfort: heating, air conditioning, water heating, and the like.
A couple of years ago, I was contemplating my antiquated heating / hot water system. It was of an ancient and intricate design that I’d mused over far too long and too often. It failed at a cross-eyed look, was inadequate to the needs of the house, and had cost me and others a lot of time, effort, and scraped fingers merely to do routine maintenance. The time had come: it had to go.
But as time marches on, bodies age much as machines do. I knew I wasn’t personally up to removing that system and installing a new one. I surveyed local HVAC companies and asked for quotes, delivery / installation times, and technical data about their products. I didn’t see anything that satisfied my most important criteria until by complete happenstance, I mentioned my search to an oil-delivery man. He’d glanced at my old boiler, sniffed, and asked what I planned to do about it. I told him I was in the market, and he showed me a picture.
I fell in love almost on the instant. The picture displayed a unitary heating / hot water system that was the very image of simplicity. It had obviously been designed by someone who knows what it takes to maintain such systems, and was determined not to inflict on others the horrors that he had experienced in his own trials.
I wrote and signed a check minutes later. Barely a week afterward, my old heating / hot water system had been removed; the system whose picture I’d been shown was in its place and functioning smoothly. It took only a single day, which is itself a testament to good design.
When I need a little reinforcement for my shaky confidence in the future of our species, I go downstairs to my machine room and contemplate that heating / hot water system. Everyone whose gaze has rested upon it has awarded it his warmest approval – and not because I was standing next to him with a loaded gun.
Albert Einstein is reported to have said that “Everything should be as simple as possible, but no simpler.” If he really did say that, it might eventually prove to be a greater contribution to human wisdom than any of his others. (Remember what Thomas Jefferson said: “There’s an awful lot of made-up shit on the Internet.”) Simplicity is the most underappreciated virtue…at least, it seems that way to this retired engineer. There are too many examples all around us for that point to be seriously disputed.
Part of the reason I say that is the great number of practitioners of all sorts whose highest aim seems to be impressing others with how clever they are. It’s a vain undertaking. Cleverness is ephemeral; after a while, practically no one will remember it admiringly, particularly if it has to be ripped out and replaced. People do remember simplicity and its intrinsic elegance. They also remember the modesty of the practitioner who stands back and lets his work speak for itself.
This is the case in every field of endeavor: mathematics, the sciences, engineering, architecture, music, art, exposition, storytelling, law, what have you. All other things being equal, what is simple and easily comprehended will be honored over what is involute and obscure. That having been said, when involutions are required to solve a problem, one must “bite the bullet” and do what’s necessary…and then document it to the hilt for the succor of those who will, inevitably, come after oneself.
And when, as time marches on, someone with greater insight or better tools happens along, squints at one’s legacy and contrives a simpler replacement for it, the only appropriate response is applause. This eventually happens to nearly every complexity we must endure, and well that it should be so.
Let’s make this Year of Our Lord 2023 a year for the pursuit and celebration of simplicity. This is especially imperative for the creators among us, for we are not isolated in time or circumstance. With vanishingly rare exceptions, we all benefit from others’ gifts. Let’s do unto them – known or unknown, present or future – as we would have them do unto us.
May God bless and keep you all.