Volleyball for programmers
Reflecting on the year, I learned a valuable lesson about what I can and can't do. The things I could do ten years ago, but haven't really done since, are still doable, but very painful.
My "case-in-point": volleyball. I played a lot of volleyball in high school and college, but haven't really played consistently since. I had a chance to play in a tournament a few months ago and came to the realization: I, a decent volleyball player in the later nineties and early "aughts", am a shell of my former "glory". I didn't push myself exceptionally hard, and played how I would have normally played. I thought I played well for being away from the sport for few years, but came away extremely sore for days. That soreness was a shock.
As I discussed this painful situation with others and thought of how this could have come to be, I realized that our bodies and brains think we can do the things we were easily able to do in the past. I could once jump, dive, and run around like a crazy man all day, for days on end. Sadly, that's not the case anymore. I can still dive, but the rewards are less (such as the ball not getting saved) and the penalties are worse (soreness for days).
How did this come to be? Through simple atrophy. I have played volleyball casually throughout the last decade, even semi-competitively like this. But never have I been sore for days. The decline was gradual. At first, I was only sore the next morning, a few years later, sore for the entire next day, and now, sore like the out-of-shape computer dude I am for a few days.
So, what does this mean for you, the programmer? Your technical skills atrophy over time. I used to be really good at deploying and configuring Windows Server 2000 and 2003 for a ASP classic solution. I haven't done that in six or seven years. I think I can still do that, but I will likely have a much more difficult time than I would have had circa 2004.
That's an interesting example, because we truly have two sets of skills: those we care about and those we don't. It's unlikely I will ever need to do another deployment of that decade old technology again. That's a specific skill I can let atrophy.
On the flip-side, I've not done serious Java development in five or six years. I don't think I'll have a hard time coming back up to speed. I've coded C# in the meanwhile, and a lot of the patterns and practices can be shared between the two (for example, the concepts behind MVC are still valid, regardless of technology). Still, I should expect some "soreness" as I come back up to speed.
Once you get behind on a technology or skillset, you have two choices: risk it and wait until you need it, and endure a lot of pain once you do, or plan for it, and keep the skill sharpened by practicing from time to time.