In Economics theory, you learn about capital investment. This is investing in more modern infrastructure, more productive factories or tools, and so forth, that let people produce more goods (and/or better quality goods) with the same amount of effort. Countries or businesses that fail to sufficiently invest in capital assets eventually fall behind ones that do, as they are simply less productive.
Software developers need to invest in their own productivity as well, in their own way. A developer skilled in an out-of-date technology, but ignorant of modern evolutions, may find his or her marketability limited in the future. On the other hand, a developer with up-to-date, well-honed skills will have a much brighter future, and be more likely to cope with hard times.
A software developer may choose to invest his or her time in training or research in a particular technology or technique. This is in general a wise move. The developer will expect to get some return on his or her investment over time. But, from a corporate point of view, this may comes at a cost if the investment is done on company time, in lost billable time, and in some cases in additional training or consulting fees. For a company, a developer's know-how is the equivalent of the investor's assets, and the company will also expect to get some return on investment in terms of improved productivity. So the choice of where to invest your time is just as important as the choice of where to invest your savings. Choose carefully! Playing around with an obscure web framework may be fun, but will it be useful in a year's time? If the company is paying, management will expect to know what return to expect on their investment in a particular new technology or practice. Nevertheless, in core technologies and practices, training and research is almost always pay off quickly.
In business, the value of an asset general decreases over time (in accounting, this is known as depreciation). For an accountant (and for you if you need to sell or replace it), your PC is worth less today than it was this time last year. For the same amount of money, you can have a more powerful model, or you can buy the equivalent for less.
Technical know-how can also lose value over time. For one thing, if you don't use it, you loose it - practice is essential to keeping your skills honed. In addition, modern software technology and techniques evolves at a frightening rate, which can be a bit of a shock for new Java developers coming from the more stable world of mainframes, for example. So, to keep pace, you need to keep up-to-date.
There are many ways a developer can invest in know-how. These include:
- Training: Face-to-face training, either in the form of public or on-site courses, is probably the most time-effective way to get started with a new technology, or to get up to speed with the latest evolutions or more advanced features of a technology that you already use. Face-to-face training is concentrated and focused, avoiding the distractions of the office environment. Discussion with the trainer and with other students
- Mentoring: In many cases, an initial training course on a particular technology or set of techniques needs to be followed up by some mentoring activity for best effect. Those things that seemed obvious in the course aren't so simple to apply back in the office. Sometimes a helping hand in the first few months can ensure that everyone stays on the rails and that the time invested in the training in the first place does not go to waste.
- Internal presentations: This is a great way to share knowledge on a particular subject within a team. Give each team member a research topic, with the aim of giving an hour-long talk by one team member once a month, or even every week or two. I've seen teams where this is done to good effect.
- Personal research time: Many enlightened IT companies let staff spend time on job-related but not necessarily billable activities (think Google's "20% project"). This is a great way to do in-depth practical research in a particular area of interest - sometimes it even comes in useful ;-). Selling this one to your manager can be a bit tricky, depending on your enterprise culture, but it is worth a try. For example, often times you will find yourself bogged down in development - you have a nagging feeling that you would be more productive, if you automated certain parts of your work, or used more effective testing techniques, or rewrote a core library to be more flexible. But the day-to-day operational pressure doesn't give you the time to do this. With a day a week, free from the pressure of doing billible work, you can do wonders with this sort of problem.
- Read a book: Surprisingly (at least, for me) few developers read technical reading matter outside of the office. But this is nevertheless a great way to learn about new techniques. Check out the DZone Book Zone, and the book reviews by the likes of Meera Subbarao for some ideas. However, as with many things, if you don't apply what you learn, chances are you'll forget most of it rather quickly.
- Attend conferences: This is often where you learn about the cutting-edge stuff you'd never think of investigating otherwise, and it's great for networking as well!
- Give a talk at your local JUG: Do a bit of research on a topic that interests you, and share it with your local Java Users Group. Java User Groups are full of cool people (hey, they're just like you!), and won't be critical if you're presentation isn't as polished as it could be. If your don't think you're up to a full-length presentation, talk to your JUG leader about a tidbits session, where several members give short talks (20 minutes or so) about a variety of topics.
There are plenty of ways that you can keep your skills honed, and they don't necessarily require heavy investments of time or money. The key to maintain a regular personal R&D activity going to keep your skills honed. When appropriate, for example at the start of a major project, or for specific needs, you can invest in more expensive options such as face-to-face training or external mentoring services. But, as an ongoing activity, the other techniques described here will help keep you up to date and optimize your marketability. Good luck!