As programmers, we work in a discipline that is a bit different from that of many other people we know. Many other disciplines have developed to a point of reasonable maturity and stability, with a broad, long-agreed-upon base of knowledge, educational path, and perhaps even certification of some kind to show mastery. Programming, on the other hand, is comparatively an infant. The idea of programming as its own discipline is really only a few years old. Programming has no agreed-upon education of any kind- though degrees in computer science are widespread, it's not widely accepted that a computer science degree is necessary, or even particularly helpful for those going into a programming career. In contrast to a long-agreed upon base of knowledge, programming has gone through revolutionary changes every few years. Whether it's change of programming language or the changes in software development methodology, programming-related knowledge has a very short half-life.
Surrounded by a constantly shifting landscape of knowledge, we can't stay satisfied with the knowledge acquired a few years ago, or even a few months ago. Granted, it is probably a bad idea to constantly switch to the newest and coolest thing like some kid always reaching for the shiniest toy, forgetting the pile of neglected toys at his feet, but the discipline of programming is young enough that new, field-changing ideas emerge all the time. We're still finding the ground rules here. I suppose you could keep on working the way you always have, using the languages and techniques that have worked for you for years-however, if you do that without keeping an eye to the future and embracing key improvements, you will likely find yourself in a backwater of software development after some time. Not to mention, if truly improved ways of working come about, it could be considered unethical to blithely ignore them and deliver inferior products. On a different note, I feel that it's intrinsic to programming to explore-if exploration of new ideas doesn't excite you, you may find a career as a programmer a long trudge.
As a programmer, you must take responsibility for your own learning and the progression of your career. Perhaps you currently feel your company should do this for you; after all, it's work-related, right? If you feel this way, either change your mind right now, or think about reconsidering your career choice. Here's the thing-it doesn't *matter* to the company how you personally progress in your career and if you learn the new tools -all an organization needs to care about is if the staff as a whole progresses - and it can do that through new hiring if needed, saving them the work of training you. Truthfully, though you might find it unpleasant, your company might be perfectly happy if you don't learn-you can be the guy who babysits the old apps which you already know, and they can hire new, fresh guys for new projects. That's not so good for you though. If your project gets canceled, you can find yourself with antique knowledge and a lot of years of catching up to get to get yourself in a hire-able state.
From a company's perspective, keeping up with the pace of things is incredibly important - you don't want to be the company producing horse-buggies when Ford comes out with the Model-T. Though it can be "easier" to keep moving through turnover and new hiring, actively encouraging learning can really keep employees caring about your company and actively looking out for ways to get better. Though you might luck out on hiring the right visionary, creating and keeping a whole staff of loyal visionaries is going to be a lot easier and successful in the long run. (yes, it's practically a stereotype now, but think of google-many of their successful products emerged through side employee side projects actively fostered by the company)
On a final, personal note: as of early December, I joined the staff at Headspring, in Austin, Texas. One of the things that makes me happiest to work at this company is its commitment to growth and development of its staff, and its excellent balance between recognizing the things that have made the company a success, and recognizing that continuing that success means not resting on its laurels. Today, I will be spending the day at an all-day technical staff retreat, and I'm looking forward to it. Learning can be a lot of work, but it's really fulfilling. Off to learn now...
12-28-2009 9:01 AM