Monday, 27 Feb 2006 [Sunday, 5 Mar 2006]

Shelley Powers and Sam Ruby recall that they both started programming with BASIC. And then James Governor mentions BBC BASIC.

[Update: if you enjoy this, don’t miss Mark Jason Dominusmarvellous response.]

That’s what I started with, on the Acorn Electron. And I remember being excited about finding and understanding DEF FN. I also remember my disappointment about how limited it was. I remember my frustration whenever BASIC forced me into writing messy code.

I guess I have a natural penchant for structured code. Penchant? Instinct.

Pascal was just the likely next step; Turbo Pascal on the PC to be precise. I took to it like a fish to water.

Then I spent a couple of years doing assembler, coding graphics effects. That was a lot of fun, in the same sense that the pain of running a marathon is fun.

In between there, Turbo Pascal acquired OOP features. That was hard to understand. It took me years (two, I think?) to wrap my head around it at all, trivial as the ideas are. It would take me over a decade to really understand object oriented design beyond hand-waving and gut feeling. (The revelation was delivered by Replace Conditional With Polymorphism.)

Then I finally got a modem with which to lurk the web, instead of just eagerly reading about it. I started doing HTML, but was quickly bored; CSS was not yet born and I wanted abstraction for that repetitive presentational markup. Unfortunately there was no such thing as web hosting then; running a dynamic site meant running a server, a mindbogglingly expensive privilege. So I got into the next best thing: Javascript. I still have some of the code I wrote then; to this day it works perfectly, unchanged.

Then I got hired into a small web & media outfit, and had my first opportunity to write real, honest-to-goodness server-side code. And what else would one use? I had my first encounter with Perl.

It was difficult, at the beginning. Javascript had been an odd experience, but this language was even weirder. Parameter passing confounded me for a few months. And then, one day…

It clicked. It clicked. I cannot really describe this sense of profound realization, but it suddenly made sense, and oh! how it made sense. I’m pretty darn certain that it is the same kind of experience someone has upon “getting” Lisp. Lists. It made sense.

Ever since that moment, C and Pascal and all their ALGOL-derived ilk carry a stigma of inferiority with me. The biggest offender is Java; it has managed to be as irritating as C++ without any of the fun bits of C. I have tried repeatedly to get into it, and in the course of those attempts I’ve learned the language, and I even built some small things with it, but… as Michael Vanier so aptly described it, writing Java code […] puts me to sleep. It’s well suited to the 9-to-5 programmers, and that’s all I am not.

I still anticipate that one day I will venture further into functional programming; even my first days in BASIC were coloured with the brief excitement over DEF FN, so what else can one expect? Unfortunately, Perl has spoiled me. Functional languages tend to have no syntax, and while I appreciate the power inherent in its absence as much as the next guy, I no longer consider having good syntax a negotiable matter. (As Larry Wall says, Lisp is the most beautiful language in the world, and every program in Lisp is real ugly.) One day it will happen regardless; things like lack of side effects and type inferencing are irresistible. The kicker, of course, is macros, Real Macros, but Perl 6 will cover that base – whenever it arrives.

There’ve been many other languages here and there along the way; during one stretch in the middle of my Pascal years, I was utterly infatuated with Forth. (Years later, I would have to write a substantial amount of Postscript and those ghosts of the past would come in handy.) I flirted briefly with Tcl/Tk when I first got into Linux, but we rapidly developed an intense dislike for each other. A few years ago I made a few abortive attempts at Python; me and that language, we’re just not made for each other. Recently, Ruby has been trying to get my attention, with no small amount of success, except, well its differences from Perl are only skin-deep, besides doing OOP really nicely, which, as we saw previously, I’m only mildly interested in anyway, so there’s little to draw me away permanently.

I did some PHP/FI hacking when it first arrived, and then revisited the language when it became just PHP. It suffers the stigma of ALGOL: no Real Lists – much less any of the other higher order expressiveness I’ve come to rely on in Perl –, though as far as listless languages go, it is quite tolerable. I have lots of issues with the language environment, though. Whatever Shelley may say, PHP is lousy.