As a freelancer who is constantly selling his skills on the free market, I always have to be up to date and keep myself informed about the latest technologies - in a more cursory way to know what options are available in a certain situation, or more in-depth if I am actually working with a specific technology.
Although you can go overboard with trying to stay on top of the IT industries' evolution (I talked about that in a previous post), I simply consider continuous learning to be a natural part of the job. There may be people who come from school, learn something and then do that for the next 40 years or so - I'm not one of them. (Sadly this still is the way most people assume a (professional) life to be: You go to school, make some years of training, afterwards you do what you have learned, leaving the house in the morning to go to your workplace, coming back in the evening, and getting pension after you have done that for 30-40 years. That's not too big a deal in everyday life, but it can have quite annoying consequences when it comes to legal and tax payment issues...). Contrary to this, when I make plans for the year to come, I always reserve about two months for non-contracted, but job-related activities like learning and training - this even reflects in the rates that I negotiate with my customers. It's my competence they pay for, not the speed of my typing (which btw. is VERY poor...) or whatever.
The software freelancer's core competency: meta-knowledge
Sure, nobody can know everything, even when it comes to such a small corner of the world like "C# programming" - and a person who cares about his mental health will not even try to. Instead, it is important to know how you can quickly find a specific bit of information when it's needed, you must be able to assess the quality and reliability of that information, and you have to quickly understand it and derive a useful solution from it, since that is what the customer ultimately pays you for: solutions for his problems.
I wouldn't even describe myself as someone who knows all that much, and, as I said, I don't think that's necessary. You have to know the right things. This is what I do to stay informed:
- I keep reading some blogs from the smarter people of our industry, the ones who gained a good reputation over the years. It's not always necessary to read everything in-depth, it's sufficient to keep an eye on it and pick the interesting parts as needed. Currently, I have subscribed to about a dozen blogs.
- Similarly, I keep an eye on some interesting user groups and open source projects (roughly the ones that are listed in the various Toolbox sections to the right).
- There are some news sites/feeds that I watch to stay informed about what's hot and/or new in the .NET world. The most important ones among them are DotNetKicks and DotNetShoutOut.
- I have an extensive and well-organized compilation of bookmarks which grows over time. Because this is an important part of what one might call my working capital, I regularly spend some time keeping the collection clean and up to date, and I also maintain a remote backup of it.
- I actively participate in question-and-answer sites like e.g. stackoverflow.com. It's not only that this is another valuable source of knowledge (the questions asked there are coming directly from real life...), but the even more important part for me is that you train your ability to communicate with other developers about highly specialized technical questions. Other than that, there are not so much opportunities to do so in my part of the world...
- I constantly keep my programming fingers flexible with so-called Code Katas, small to mid-size programming exercises that usually originate from some seminar or meeting - you can find collections of them e.g. here or here. What I especially like about them is the level of professional self-knowledge that they provide: When working on a Kata, you can experience how you deal with things when there's not the usual business pressure, and you get a good feeling for the know-how that you actually have.
- And last, but most important: I have a subscription for the Safari Books Online library. (In case you don't know: Safari is an online library from O'Reilly which "includes exclusive access to the digital collections of O’Reilly Media, Prentice Hall, Addison-Wesley, Peachpit Press, New Riders, Cisco Press, Sams, Que, Adobe Press, Adobe Developer Library, as well as hundreds of additional titles from publishers like John Wiley & Sons, Microsoft Press, Apress, Manning, McGraw-Hill, IBM, Oracle Press, Course Technology Charles River Media, Syngress and Talented Pixie." Apart from the thousands of books there are also videos, articles and early, not yet officially published book versions - so-called rough cuts, similar to Manning's MEAP.) It gives me instant on-demand access to a wealth of first-class, always up-to-date expert knowledge, wherever and whenever I need it. Compared to what it provides, the subscription fee (40$/month) is not very high.
Some Books Are Bigger Than Others
It's Amazon, that clearly had to suffer from my usage of Safari: Since I started to use it (about two years ago), I am buying significantly fewer programming books - and hey, a single programming book usually costs around 50-80€ (or roughly 70-120$). On the other hand, many of these books will be outdated within a few years, so keeping them physically around does not make any sense at all, they are nothing but a waste of resources. Nowadays, I can restrict my programming bookshelf to such all-time classics like e.g. Domain Driven Design or Code Complete - stuff that I may occasionally read in bed, read parts of it more than once, or I may lend it to a fellow developer. - In short: There are some few books that you live with, and there are many that you use in everyday work.
Many say, that they are feeling much more comfortable with something physical like a book lying next to their keyboard. I also had this emotion in the beginning, which has lead to tons of printed paper and a considerable mess on my desk. But now that I'm used to it, I'm much better off with an additional display or an old laptop (I even feel slightly disturbed if there are too much things around me). Once your used to that way of working, it's much faster and more flexible - and it's also much cheaper and cleaner in the long run.
I'm not willing to miss that only one more day in my professional life. That's why I usually have an additional display (19'') with me, when I go to a customer...