If it were illegal to program a computer, I’d have a machine under the floorboards. I sold my first program when I was 16 years old, in 1980, and with any luck I’ll be making my living this way for another couple decades. I’ve been trying to improve my craft for longer than some readers have been alive, but still the other day I read some code that made me feel like a fraud for even claiming to be in the same field as that programmer.
Being a programmer is as close as a human can come to being a magician. You conjure, by concentration and will, a string of arcane symbols that your silicon brazier converts into anything that relies on information. When I was a kid, it was a trope in science fiction that computers were limited to uses of pure, formal logic (“They deal only with 1s and 0s”). Wrong! Our industry is a great unending field of rich soil, and all of our accomplishments are just the first shoots of grass.
As I write this, my wife is downstairs, immersed in a virtual fight across a post-apocalyptic wasteland with a group of allies, the nearest of whom is sitting on a couch 3,000 miles away. On a whim, I could stop mid-word in my writing, drive to a cafe, and pick up the sentence by tapping with my thumb on the screen while waiting for a coffee. For that matter, I could dictate while driving and have that stream of text available to me before I made my order (via a subscription to Nuance’s Dragon Anywhere, which I honestly don’t use nearly as much as I intend to). An epic battle is being waged between the greatest Go player of his generation and a system that combines Monte Carlo Tree Search (essentially, a random walk) with deep neural nets (no predefined rule structure or semantics). As far as I can tell, there’s no reason to think that AlphaGo (and similar architectures) cannot grow superhumanly competent simply by competing against variations of itself. Oh, and we also write code to help our companies deliver value.
But while non-programmers live in this brave new world, with its digital over- and underlays, only programmers can call the thunder and harness the lightning. In our day-to-day work we get hints of mystery and small hits of reward, but too rarely do we get the unbridled glory of the fans spinning, the console filling up with long lines of “…” to assure us the calculation continues, and then some number astonishingly close to 0 or 1 telling us that, somehow, our code has found a solution that we couldn’t have found in a hundred years.
I remember that first astonishment over a program I wrote that solved an optimization problem, but unlike the cliché of never being the same as the first time, equal and greater thrills have come to me over the years (interesting algorithmic challenges are not nearly as common as the textbooks say, but they’re out there!). We are as privileged in our lives as those who witnessed the harnessing of fire, or who lived in the great cities of Europe during the Renaissance.
I’ve also had the privilege of sharing my perspective over the years. In the early 1990s, I edited a few programming magazines and worked with Ted Bahr and Alan Zeichick: the B and Z in BZ Media. More than a decade ago they and editor David Rubinstein were kind enough to give me this column and a free hand to write about the challenges and joys of software development. I’m grateful to them, and the eternally patient Adam LoBelia, for their forbearance on some of my topics and my tardiness on some (many) of my deadlines.
There’s an old saying that goes, “Those who can, do. Those who can’t, teach.” Or, perhaps, “Those who can’t, write columns and consult.” My deepest thanks go to the readers who have mostly been too polite to stand up and shout “How dare you spout such gibberish?”
My impolitic views have occasionally caused some heartburn to management, but Bryan Costanich and other executives at my company have always forgiven my excesses. That works at a small company that has a narrow focus. But, as has been covered in SD Times, my company was recently acquired by a much larger one, where it would be vastly harder to avoid stepping on toes and where people mistaking my stupid opinion for company policy would have greater consequences.
So this is my last “Codewatch” column. I still have many opinions about the right and wrong ways of writing software, but it all boils down to this certainty:
Those who can, code.