Programming as a gateway drug

Ben Nadel brought up an interesting point in his recent kilopost in regards to how people get into programming. For him:

During this time, I was also learning ASP, PHP, C, C++, and some Java in college. [..] I never felt like I could excel at any of them. I was young and school was hard and it just wasn’t sinking in. [..] they let me start to play with ColdFusion and my world was changed forever. [..] ColdFusion just made “sense.”

I figured I’d tell my story because … well, I’m a storyteller. I like to tell stories.

My first computer was a Commodore 64 in kindergarten. A friend and I had already tested past a kindergarten level, so we were ushered back to quietly play games on the computer at the back of the room, as to minimize the disruption we might cause on our classmates’ education. We figured out LOAD "*",8,1 quickly enough, and within a day or two it occurred to us that this wasn’t like our Ataris: this thing had a command line.

Then we got to the page that showed the LIST command and tried it for the first time. The source code for a game where a crow picked letters and numbers from a corn field was laid bare before us. And look, there’s a primer on BASIC at the back of the instruction manual.

For me, the elegance of the control structures and code branches was a siren song. For my friend, the magic of the PEEK and POKE commands could not be denied. Between the two of us we played havoc on the innards of the programs until we understood them, then moved onto the next game.

Two or three years later my C-programming aunt a book: Elementary Pascal: Learning to Program Your Computer in Pascal With Sherlock Holmes. As it sounds, it mashed up two things that already had my avid fascination: programming and Sherlock Holmes. (What 8-year-old boy doesn’t go through a Sherlock Holmes phase?) I tore through the book for the Sherlock Holmes content, then went back and reread it multiple times to pick apart the code. I wouldn’t have access to a Pascal compiler for another 5 years, but that didn’t matter. It was logical and understandable, and there weren’t any line numbers or spaghetti code! That book literally fell apart in my hands over the years, it was so well-worn.

I continued working with BASIC, now on the series of TRS-80 leftovers that my relatives scavenged for me, but I knew that it was a kiddie language and that one day I would get to grow up and work with something real.

In 9th grade another computer friend loaned me his copy of Steven Levy’s Hackers: Heroes of the Computer Revolution and the same aunt gave me a book on C. Getting both books at the same time was an amazing coincidence that would again change my life. I used my dad’s modem to dial educational BBSes until I found a warez copy of Borland Turbo C++ 3.0. I liberated stole a stack of floppies from my dad and filled half of the 20 MB hard drive on my mom’s PC clone to install it.

To be quite frank, I really had no clue what I was doing with C, but it was still awesome. I shot myself in the foot with dangling pointers more times than I could count, but I was learning.

The first program I ever distributed on the Internet was written two years later. It was a Windows 3.1 app that was a micro-sized CD player controller. It had the basic media buttons, pause and play and forward and back. But it had a gimmick: it was small enough to fit in the title bar of other applications. When you switched apps it figured out which window was the foreground and moved itself so that it was always in the top right of that window, next to the min/max/close buttons. Thus, in an era before docks or Start bars or system trays, you always had access to your music.

As a 16 year-old kid, I though it was was brilliant. I uploaded it to CompuServe and Prodigy and AOL and every Gopher site I could find. It was probably buggy as all get-out, but it worked for me and must have for at least a few other people because I got a couple nice emails about it.

Then came my freshman year of college and access to the unlimited bandwidth of a public university. Again, Borland contributed unknowingly to my education when I got my hands on a warez copy of Delphi 2. Not only was it back to the language that had first taught me real programming, Pascal, but it was also WYSIWYG—no more mucking around trying to build GUIs with straight code! Looking back, I think that the transition to Delphi was for me what really drove home the separation between UI code and logic code, and contributed the most to the programmer that I am today.

My first forays into web programming, not just mucking around with HTML, were around the same time. Oddly enough, my first web programming language was back to one I already knew: C/C++. In a way, I almost miss writing web apps in C because they really, really screamed. And there was a certain simplicity to them: not much GUI code just plenty of bare metal logic. But then I remember the nightmare of trying to debug ISAPI DLLs … and I realize that I don’t miss it nearly as much as I might think.

I transitioned to Perl over the Christmas holidays in 1997. Yeah it was slower. Yeah, it used orders of magnitude more RAM. But there was no more compiling, and you had a much harder time making really dumb mistakes.