I’ve been a hobbyist “programmer” since 1984 when I got my first computer. It was a KayPro, and, although I was a humanities guy with no computer background, from the first time a character I typed showed up on its screen, I was curious about how the damn thing worked. So, I started poking around. I ended up teaching myself SBASIC (a structured version of BASIC that came with the machine) and then some Assembler because SBASIC over-wrote the section of memory that contained WordStar documents I wanted to rescue from the machine’s frequent freezes. One of the pieces I’m most proud of as a writer is was my beginner’s tutorial on assembler, using my WordStar program (SaveStar) as an example, published in Profiles, the KayPro magazine.
Back in the old days, most of the time you put in learning programming on your own was spent being stuck. I remember in 1985 or so calling a random professor in Boston University’s computer science department after spending days and days unable to figure out something about file-handling in SBASIC; he didn’t return my call, and email was not an option. Now Google can answer just about any programming question I have, because as a perpetual beginner, my questions are rarely unique. Within seconds, you get a list of freely available code that you can just plug into your own project. Boom, done.
But not necessarily boom, smarter.
I “program” for two reasons. First, I enjoy it. For me, it’s puzzle-solving. I also like the sense of control over my environment. Of course, the environment is a hugely artificial, constructed environment. But, it happens to be the environment in which I spend almost all of my day.
Second, “programming” is a semi-practical pursuit. Over the years, I’ve written utilities customized entirely to my needs and preferences. In most cases, the time it took me to write the utility far outweighs the amount of time it saved me — usually by orders of magnitude. In a few cases, I’ve used the utilities for years, adding features until they are over-stuffed, hideous beasts. The best example is the blog editor I’m writing this post in. Some of the features — e.g., the color picker — were obviously needless additions, but I got interested in how to programmatically create a display of all the Web-safe colors. Other features never quite worked, but I’ve left in the UI access to them because maybe someday I’ll get around to fixing them. And some features are so useful to me that I don’t know why every blog editor doesn’t have them; for example, when I create a link, my editor remembers it and offers it to me the next time I select the same text. It also records how often I’ve used each link, information I’ve never looked at but it’s comforting to know it’s there. (Don’t tell me all blog editors do that now! I don’t want to know!)
There’s another dimension of the pleasure I get from “programming.” The Web is an incredible environment for the pure fun of learning. When it comes to software, you can almost always find an explanation that is just slightly over your head, so you’re stretched. You can do it in private, googling as many dumb questions as you want. (Note: Some questions are dumb. Believe me. I google them all the time.) Software development is such a deep, deep field that you’re never going to run out of things to learn. And, you get to actively observe a culture that is extraordinarily rich in norms, mores, and personalities.
But, I am a flatfooted “programmer” and always will be. I have limitations that would have kept me from ever becoming a professional. I have an odd inability to handle indirect relationships, e.g., pointers; I did fine with C, but bombed at C++. I have problems with recursion, so although I once did a fair bit of hobbyist Lisp “programming” (I once wrote a beginner’s guide to Lisp as a document extension language), I can’t handle the self-reflexive capabilities that turn Lisp into a super-tool for Paul Graham. I’m terrible at math. I simply could not have become a pro.
At the same time, as a hobbyist, the programs I write are also quite limited. They tend to be small. If they get biggish, almost always it’s because I’ve added more features, not because they’ve gotten more complex. They are for personal use. I am doing this in my spare time.
Give my limitations, the limitations of the programs I write, and the reasons why I enjoy “programming,” I think being flatfooted is a pretty rational approach. (Not that I have a choice about it.)
So, I am flatfooted. Pedestrian. A literalist. Without grace. Inelegant. Inefficient. Wasteful. Taking long cuts. It’s embarrassing. I see the leaps professionals make, and I am awestruck. It’s like watching aerialists at the circus while you’re schlepping back to your seat with root beer stains on your shirt.