It all started with video games.
My first was Super Mario Bros. 3 for the Nintendo Entertainment System, still one of my favorite games of all time (my cousin taught me all 3 warp whistle locations). I was enchanted by these little worlds, stuffed into microchips, packaged in plastic cartridges, sitting in a cardboard box in my room.
On an outdated, off-color TV I would explore these worlds. My parents upgraded me from the NES to a cheap, used PlayStation, which I thoroughly enjoyed and appreciated, my first game being the legendary Crash Bandicoot. I remember one of my cousins remarking how incredible the graphics were! It was truly a sight to see, compared to the NES, although we’re spoiled by today’s standards. I went to Blockbuster, rented the latest titles I heard about in GamePro magazine, and generally had a blast.
Then we got a PC.
Mind you, this was 20 years ago, in 1999, when I was 8 years old. Most families didn’t have a computer where I lived, in those days, unless it was some old DOS relic. However, a kind, caring teacher, who saw how I took to the machine in class, suggested to my parents that it would be a good idea to get a home computer running Windows (thank you Ms. Smith!).
We got a Gateway computer, a mid-range PC capable of surfing the web on Windows 98 (we had a million AOL discs, but ended up using a cheaper ISP pushed by Kmart, called Blue Light). More important than the web: it could play games.
We had The Neverhood. We had Carmen Sandiego. We had Oregon Trail. These were fun to me as a child, and The Neverhood still has some of the best claymation art to this day, but they weren’t the best games. I was an avid reader of GamePro, and later, Electronic Gamer Monthly. It was rare that either of them wrote about PC games, but they had to mention some of the greats, for comparison’s sake if nothing else. They raved about games like EverQuest and Diablo II, and of course, Doom and Quake.
When I was 13, I found an article in GamePro about how games are made. It talked about “game engine programmers”, these wielders of arcane black magic that would make a computer do your bidding. It made programming sound approachable, even fun! That, combined with a blurb about David Kushner’s Masters of Doom, led me to buy said book and tear through it like a demon.
John Carmack became one of my heroes. I read about and identified with parts of his childhood, like not having the computing power to realize your dreams, and wanting to create virtual worlds. I wanted to be just like him. So naturally, I picked up a copy of the book Carmack read on his way to hackerdom: Hackers: Heroes of the Computer Revolution by Steven Levy.
This book became my bible. I read about the first computer-generated music. I read about a Craigslist-like bulletin board built in the 70s. I read about the first game programmers, and galvanized, energized, gung-ho, I set out to become a hacker myself.
Where did I start? There was “How to Become a Hacker” by Eric S. Raymond, which became a field guide of sorts, telling me the steps I had to take to be considered a hacker. I took the first step, installed Linux, and dove into a rabbit hole I didn’t come up from for 5 years. I felt I had to learn everything about the system, and although I tried a couple of “Teach Yourself Game Programming in 24 Hours”-style books, programming didn’t stick at the time, didn’t really click (it’s no great surprise -- these books taught C++, using the Windows APIs and DirectX, far too advanced for a budding programmer).
I became a Linux fiend. When my family’s computer broke down, and we couldn’t afford to replace it, I built PCs out of junk boxes that were thrown on the curb as garbage around my neighborhood, gathered by my dad and brother on scrap metal searches. I had to run the most minimal Linux builds I possibly could to squeeze power out of these puny systems -- at one point I had 12 PCs stacked in my closet (and one server I could never get running), half of them functional in some form, the rest set aside for future use.
When it came time for college, I knew what I wanted to study: Computer Science. Maybe the gurus of the CS department could tell me what I had been missing when it came to programming. At Jackson Community College, I found my guru in the form of an Adjunct Professor who had been a programmer and system administrator for over 20 years: Dale Fay. Dale encouraged me to work on my own projects after I completed classwork, taught me countless Unix tips, tricks, and tools I use to this day, but most importantly, he showed me a language that would change my life.
Perl.
It may be ugly, but boy, does it get the job done! Combined with my ever-growing Linux skills, Perl was like a breath of fresh air after my experience with C++. As opposed to my futile attempts to push C++, Perl was useful. It was practical. It could do stuff, fast. Before I knew it I was automating away sysadmin tasks, generating config files, keeping track of album release dates, and itching for more...but our web programming segment was in PHP. Suffice it to say, I didn’t quite take a shine to PHP. I know now that Perl can be used in web programming (to great effect!), but at the time, I was in way over my head. I needed something easier to wrap my head around. That’s where I found Python.
Python was presented to me as a sort of alternative to Perl, again, by Eric Raymond. He showed how a thorny configuration issue could be solved with ease, with readable code even to a noob like me. What’s more, he did some metaprogramming, generating code with code, that would later prove to be an inspiration for my adventures in Lisp. But that’s another story.
With Python, came Django, the biggest, baddest library for Python, tailor-made for making web apps (it was naturally a bit server-heavy, by today’s standards, though that’s shifting back again). With Django, everything clicked. Everything had a place and a function, and thanks to the excellent documentation, I devoured it all. I learned about requests and responses, CSRF, URL encoding...I learned about everything I could get my hands on.
Python was a natural language for a beginner, almost the perfect language for a beginner. It’s expressive, but terse -- you don’t have to write a lot of code to do a lot. It’s an explicit language. It does what you tell it to, no more, no less. What if we wanted more? What if we wanted...magic?
Why’s (poignant) Guide to Ruby, by Why the Lucky Stiff (aka _why), is the ultimate programming book, the pinnacle of technical writing. Casting aside the bone-dry tone adopted by most technical books, _why rants and raves like a madman about the beauty of Ruby, an elf and his pet ham, “chunky bacon”, and a wild assortment of other delightful nonsense that helps break up the technical jargon. It’s geared towards beginners, but I’d recommend it to anyone who wants to know more about coding, or anyone seeking to improve their technical writing.
In the midst of _why’s mad genius, I fell in love with Ruby. Unlike Python, it had a touch of magic, an endless source of debate in Python vs. Ruby threads. It makes assumptions. It usually does what you want the first time, even if you’re guessing common method names. Rails, the de facto official web framework and the most popular library for Ruby, takes this a step further by advocating “convention over configuration”. With those assumptions, you can write code that’s extremely expressive in a small space without sacrificing readability.
Rails is where I hit my stride. I made a rudimentary todo app, a bug tracker, and an accounting app. By this time, I had dropped out of college, deciding to look for a real programming job instead. I still don’t know whether I should regret this decision to drop out, but at the end of the day, I traded one life experience for another, and I honestly couldn’t see my life any other way now. I wouldn’t recommend that you, the reader, should drop out of college, but personally, I wouldn’t trade my experience for anything.
With my bare-bones apps in tow, ugly as sin, I started submitting applications to every startup that sounded interesting. In that process, I applied to a little startup called Saygent that was working on audio analysis. As I had plugged my guitar into my computer and analyzed the sound waves with Python, a couple of years prior, this seemed like the perfect fit. I told them so, and a couple of months later, I heard back from Dane Lyons, my future friend and mentor. They sent me a tech challenge, I passed it, they flew me out to Silicon Valley, and I managed to land my first gig at an actual startup!
My career is fairly well-documented on my LinkedIn and AngelList profiles, but it’s not often you get to hear what led someone up to that point. I hope this has been enjoyable to read, and I truly hope it inspires someone out there to pick up coding as a hobby, as a thrilling exercise in creativity.
How did you start hacking? Share your story in the comments section!