Joho the Blog » The flatfooted learning society

The flatfooted learning society

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.)

Let me be more exact. I write code that goes step by step through a process even when I know there’s a more efficient, more elegant way to do it. I do things the long way. I spell things out that could be abbreviated. Why? Because it’s easier to debug, it’s easier to figure out what I was doing if I go back to it, and my “programs” are so small that extra processing steps will not noticeably affect performance. For example, if I want to create an array that associates two values in Javascript, I’ll just create two arrays and keep them in sync. I know there are more elegant ways of doing this. But this way works and lets me give each a descriptive name. I also use too many globals, create functions when adding methods would be better, often skip jquery’s shorthand because I have trouble reading it, and have passed multiple variables out of a function by combining them into a single string with some unique delimiter between them.

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.

Nevertheless, I want to encourage my fellow flatfooted beginners. Since I’m “programming” almost entirely in Javascript these days (and loving it), there’s no problem finding tutorials and helpful guides. But, when you have a specific problem — some bit of functionality you can’t figure out how to create — you are often dropped into a geek-on-geek world that assumes the person asking the question understands more than beginners like me do. The code can get so compressed, so efficient, so elegant that it can be just about impossible for someone like me to understand. Real programmers of course should and will explain what they do in their own terms, and with the most advanced techniques they can create. That’s why beginners like me should share more of what we do. We don’t do it as well, but we can often learn from one another better, even though it means exposing flatfooted code to a world of professionals with wings on their ankles. And the especially kind ones will swoop down now and then to set us straight when we’ve gone too far wrong.

11 Responses to “The flatfooted learning society”

  1. I hate programming and I am doing it on and off for 25 years.

    I just suck at it and prefer to leave it to others who know what they are doing.

    But sometimes, there is a simple need that I can fulfill by myself and it works.

    Such is my last small project – Clean

    Clean text and prepare it for posting to the web

    http://info.org.il/clean/

  2. Nice, Hanan. Thanks.

    It graphically looks a bit like a semi-similar page I posted a few months ago that turns urls into links: http://www.hyperorg.com/misc/ConvertURLsToLinks.html

  3. One word in the above prompted a wave of nostalgia in me. In 1981, I was unemployed (with a bad case of teacher burnout) and part of my therapy was learning WordStar on my husband’s first home computer, a dinosaur called CompuProt. Being able to correct my errors on screen was a like a miracle to me. I was more interested in what it could do than in figuring out how, but both my husband and my then-teenage son began their lifelong hobby of programming. Our son pretty much masters whatever he attempts but my husband often wails about the “geek-on-geek” world you mention.

  4. That’s CompuPro not CompuProt. Don’t know if Hanan’s Clean would have caught that error or not.

  5. This was a really interesting acrticle. I like your comment ” I write code that goes step by step through a process even when I know there’s a more efficient, more elegant way to do it. I do things the long way. I spell things out that could be abbreviated. Why? Because it’s easier to debug, it’s easier to figure out what I was doing if I go back to it…”

    I think you’ll enjoy the new book “Making it Big in Software”. It’s the latest guide to software careers. You seem to view the programming world a lot like it’s author!
    http://amzn.to/b08auR

  6. I was first introduced to programming in the 1970s when I was in the US Navy as a “Data Processing Technician.” The programming bug never caught on with me. The last system I worked on in the Navy was the Honeywell 6000 which gave me lots of opportunities to do some learning of programming, but I was not very good at it. I learned a little BASIC, FORTRAN and COBOL. I found the process of programming tiresome.

    Now I like learning about how to use computers (I have a laptop with Windows XP, Desktop with Windows 7, an iPod and an iPad). I love the iPad. Dave Winer asked in his Scriptingnews in April, “Is iPad a game-changer?” (I was very recently introduced to your blog by Dave Winer.) I think it is, for me. The iPod was an eye opener for me. I don’t think I would have purchased an iPad at this time without spending time with my iPod. The leap between the two is amazing.

    I can see many changes (enhancements) that could come for the iPad over the next couple years. Yes, I would be willing to pump out some more money for a greatly enhanced iPad. But I won’t be programming any apps. But I will continue my search for apps I can use.

  7. I’ve run into many developers who just code because it is their job. But the coders who do it because they enjoy the process and the satisfaction they get from the end result, those are the ones I like working with.

    For me, I find coding an incredibly creative and fulfilling process as well. Be it a UI or some low-level API. I can’t draw worth a darn. But my gut tells me I get a similar high when I code that an artist gets when they draw or paint.

  8. [...] to my RSS feed (using BlogBridge, of course) . Welcome, and thanks for visiting!Check this post The flatfooted learning society from Joho the Blog: But, I am a flatfooted “programmer” and always will be. I have limitations [...]

  9. Enjoyed this post, especially the last sentence of the penultimate paragraph:

    “It’s like watching aerialists at the circus while you’re schlepping back to your seat with root beer stains on your shirt.”

    I love this analogy. I can think of many situations in my own life where this is apt. (Can I use it?) ;-)

    Kickstand447

  10. Thanks, Kickstand. Sure you can use it; this entire blog site is licensed under a Creative Commons license that lets you use anything without asking, so long as you attribute it to me, do not use it for commercial purposes, and you allow others to re-share it.

    But, even if the site were not under CC, but were only under standard and default copyright, you could certainly use a brief quote without asking permission.

    In any case, it is nice of you to ask.

  11. David
    Enjoyed the article. I think the major difference now (as agsint the early 80’s when I first programmed) is the availability of online support – through various communities. This has certainly enabled me to learn to program in a range of dofferent langauges – using a combination of quality text books and online community support.

Leave a Reply


Web Joho only

Comments (RSS).  RSS icon