I was around three years old when my dad got hold of a second-hand Commodore VIC-20 through a friend of a friend. That VIC-20, though I didn't really use it very much due to my age, was my first introduction to computing. I fondly remember blowing up the buildings in Vic Blitz, which had come with the computer. It wasn't until a few years later when my dad purchased a Commodore 64 that I cut my first program, though.
I must admit that I can't remember what my first independently-written program was. I remember copying out lots of the examples from the Commodore 64 User's Manual, which I still have a paper copy of albeit not the original one I had. One example I particularly remember was the number guessing game, which I had great fun customizing so that it proudly proclaimed that it was “MARTIN'S GUESSING GAME!” on startup and produced output in various colours.
Meanwhile my dad was also programming the Commodore 64. When I wasn't screwing around writing little programs I was playing the games my dad had written for me, which all had very imaginitive names like Mazes and Sums. As my programming skill increased, I began to hack on these games myself — in the process learning the value of backup copies after my dad had to repair my destroyed version of the Mazes game.
I don't remember at what point the Commodore Amiga 500 was purchased other than that it was shortly after the Commodore 64 died with a screen of spectacular colours and characters. I basically grew up with this system, though. My dad bought a copy of AMOS: The Creator, which was a BASIC dialect specifically targetting the custom hardware of the Amiga. AMOS made it easy to do cool things with the blitter and the copper, which were the two main ways to do clever tricks with the graphics hardware. Eventually I progressed to writing C (using a shamefully pirated version of Matt Dillon's DICE compiler), though I ended up mostly just using it to tool around with the custom chips, so I didn't really learn much about C as a language until years later.
It was a couple of years into secondary school that everyone started to get PCs and the other systems fell by the wayside. I lost access to my A500 when my parents divorced and I lived with my mother, and my uncle was kind enough to give me his old A500, though by this time it was on the way out and died not long afterward. I scraped together my meagre savings combined with contributions of birthday money and bought myself an A500+, which had already been obsoleted by the AGA Amigas by this point but was the best I could afford. I was an Amiga stalwart for several years after the demise of Commodore, though my family did posess a Compaq 286 machine with an EGA graphics board that quickly frustrated me.
Eventually the desire to show off my programming prowess to my friends made me give in and learn how to hack a PC. My Amiga started gathering dust under my bed and I slowly learned how to abuse my 286 box to do my bidding, albeit only in 16 colours. Unfortunately by this time I was competing with the likes of Doom and Duke Nukem 3D, so my slowly-accumulating knowledge of the PC architecture couldn't keep up with the big boys as I'd been able to do on my Amiga. At this point I largely left programming of games and graphics demos behind and set my sights on application programming. This must have been around 1995 or 1996, since I remember that Windows 95 was still new and I was, as ever, stuck in the past with a 386 laptop that didn't have enough RAM to run Windows 3.1 in “Enhanced Mode”.
As I had done on all platforms until this point, I started with BASIC. Visual Basic 3, to be exact. It wasn't long, though, before I started learning C — for real, this time — and the Windows API. I never really made anything particularly impressive, because application programming didn't really grab me as much as had games and graphics programming in my younger years. Fortunately, something was coming just around the corner that would recapture my interest: the Internet.
I don't really remember what first got me into web development and network programming in general. Looking back, I think it was the idea that now not only would I be able to hack on my own computer, but on an entire network of computers. It actually took a while for my mum to agree to get an Internet connection, so I spent what I realise now was an unreasonable amount of time around the houses of friends with Internet access, screwing around on their Internet connections and running up their phone bills.
Given that the Internet and networking in general were still in their infancy, at least as far as software and adoption were concerned, I was back in a situation where I could compete with the “big boys” and impress my friends, and I think impressing my friends is honestly what's driven almost every programming endeavour I've entered into to this day. I wrote a peer-to-peer chat client for my school's LAN, which pissed off the teachers but was quite a popular skive in IT lessons. I wrote my own IRC server at one point, though to this day I really have no idea why.
At about the age of 17 I discovered the world of open source. This very quickly attracted my attention, again presumably because of the potential of having millions more “friends” to impress than I had ever had before. Coincidentally at about that time I'd been tinkering with LiveJournal, and not long after Brad released the source under the GPL. I learned Perl, having previously only really done BASIC and C, and started hacking on LJ.
I will confess that I got a little high on the attention I got from doing LJ development. For a time I was quite “famous” in an odd sort of way, and in lots of cases that brought out the worst in me: I was still young, nieve and arrogant, and boy did I let it show. Once I turned 18 and went to university I mellowed out a lot, and although I carried on with LiveJournal development I saught attention a lot less as time went on. Now I'm older I'm a lot less obsessed with showing off, and most of my time is spent on my own personal projects which rarely see the light of day.
So what was the purpose of this journey down memory lane? The goal of writing all of this down was to see if I could find any common ground for today's children to get into programming. Sadly, I think it's quite clear that the days of a seven year old screwing around with the registers in the graphics chip of his PC are long gone: today's systems are just far too complicated, and it's now much less common to view a computer as a toy to be tinkered with.
I think the essense of those systems — the simple but clever custom hardware — is something that can't be recreated on modern systems. Today problems tend to be solved by brute force rather than by clever approaches, and I at least don't find that terribly satisfying.
Moving forward, are we going to see a dwindling number of young programmers? Would I have got into programming if I had been born fifteen years later? Is there something else for kids to tinker with today that'll take the world by storm ten years from now? I guess we'll just have to wait and see…