A Discourse On The Nature Of Learning How To Program

During a spate of computer-file housecleaning, I came across this e-mail exchange I had with f1ava f1av, he of the infamous PHP dissertations back in December.

It contains what I consider my most honest advice for a person who is just starting out in the programming business, and it feels interesting to share a piece of personal correspondence to an erstwhile admirer and fellow traveler; to me, it’s much the same as reading the kinds of correspondence the Founding Fathers used to share with one another.

And, if that isn’t too pretentious an introduction, here’s f1ava’s letter to me:


Whats going on these days, any neat projects brewing? I’ve cut back on my php hours lately cause i think my mind was starting to fry. Ive been dabbing with photoshop lately trying to get a somewhat decent appearance to the site. Do you ever find with programming or whatever that ideas start to flow, and they dont really stop. So as time continues, you realize that you havnt gotten as far as you would like becasue ya keep on dabbign with new ideas. hehe Im sticking with my original layout. The calendar turned out pretty neat, i added a random displaying picture at the top of each month. The add/edit/delete/username/password is all working dandy.

Thanks again for your assistance with everything so far, its def been a huge help.


And here’s my response.

Nothing new as far as projects go. I’ve got to get off my duff and redo my business site and finish my Google Maps / AJAX demo site, but at the rate I’m going, I should have those done by 2010.

My thing with programming has always been that at the very beginning of a new language, there’s a big hill to get over, as you just start to understand the concepts.

Then, after you’re over that initial bump, you tend to get very excited, because you now understand how the language works, so things just seem to fall in place and you can begin to master a lot more of the language, because you understand, conceptually, what you are doing.

Yeah, often there’s a burnout at that point; you learn so much, so fast, it wrecks you, and you find yourself forgetting things very easily or getting confused by what you ought to do, because you’re sure it should be X when actually, it’s Y.

Most often, that fades out with use over time, and you kind of settle in to a general competence.

Then, after a while, you come to a huge mountain: The abstract concepts behind the language, the real nuts and bolts stuff that let you go from just manipulating data to actually creating something out of nothing. That is always a bear, and it’s where most people stop, because it is exceedingly hard to understand and even harder to master; the errors become harder to spot and the number of peers available who can answer your questions fall off.

You can see that in Yahoo! Answers: There are a million people who can write simple SQL queries, tell you how to use CSS or HTML, or answer questions about what function to use in PHP to, say, find a pattern in a string.

But very few people offer answers (constructive ones, anyway) on more complex questions, such as you’ve been asking, or even more complicated, on things such as how classes work. You’ll find people either quote Wikipedia or offer terse, “You do this-and-that” answers, but don’t really get into the reasoning or the nuts and bolts of it.

Mostly, that’s because they don’t know. I know lots of programmers who actually have no idea why the code they wrote works, or why the write code the way they do (in object-oriented programming, there’s usually 3 or 4 different ways to skin a cat; most people — me included — skin them they way they were taught, rather than the way that makes the most sense).

Also, explaining things takes a lot more time than doing things. I knocked out the code for the PHP menu in about 15 minutes, but it took about an hour to document it and write my blog entry on it.

Finally, not everyone knows how to teach. I am very fortunate in that I come from a journalism background, where basically all you do is take difficult things with lots of nuance and condense it into a few paragraphs of easy-to-understand generalities.

In re: moving to new things / ideas, the most common trait of programmers and geeks is that almost all of them want to make new things, but few want to improve upon the things they’ve made.

If you ever look at Sourceforge.net, which is the big place for open-source software development, you’ll see tens of thousands of projects. About 90 percent of them never get past an initial release (my PHP Weather XML project included). Heck, about 80 percent of them don’t even have source code that’s worth a damn. Just check out the support requests and see how many “delete my project” requests are in there.

Those that are lucky enough to get past an opening version tend to die within a couple of years because it’s hard to find programmers to work with an established product for free, and almost always, the person who came up with the idea gets bored and drops it.

Ed. note: As soon as I get done redoing my business site — on the first Saturday after never — and then my AJAX / Google Maps site (shortly after Hell freezes over), I’ll actually update my forsaken National Weather Service RSS feed parsing class. No, really, I will. Seriously.

I suppose it’s like climbing mountains; even though plenty of people have been up the mountain you’re about to climb, you haven’t, so the first time is always a thrill. But once you’ve reached the top, climbing that hill again loses its appeal, and it gets worse every time you go up the same trail, until finally, you either find a new mountain or give up climbing, period.

Glad to have been of service. When I started out on programming, I had absolutely no idea what I was doing and needed all the help I could get. I found it and found it for free on the Web.

Now it’s my turn to give back, and I’m glad it’s making a difference for someone.


  1. Hi. I’ve been reading a few of your blogs. You actually sound like the guy who taught me C and OOP. Unfortunately, I too am like the typical programmers. I work for a company that has AJAX experts, and I bet they aren’t bothered about the real nuts and bolts either. It felt great reading your stuff.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  • Check out the Commenting Guidelines before commenting, please!
  • Want to share code? Please put it into a GitHub Gist, CodePen or pastebin and link to that in your comment.
  • Just have a line or two of markup? Wrap them in an appropriate SyntaxHighlighter Evolved shortcode for your programming language, please!