Recently,, Mike Eaton started a new meme within my Twitter tribe: discussing how we found our way to the joy and light that is software development. :) My story might not be particularly interesting, but I figured I’d share it nonetheless.
I’ve been interested in science fiction as far back as I can remember, and so my fascination with computers developed at a very early age. Rather than play with my toys when I was young, I’d often take large pieces of cardboard cut from the sides of boxes and draw keyboards and screens on them with Sharpies. I’d sit in front of them for hours and pretend I was flying a space shuttle or doing whatever the hell else a young kid thinks computers can do.
When I was 6 years old, My grandpa bought me and my sister our first PC, a Tandy 1000 SX, with a CGA display, a roaring 7.16MHz 8088 processor and 384K of RAM. (And hard drive? We don’t need no stinking hard drive.) Rather than buy all sorts of games for the computer, my mom bought BASIC Computer Games, a book containing the BASIC source code to a bunch of different games. She would enter the source into GW-BASIC, and I would play the games. At first I just played the games, but eventually, I recognized that I could change the way the games worked by changing the way I entered the source code from the book. I started by making simple changes to the games (if I remember correctly I changed one so my name would be at the top of the high score list), and little by little the changes got more complex. Eventually I’d taught myself GW-BASIC.
When I was about 10, I wrote a half-assed word processor application. I learned the special command codes for bold, italic, and underline for dot-matrix printer, and made a cheap markup language — something like B(bold) would be printed as bold text. I was a strange kid. :) For some reason, I was amazed at how I could make the machine do what I wanted it to do. Once I was in middle school, I was introduced to the Apple IIc, and armed with my knowledge of GW-BASIC, I learned AppleBasic, and wrote some simple little games.
Eventually, I graduated to a Packard Bell computer, which had a VGA output, a 386mHz processor, and a hard drive. This plunged me into the wonderful world of Windows 3.1. Around this time a phenomenon called “the Internet” was also starting to become popular, although the majority of the computing world was still oriented towards BBSes, and the Web was very much in its infancy. After trying and failing to convince my parents to sign up for CompuServe or AOL, I discovered the Akron Regional FreeNet (which is actually still around under the name ACORN), a dial-in BBS service through the local library. ARFNet also provided access to Gopher, and text-based access to the WWW via Lynx. It also had a service for IRC, which I used to meet other young geeks from the area with similar interests in programming. As it turned out, a couple of the people I met were volunteer administrators for ARFNet. They recommended me to the sysop, and I joined as an admin myself, which meant I could break out of the BBS system and get shell access to the two Solaris boxes that the system ran on. The other admins helped me learn UNIX and got me started learning C. I remember understanding C’s type system and functions, but never did anything very substantial with it because I couldn’t wrap my head around pointers and memory management. (That light bulb came on a few years later.)
Eventually, one of the other ARFNet admins set up a MUSH, which was basically Second Life before there was Second Life. :) It was a text-based virtual world that you could “walk” through and interact with objects in the environment. The objects were programmed in MUSHCode, which was kind of like LISP. I spent way too much time learning it in order to create a giant mansion and spaceships that could fly to different parts of the “world”. We ended up creating a virtual economy, along with shops and vending machines that you could use your “money” in.
In 1999, ARFNet introduced PPP, which meant that I had dial-in access to the Internet-at-large. Amazed at how much more advanced the Web was than any of the text-based stuff I’d seen before, I set out to teach myself HTML. I also got involved with IRC on a larger scale than just a few people, and I met some people who I’m still friends with even today.
Sometime around the turn of the millennium, I got my first job as a website developer at Signature Words & Pictures, one of the millions of design firms that decided to branch out from print design to interactivity during the first tech bubble. I was mostly a graphic artist there, but I also discovered PHP, which let me add some intelligence behind the layouts that I was creating. At work, I only had occasion to use PHP for little things like email response forms, but on my own time, I set out to learn everything I could about the language. I’ve always been interested in framework development, and I remember creating a templating system that let you embed tags in HTML, and when it was preprocessed, it would execute bits of PHP code — basically, a half-assed version of ColdFusion, although at the time I’d never heard of it.
At the same time, I started college at the University of Akron’s computer science program, where I was exposed more formally to concepts like combinatorics, data structures, computer architecture, assembly language, and later, object-oriented programming. My prior knowledge of most of the topics let me spend a lot of my time learning things outside the classroom, including C++, Perl, Java, and a little bit of C#. It wasn’t until probably my second year of college that I really understood what was going on in the computer.
The “Real World”
My first real programming job came in 2004, at the company that I’m still working at now. 2004 was not a good time for software developers, at least in the Northeast Ohio area — there were a lot of graduates, but not a lot of jobs available. I sent out about 100 copies of my resume to every company that I thought might be interested in having a software guy on staff, and got one response. As it turns out, one of my friends from college had recently been hired there, and he recommended me.
The company is traditionally a Linux development shop, and so I started out writing a lot of PHP and C++. A few months after I started, the company needed someone to learn C# to work on a new project, and I stepped up. I was immediately attracted to the simplicity of the language, and its familiar roots in C and Java. As I tend to do when exposed to a new technology, I devoured every scrap of information I could find on the .NET platform. A few years later, I’m hopelessly addicted.
The most fun I’ve had programming was seeing the original version of our RFID-tracking software in use at a live NASCAR event in 2005. At the time, I didn’t have a lot of experience watching users work with software I wrote, and I felt a tremendous amount of pride knowing that I’d been involved in creating something that was useful to others.
Knowing what I know now, I absolutely would still have become a software developer. It might sound odd, but I feel like I was born to do this stuff. It’s almost like my brain is hard-wired to understand computers. Neither of my parents are really that interested in technology, but somehow it got into my blood at an early age and it’s become a part of me. Sometimes are less fun than others, but this is definitely what I’m built to do.
To give advice to other would-be or novice programmers, I’ll steal a phrase often attributed to Confucius:
To know, is to know that you know nothing.
When I graduated from college, I was sure that I knew everything about how software was written. Every lesson I’ve learned since has taught me how little I (or anyone, for that matter) knows about what we do. Be confident in your abilities, but recognize that it is only through humility and great effort that you will find wisdom.