A trend I’ve been seeing in the development community, is people sharing the story of how they got into software development. I’ve found many of these stories to be both interesting and inspiring, so I’ve decided to share mine in the hopes that it will be of use to someone, and in hopes that doing so will inspire me to write more as well. **Be warned: the story below is quite long**.
A Foundation Set by My Parents
My first memory of seeing a computer was when I was around 6 years old. It was “take your child to work day”, and my father took it seriously. He was a medical transcriptionist, but his department used computers to do their job of typing up doctor’s reports. I remember one of my dad’s coworkers set up a word processing program on one of their computers and let me type on the keyboard.
I was fascinated. I hit letters on the keyboard and they would appear on the screen. From there I could backspace them, move the cursor, all kinds of stuff. How could something like this possibly work? To my 6-year-old mind, the computer seemed like magic. And I decided right then and there that I *hated* magic. Incomprehensible things must be understood and made to fit with my model of the universe. And so I decided that I would learn about these mystical “computers”, until I was satisfied that I understood their inner workings well enough that they were no longer magic.
From a very early age my mother worked very hard to teach me to read, practicing with me constantly. I was able to read short children’s books myself at 3 years of age, and was reading young adult novels not long after. I regard this early intensive reading education as one of the greatest gifts my mother ever gave me, since it allowed me to broaden my horizons starting from a very early age. My mother also provided me with an endless supply of reading material, since a trip to the library to borrow more books was part of our normal weekly routine. So it was that after my first exposure to computers at my father’s work place, I began borrowing every book on computers that caught my eye. I started in the library’s children’s section, and in later years moved up to computer books aimed at adults.
Learning Programming Without a Computer
I don’t remember many of the books I read in the early years. But one that sticks out in my mind was the book
Write Your Own Program: Creating a Database Adventure Game by Steve Rodgers and Marcus Milton. That book was aimed at children, and contained code for a simple text-based adventure game set under the sea. The game was written in BASIC, and variations were included for both the Apple IIe and Comodore 64 versions of the language (though I had neither). I read this book through several times. And although my 6-year-old brain couldn’t completely grasp some of the concepts in the book, I remember coming to the following important realizations:
- Computers can be programmed.
- Those programs can be video games
- I can somewhat understand this book. Therefore, I can potentially create video games.
I was hooked. I decided right then that I would be a programmer when I grew up, and I never looked back. I immediately started working on writing my own programs based on what I’d read.
You must understand though, that at this point I still had no access to a computer. So when I say I was “writing my own programs”, I mean on paper. With a crayon. None of my Crayola-based programs were ever actually keyed into a real computer, of course. But that did not dampen my enthusiasm at all.
My First Computer – The TRS-80
One of my Mom’s friends ran a business out of his basement repairing computers, arcade machines, and other electronics. He was getting rid of an old TRS-80 computer, and asked my parents if they’d like to have it for the kids to play with.
At the time it was given to us, the TRS-80 was already hopelessly outdated. In an age where other kids had computers with “hard drives” and “colors”, I was getting a computer that only displayed green, and required a 5.25-inch floppy disk to be inserted before it would start up. I didn’t care. It was a computer, and it had a BASIC interpreter, and it was mine. I remember the day I got it, my Mom’s friend showed me how to launch BASIC from the command line, and I typed my first program:
10 FOR i = 1 to 10000000 20 PRINT i 30 NEXT i
I typed `RUN`, and the computer proceeded to count to 10,000,000…very…very…slowly. After 20 minutes or so I finally turned the computer off because I didn’t know how to stop a BASIC program from executing. Still, I was amazed. I had finally written a real program on a real computer! And it worked!
Over the next year or so I wrote more programs that were somewhat more complicated. I used my limited allowance to buy more floppy disks so I could store them. The programs I wrote were very simple. Things like “guess a number between 1 and 10” or a program that would send ASCII-art to the attached dot-matrix printer.
Along with the TRS-80 we were also given a couple games, including Asteroids. Asteroids was probably the very first computer game I ever played. It was fun and ran smoothly, much more smoothly than anything I was able to write in BASIC. I couldn’t figure out why my programs and games performed so badly when Asteroids ran so fast. I didn’t yet understand the difference between interpreted and compiled programs, or the limitations of the hardware I was using. Still, I felt a great sense of accomplishment and what I’d been able to program so far. And I knew that if I just kept at it, I would be able to make games like Asteroids in time.
Spurred on by a Friend
When I was around 9 years old, I met Scott. Scott was several years older than me. But when I learned that he like programming, we hit it off. He had a much newer computer than mine. It was an 80386 with 256-color VGA graphics. Scott introduced me to QBasic, and he showed me the games he was working on. He had a Q-Bert clone/sequel that he had gotten pretty far along. I was amazed at what his computer and QBasic made possible.
Not long after I met Scott, the same friend who had gifted us the TRS-80 once again gave us an old computer he no longer needed. This one was an 80286 with a 40 MB hard drive. It was still inferior to what Scott was using, but it ran QBasic. I got Scott to give me copies of his programs and I learned by reading his code. I also remember spending a lot of time with Gorillas.BAS, which was an example game Microsoft bundled with QBasic for newbies to learn from. The game featured 2 gorillas who would take turns throwing exploding bananas at each other. It was controlled by manually typing a throwing angle and speed into the keyboard and then adjusting after seeing the results. I was constantly copying and tweaking that game’s code. I made the tiny explosions in the game huge. I made the bananas change direction in mid-air. I made it so no matter where the bananas landed the game would interpret it as a hit on Player 2. It was glorious.
Using the what I’d learned from Scott and from Gorillas, I started making my own games. The largest one I made was called Paper Man. It was about an anthropomorphized piece of paper that shot pencils. I was perhaps 10 years old when I wrote this game, and I am very proud of it to this day. Despite the fact that I’m a much better programmer today than I was then, I don’t think I’ve ever gotten as close to really *finishing* a personal game project as I did with Paper Man when I was 10. It had several themed worlds with bosses and everything. I regret very much that 10-year-old me did not yet understand how to make proper backups. Alas, no copies of Paper Man have survived to this day.
Scott gave my programming skill one more really big boost in the form of an unexpected gift. After I’d known him several years he showed up at my house one day with a book called Moving from QBasic to C. He told me he’d seen it on clearance and thought of me. That book completely revolutionized my understanding of programming. I purchased a copy of Borland C++ using the money from the paper route I then had, and within a few months I was writing code with pointers, null-terminated strings, and even some inline-assembly language. And these programs got compiled into an EXE that I could distribute! It was then I finally felt I had “grown up” as a programmer, although of course I still had a lot to learn.
An Early Business Venture
Armed with my newfound knowledge of C, I decided it was time to start making money from my craft. I naively assumed that it would be easy. I didn’t have any business knowledge, but I was familiar with the shareware programs I’d received from my friends. Most of these included a free version of the program, with instructions on where to mail a payment to get the full version. I decided I would use the same model.
I created a program I called Programmer’s Image Developer, or PID. It was a simple paint program for creating sprite-based graphics for games. It was likely inferior to every other tool that game developers of the day were using to draw their graphics. But not having been exposed to the tools professionals were using, I didn’t know that. I figured I’d put the free version out in the wild, and then ask people to mail me money to unlock the free version. People would undoubtedly want to do this and I would have a steady income.
My flawed childish understanding of copyright law led me to believe that I had to register for a copyright before I could sell my software, so I did. I spent some time doing research on what forms I needed, and then I printed out the source code for my program and sent it to the United States Copyright Office. My copyright was officially registered with the Library of Congress on May 9, 1995. I was then 12 years old.
After receiving acknowledgement of my copyright registration, I gave a copy of my program to an adult that I knew had internet access, and I asked her to upload it somewhere that people would find it. I then sat back and waited for the money to roll in.
Perhaps unsurprisingly, an expensive tool aimed at game developers written by a 12-year-old with no real game development experience and uploaded to who-knows-where by a random adult sold a whopping zero copies. However, this did not deter me at all. I figured that it might take a while for news of my program to spread, and I was patient. By the time I realized that I wasn’t going to make a sale I was already a much better programmer who had moved on to bigger and better projects, and I was content to forget about my previous work.
The Internet, and Becoming a Professional
In the spring of the year 2000, I decided that I would be a full-time professional programmer before I turned 18. I approached this with the same blind optimism that I did when attempting to sell my software at age 12. This time, however, my efforts paid off. I found an ad on the now-defunct ComputerJobs.com from a company called Chameleon Power. They wanted to hire a junior web developer and were looking for ‘talent, not necessarily experience’. I wrote up my resume and applied, including in my cover letter links to my Tripod home page, a site I did for my Asheron’s Call guild (which is amazingly still up!), and some C++ software I’d written.
Looking back at my old web site, I’m somewhat embarassed by what 17-year-old me apparently thought was cool and stylish. But something must have impressed the hiring manager. Because I got an interview, and then later got the job. The very first software development job I ever applied for. I started working for Chameleon Power in March of 2000, at the age of 17, for $12/hour. There was one other developer working there at the time. Chameleon Power used a lot of technologies I’d never been exposed to before, such as SQL and Coldfusion, but I mastered them quickly and soon earned a much more respectable wage. When the lead developer quit a couple years later, I moved into his role and the rest is history. Although to further my career and my skills I eventually had to leave Chameleon Power, I still look back with appreciation on that first company that was willing to make a leap of faith and hire a self-taught teenager to his first real programming gig.
I continued learning and experimenting with side projects in C++ while doing web development at Chameleon Power. I would occasionally contribute code or screenshots from my projects to sites like Flipcode.com, where hobby game developers gathered. These days I continue to polish my programming skills by visiting user groups, reading blogs, attending conferences, using sites like Stack Overflow, and of course I still buy books. But I know that despite all the effort I put in to learn my craft, I wouldn’t be where I am today without my parents and friends who supported and inspired me, starting from so long ago.