From systems administration to wireless sensor networks to Ruby on Rails, my interests have ranged far and wide within the software world. I started in Java, then worked my way up from 8051 assembler through C and C++ for the Palm Pilot to Ruby on Rails for web applications.
Computer games have never held much interest for me because they are limited. Once you “solve” the game, the rest is boring. I discovered early on that programming isn’t like that. It’s totally open-ended, limited only by my ability to conceive of projects to work on and the time I can dedicate to them. Programming is both my profession and my hobby, not to mention my entertainment. Settling in for a good 4-hour coding session is exactly what I’d like to be doing on Friday night.
Building software to me is a craft, much like woodworking or blacksmithing. It has components of art and science, as well as engineering. A programmer doesn’t necessarily know exactly what he’s building until he’s finished it, and the process is almost as important as the finished product. Sure, you can try and mechanize the process by outsourcing development work to third-world countries, but that’s about like outsourcing physical manufacturing. It works, but the products you get back are poor imitations of the true craft. I believe there will always be a place for software craftsmen in the world, and I endeavor to be one of the best.
I’ve learned that programming isn’t that easy, though, and sometimes you need a process. Some people chase the latest fad, whether it’s Extreme Programming, Agile, or Scrum, in the hope that somebody has solved software engineering. So far, it seems to me an unsolved problems. Companies big and small struggle under their technical debt and inefficient processes, and software systems turn out ugly and buggy more often than not. Software engineering has not yet matured as a discipline, but I believe that it must in order for technology to march forward.