2006 is not over yet, even by my relatively lazy once-a-week blogging standards, but I am off on a vacation with the kids and some relatives to Disneyland (aka The Happiest Place on Earth), followed by a short visit to Las Vegas (aka Sin City). Personally, I would be happier just staying at home and catching up on some stuff, but then, you gotta give the family what they want sometimes. You know, payback for all the nights and weekends they suffer in silence while you pound away at fixing a bug or building the next great feature. So anyway, the upshot is that this is going to be my last post for this year. Not that I expect the blogosphere to react by going into withdrawal symptoms because of this, but I figured that this would be a good time to look back and see what I have accomplished this year with the blog.
I started the blog sometime ago, but only started writing actively since the beginning of this year. At first, it was only once in two weeks, but then I started thinking of more things to write, so it became weekly. Most of my blog posts explain a technology I investigated or a problem I solved using a new (to me anyway) technology, so it is hard to do this more frequently than once a week. That said, some of the raw material for my posts were generated during a single hour long train ride, although it would take more time to refine the solution to post to the blog.
Much of my posts involve Java, which is not surprising, since I am a Java/J2EE developer. I have been doing Java for about 6 years now, starting with Applets for fun when I was an Informix DBA. Late last year, I set out to learn Python, having convinced myself that it was indeed, easier to write and maintain than Perl, my scripting language of choice at that time. While I use Python only for scripting, I have found it to be quite useful, and I am happy to say that I haven't missed Perl even once in this last one year.
I was fortunate that Hibernate and Spring became the ORM and the MVC framework standards, respectively, at my last job, so I had the opportunity to learn and use them at work. Needless to say, I loved both the frameworks, although I still find it hard to force pre-Hibernate data models into the Hibernate straitjacket. However, compared to Struts and Webwork, the other two standard MVC frameworks I used prior to using Spring, Spring continues to make hard things easy and easy things trivial. My current job uses a custom JDBC framework for data access, but we are gradually introducing Spring and getting benefits in terms of cleaner code and increased developer productivity.
I also set out to learn Ruby, having been quite impressed at the ease with which one can build database-driven web applications using Ruby on Rails (RoR). Despite my best intentions, however, I continued to be unimpressed by Ruby the scripting language, comparing it unfavorably with my current favorite, Python. While RoR is impressive, I kept thinking that a Java based framework built with Spring and Hibernate would do the job just as nicely. I looked at Trails for a while, but I did not like the purely annotation based approach it advocated, and then I looked briefly at Sails, which seems to be using IoC and ActiveRecord with Hibernate. I haven't had a chance to look further, but I am convinced that there is a Rails lookalike out there, based on Hibernate and Spring, that's just waiting to be discovered. I even started developing one, using complex Ant scripts and Velocity to do code generation of the DAOs and Controllers needed for the scaffolding, but I gave up midway because of lack of time.
Along the way, I also looked briefly at Tapestry, even developing a little web front end to the Drools database repository implementation. What I liked about Tapestry was the ease with which one can plug in pre-built or customized components into pure HTML pages. What I would like even more is if I could integrate it with Spring's MVC, thereby using Spring's IoC instead of the built-in Hivemind, and having clean URLs. Maybe its possible now, since I haven't looked at Tapestry in a while.
I briefly tried to learn C++ (I moved directly from C to Java) by reading Bruce Eckel's "Thinking in C++" online e-books. I thought that there might be an immediate need for these skills, but turns out I was wrong, so there is less urgency to pick up this skill now. But this is definitely on my to-do list for next year. What I got from it is that C++ is definitely not an easy language to learn. The exercises may look easy to do, but there are always hidden gotchas that are waiting to trip you up. My advice for anyone wishing to really learn C++ from this book is to do the exercises and run the code, you will learn a lot from it. You may also consider using the CDT (C/C++ Development toolkit plugin) if you are an Eclipse user.
Actually, going back to my evolution as a Java programmer, the last 4 years at my last job turned me from a backend database/Java developer into a web developer. At my current job, I am gradually morphing into a Java search engineer, using Lucene and Spring to develop searcher modules, and various modules from Apache commons to develop modules to parse text for indexing. The cool thing about Lucene programming, and I think search programming in general, is that its a relatively new field, so there is a lot of room for doing really innovative stuff. I hope to do some of it next year, along with using the web development skills that I already have.
Overall, I think 2006 was quite a good year for me. I learned quite a few new things and had lots of fun at work. Hopefully, 2007 will be as good. Wish me luck, and have a very Happy New Year!