Scott Hanselman recently stated, "I like hearing stories about how people got into computers and programming. Perhaps if I blog my story, you'll share yours."
My first computer was a Commodore VIC-20. I was in the 5th or 6th grade at the time. I think it was a Hanukah present, and I remember being very excited about it. The coolest part was that my parents also bought a cassette player for it that allowed the computer to store and load programs from a standard cassette.
Along with the VIC-20 came a few weeks for BASIC lessons from a local computer store. I remember coming home after my first lesson and I wrote a program that would scroll my name across the TV screen as it oscillated through all the colors of the rainbow. From that moment on, computers had me hooked.
I remember getting magazines with games printed inside and I would spend hours typing in the code to my computer to play them. Usually I would modify the code in some vain way to make myself the main character or some other nonsense.
In 7th grade we actually had a computer class in school. We had a computer lab full of Commodore PET computers. I had been doing it home so much that I essentially became a teaching assistant helping other kids and helping the teach write programs to administer math tests.
My best friend got an Apple IIe and we spent a lot of time trying to dial into NORAD just like Matthew Broderick in "War Games." We also spent a lot of time with the game "Where in the World is Carmen San Diego."
For my Bar Mitzvah I got an Apple IIc. It came with a green screen, but it also had an RF modulator so I could hook it up to our TV. I also got a subscription to Nibble and would enter in the programs from it. The one program I remember most was a simple program that was merely a list of pixel coordinates that when run would render an image of Alfred E. Newman.
For some reason, probably my interest in girls, I never got deeper into programming other that entering or fidgeting with the programs that were listed in magazines like Nibble.
In high school we had these fancy new Macintosh computers, and they had a program called Page Maker. With page maker I could print out documents that looked like professionals had made it. That got me interested in graphic design. My only programming was to make flash cards and simple forms in HyperCard.
In college I took a semester of Pascal, but I found that spending a couple of hours in MacKermit writing a program and then having to walk across campus to get the printed result was not terribly exciting. I wanted to make video games, but somehow I could never get past the "Hello World!" part of any of the numerous C, C++, Turbo Pascal, etc. books I bought thinking that spending an hour with a book and a night on my Mac would somehow produce a blockbuster video game like Mortal Kombat.
So the programming thing never took off for me and I graduated with a BFA in graphic design. But I was still a geek, and the first job I got out of school was for a "New Media" company that was starting to make interactive cd-roms. My limited programming background made me more useful writing lingo script for Macromedia director than as a junior designer on a team of seasoned graphic designers. In addition to the cd-roms, we would occasionally make these things called HTML pages for this new thing called the world wide web. I got really good and being able to craft pixel perfect HTML tables that would look just like the Photoshop mockups.
Eventually we were doing more website projects than cd-rom projects and our HTML pages were rapidly evolving from the giant image maps and needed more interactivity. I started learning how to modify PERL scripts I found on the internet for our needs. My company sent me to Java classes and I felt more like a "real" programmer having stepped up from a scripting language to something I could actually compile.
Then one day a friend from college called me and told me of an idea where foster children could log on an interact with their social worker using forms on a web page. I had built a few cold fusion pages but I had recently read about this new feature form Microsoft called active server pages and I told him that I thought ASP could do what he was asking. The next day I went to the book store and bought ASP for Dummies, fired up my PowerMac that had a Windows 95 emulator card in it that we used for IE compatibility testing, and wrote my first ASP application.
A year later I quit my job and went into business with my friend trying to sell this case management system. In the process I moved from the Mac and BBEdit to the PC and Visual InterDev. By the time we threw in the towel on our Dot-Com millionaire dreams i had gone from Graphic Designer to Designer/Developer.
From ASP I moved up to ASP.NET using WebMatrix for a good long while before convincing my boss to splurge on MSDN so we could get Visual Studio. By then I was spending a lot of time on the MSDN website and was learning about good development practices and things like application blocks from the patterns and practices group.
In what I consider to be a pivotal moment in my development career, I somehow stumbled across a DotNetRocks TV episode with J.P.Boodhoo. I instantly knew that TDD was the only way I wanted to write software, but the episode left me with a lot of questions, which I sent to J.P. in a long email that rambled on and on, much like this blog post. I really didn't expect a response, and I certainly was shocked when he called me the next day because he felt it would be easier to answer my questions on the phone than by email. not long after I was able to attend his Nothing But .NET class where I learned all about TDD and Design Patterns.
When I look back, that was the moment that I feel I truly became a software developer. After that class, the development process made so much more sense. I began listening to Dot Net Rocks, reading blogs of other TDD/XP, and Alt.Net practitioners. I stopped thinking of software as job and began to appreciate it as a craft that I truly enjoyed.
Sometimes I feel inferior to my colleagues who can write "real" software, managing pointers or writing assembly language. Some days I wake up worried that I'm going to be shunned for not having graduated with BS, or for having never written a compiler. But most days, I get to go to work, write some code I'm really proud of, and produce application experiences that my product owner never thought was possible. And for those days I am always grateful.