Scratching the Itch
To be successful in a career in computer science and information technology related fields, one needs to embrace new technology, be inquisitive, and explore. We have bounds with respect to the technology used in our work and in our education, but good technology folk have a desire to expand beyond those bounds, whether it be for a particular technological benefit or simply the desire to learn something new. Satisfying the latter is, I think, very beneficial and healthy to those who study and work in this field.
I have worked in the information technology field for more years than I care to mention. Through the years, I have seen many new technologies arise. These may include programming languages and paradigms, productivity software suites, operating systems (and versions), devices and hardware, web services, API's, or anything else that might come down the pike. From time to time something just comes along that piques my interest, and I feel the need to go after it and do something with it. Exactly what to do with it, at times I'm not sure, and I'm not sure it matters all that much. It just needs to be something. The itch needs to be scratched.
Over the past two or three years, I've been fascinated with the Python programming language. I find it quite interesting and elegant, with features and approaches I have not seen in other programming languages (and I have worked with many). It was something I just had to explore. At the time, my department at Cedar Crest College was charged with crafting Sudoku puzzles for the college newspaper. Of course, as a programmer I looked to automated solutions. This was a great opportunity to learn a little Python. I thought that writing a puzzle generator, with a graphical interface, in a new language would certainly be fun and exciting. So I took that on as a project. I didn't learn enough to become an expert Python programmer by any means, but I definitely learned enough the satisfy my curiosity. The itch had been scratched.
Sometimes the urge leads to something much more practical. In the early 00's, as I was developing my skills as a PHP/MySQL programmer, I found the need for a generalized template system for my projects. Sure, there are plenty of such systems available, but nothing I would consider to by anywhere near a standard. What started as basic experimentation with configuration file parsers, automated include file processing, XML parsers, and Ajax processing techniques, has grown into a fairly sophisticated application framework. It has become the basis for many of my projects over the better part of the last decade. Developing the underlying system has, I think, been much more fun than the many of the projects for which it served as the basis, but the system has made me countless time more productive as a result. This one continues to itch, and continues to be scratched.
This very web site is the result of having scratched an itch. I wanted to established a blog, and desired to implement it using an open source content management system. I looked to two such systems; WordPress and Drupal. I settled on Drupal because of its extensibility and versatility. After a little research and an installation on my development server, a working blog was born. This one, however, continues to itch. As of this writing, I am using a publicly available Drupal theme for presentation. I really want to create my own custom theme. I'll be scratching that one soon. You can expect to find a whole new look to this site in a month or two.
I can recall countless other times when a simple curiosity led me to dive into some new and interesting project. Sometimes productive and directly related to the task at hand, and sometimes only for the benefit of learning something new. It has always kept this field fun and exciting for me.
It's a healthy thing for a programmer to scratch the occasional itch. I think that, in the long run, the short diversion makes one more productive. But it's important that we don't divert too far from the task at hand. There is still, after all, work to be done.