How I became a professional software developer
Many people, in their quest for a new vocation, have asked me how I've managed to land a successful software development career without proper academic background or training. While I feel like I've known how to write software my whole life, there are some key steps I took to overcoming obstacles, learning new languages, understanding new concepts and building a portfolio capable of landing you in a new career.
The year was 1986. Bright, edgy fashion and synth-pop dance music were dominating the US. Reagan was in his second term as president, the cold war was upon us and all I knew was that I wanted a Nintendo Entertainment System and really liked computers, as I was just 6 years old. That year my parents were cool enough to bring me home an Apple II. I remember very little about actually using it, as it was too good to be true. We couldn't keep it for long, as it was just a demo machine, I recall, for one of my parents' jobs, but it was replaced without haste by a less-than-fancy Kay-Pro II.
The Kay-Pro II, I thought, was a fine piece of machinery. A monochrome screen, 2 5.25" disk drives and 64KB of ram powered this CP/M-driven machine through years of my childhood. It was on this very machine I learned BASIC, understood variables and figured out all the ins and outs of a command-line interface. I was fortunate enough to not only have a mother willing to sit down and figure out how to write programs with me, but also fully-intact manuals that I could actually understand.
By the age of 8 I understood a few simple concepts with programming. Mostly that variables hold words and numbers, loops repeat the same lines of code and conditions check variables and execute code depending on what you specify. This was all ok but I really couldn't figure out how to write anything bigger than a few hundred lines of code without everything falling apart or becoming totally unmanageable.
I was put through computer camp at Concordia College from the age of 9 to 14. There I learned a few new languages including Logowriter, Pascal and some very rudimentary C. I also found a love of robotics, as they had many Fischertechnik robotic sets as well as a rhino learning-arm that the students could play with. One of the very last projects I worked on was software to control the trainingsroboter arm in a meaningful way. It never quite worked right, because I never really understood the big picture with how to write software.
![]()
(Fischertechnik Trainingsroboter)
At the age of 13 my parents bought my first real PC, a 486sx25 w/4MB of RAM and a 214MB HD, which came at a bargain price of $2500. Within the first week I had already taken it all apart and laid the parts in order just to see if I could figure out what everything in it did. To be honest, I mostly used it for playing video games, but about a year later I had discovered the power of the modem and started running my own BBS (Bulletin Board System).
I was mostly interested in running a BBS for one reason - customizing it. My BBS of choice was called Virtual BBS or VBBS. VBBS was cool for mainly one reason - it had a really nice scripting language (vscript) that let you customize the software without having to understand the real source code of the entire thing. I wrote absolutely everything in vscript. I pushed the language to it's limits trying to do the things I wanted to. Looking back, it was one of the worst languages I've ever seen and I can't read a single line of the code I wrote in it, but it did get the job done. Here are the old vscript archives that I worked on.
A year later I found out that a man named Patrick Volkerding, who lived in the city of Moorhead, MN, just a few miles from me, had created a disk-installable version of the new free unix we'd been hearing about called Slackware Linux. My friends and I all tried this OS out and were impressed by what it could do, given that everything was a scriptable, text-based interface.
Without having any money to buy software that did what I wanted to, my best option was to script things in linux that would get the job done. I learned how shell scripting worked and how to put together multiple smaller components in the UNIX way to accomplish a bigger goal. All of this was the background that landed me a couple of UNIX Sysadmin jobs starting in 1998 that got me deep into script territory.
For the first few years of sysadmin work, I mainly used shell script and perl to write the basic system automation that was needed at my companies. It got the job done, but all of the code was straightforward, not well engineered and definitely not scalable to work as a larger application.
During the last job I had as a sysadmin, I was introduced to Python. I proceeded to write Camero, which was an extension of a simple Python script written by a friend of mine. I studied Object-Oriented (OO) software design and rewrote the app a few more times, restructuring it to allow for added functionality without having a really messy code base.
2001 hit and we were all laid off. While most of my friends were spending their time doing various fun activities, I spent my time at home reading and trying to get better at developing software. I read a books on Java 1.2, Algorithms in C, Design Patterns, Refactoring, OO Development, HTML, Javascript, Relational databases and a few others nearly cover to cover while attempting to write various applications that I had thought up.
My first application outside of Camero was called Fast Image Viewer. It was just an applet in Java that allowed you to view images with slightly better functionality than the web browsers at the time. It never really worked that well, partially because of limitations with the applet API and partially because it was one of my first attempts.
I was always interested in robotics, so I purchased a Fischertechnik arm and wrote some interface software for that. I also wrote some controlling software for CK1610-based home automation as well as a DNS caching module in Python.
![]()
(Fischertechnik Industry Robot)
At this point I had implemented a database backend for Camero and so had given myself some SQL experience. I took on the task of writing videoconferencing software as my last project before finally putting together my portfolio that I could use to get my foot in the door working full time as a software developer. I never quite finished the videoconferencing software but the rest had taught me enough to be able to write almost anything I wanted.
It took me a few years of scripting and about 9 months of full time self-training to be able to say that I can write almost anything I want. I've been employed full time ever since.
During my employment I've had various side projects, one of which was a multi-player online first person shooter. The game was challenging enough to write by itself, and while I had it playable and working, I just didn't have the resources to develop all the content for it. After almost a full year of effort, I had to give it up. I'm glad I went for it though, because I learned plenty about 3d programming and highly efficient networking.
More recently I participated in the Netflix Prize contest, but withdrew after about a month of work, as I could only get my algorithm within 5% accuracy of Cinematch (their algorithm). I learned what I wanted to about developing recommender systems so I was happy with the whole deal.
How this all applies to you
Originally I had geared myself to learn how to write pure server applications, web applications, pure client-side applications and fat client/server applications. In the next article, I will show a high-level view on what needs to be learned to be able to develop those.
Related Articles
Categories
Editorials1 TrackBacks
Listed below are links to blogs that reference this entry: How I became a professional software developer.
TrackBack URL for this entry: http://www.rbgrn.net/blog/mt/mt-tb.cgi/7
Almost anyone can write little scripts to do simple tasks or write little code snippets that print hello world endlessly but to actually develop a really useful application requires a little more time and knowledge. I've put together a... Read More



mannn... you life is almost similar to mine... but u are 7 years elder to me...
and I have gone into proper software development. I mean using patterns etc in the age of 19... in 2 months im 20 !!! im worried...
Have the same interest in game programming... even know reasonable amount of opengl... but never worked with engines.
moreover.. i was introduced to computer very well only in 2000... i started to learn BASIC and forpro... phew !!! I have dugg this article too...
I have desires to work with large, really large open source projects... donno how to start
The large projects is where things start to get difficult. I'm sure you're at the point of where you understand languages and basic design very well and feel capable of writing almost anything. That's excellent! I've been working as technical project manager for some time now and all I can say is that the larger your project is, the more organized you need to be. Consider reading a bit about project planning if you have a big idea and get a few people to help you out with it. I've tried to write some very big things myself and found the work to be very intimidating until I got some more resources and started organizing things from a higher level.
As far as game programming goes, check Garage Games. It's a good place to get started with game development.