It became a somewhat standard question I've been asked for a while now – if someone wants to learn a programming language, a specific development practice/methodology or framework, where should he go first to look for help and would it be worth it to dedicate time to learn it online? A few years ago my answer would be “Books.” At the time (and by that I mean 8 to 10 years ago), decent software development resources were scarce online. No documentation (or, let’s say, no complete documentation), no way to really communicate with a multitude of software developers in a specific area (unless you already had a “circle of trust”) and practically no way to make sure that what you’re doing is the right thing - not the most exciting set of features for online resources.

Today, however, it is completely possible to rely solely on the Internet to learn a specific technology. The format (and volume) of the official documentation changed drastically – take MSDN Library, for example. Nowadays that’s the primary place for .NET tips and guides. To add to its value, Microsoft introduced community contributions – so, if the existing documentation is not good enough it is possible to easily contribute with required amendments (comments and code) and if it is a valid point, the guys that manage the MSDN content will eventually add that to the official documentation. This has happened to several articles already and I am happy to see this gaining momentum - there are plenty of fixes introduced. Besides MSDN, there are other resources – for example, PInvoke.net, that is completely community-driven and that shows how to use various WinAPI native call in managed environment. There are hundreds of entried already present there and it's constantly growing. If a developer finds a mistake, it can easily be edited since it is a wiki. Add to that the multitude of resources (from Microsoft) for videos and how-tos that will hold a beginners hand from start to finish.

Another example is the Android Developer portal. It pretty much covers the entire Android platform from the developer’s perspective. In some cases it might lack examples but with enough willingness to learn it is possible to get things done with it. And the same documentation format is spreading across many other companies and development oprganizations.

There is way more to add to the basic set - voluntary community contributions in various forms. Blog posts, articles, video tutorials, forums and podcasts – all these are great sources of knowledge. Of course, not all – community content is generally very fragmented and not every piece generated by an independent developer is informative enough to teach a concept in depth. Nonetheless, reading through what others have to say on the subject builds opinions. For example, you might see a better way how to do something. Or you completely missed a possibility described in a blog post. Yet another resource to learn from is the multitude of open source projects available for practically any language and platform. CodePlex and GitHub host millions lines of code you can learn from. Needless to say that some pieces can be re-used in your own projects.

Talking about forums - never hesitate to underestimate their potential. It is not only a great place to ask questions but also increase your own knowledge by going out of the comfort zone trying answering more complicated questions - I know some people who gained more experience they ever expected by simply trying to answer a questions they had no idea about. A bit of searching, finding a suitable solution, optimizing if needed and learning at the same time. Perfect recipe? To some extent.

I got this this conclusion on my own – when I realized that I am pretty much done using VB6, I decided to switch to C# - the problem was that I had no books whatsoever on it. I turned to online resources as my primary teacher – first I used the well-known copy/paste method and just saw how something worked, then a bunch of ambitious but failed projects because I had no experience whatsoever in doing something as complex as I wanted and I was soon knowledgeable enough to work with C# on a more than decent level. Same applies to Windows Phone 7 – when the SDK just came out, there were absolutely no books on it – experimentation and MSDN were the only ways it was possible to get something done. I should mention that the fact about the usability of online resources applies especially to bleeding-edge development products (languages, SDKs, IDEs, etc.) – rarely when a new product instantly comes with a book on its release date. And knowing where to look for information is going to help you a lot here.

As a conclusion, never cut out the possibility to learn solely from what’s available on the Internet. In fact, gain experience in learning something without books – it will help you a lot in the future, be it for your own work or for a job. Books are great, but in many cases you'll be able to save some serious money just by using resources already available to you.