In a previous post, I discussed how to identify the technologies you want to learn and come up with a personal learning road map, so to speak. But when it comes time to dive into one specific technology, how do you go about learning something new? In fact, I almost always ask that question during developer interviews. The most disappointing answer I get to that question is, "well, I will Google it and read articles about it." That doesn't really show a very deep level of enthusiasm or commitment.
Obviously, different people have different learning styles. Some people do well learning from a book whereas that is useless for other people. Some people do well in instructor led training whereas that is useless for other people. In my opinion, it is very important to understand how *you* personally learn best but don't let that limit you. In other words, make your learning as well-rounded as possible. For example, if you feel you learn best from hands-on practice, that's great but don't let that be an excuse to not buy a book. Ultimately, you're never going to be able to learn every aspect with solely hands-on practice because there may be features you were not even aware of had you not read about it in a more complete reference like a book.
When MVC came out last year, I decided that I wanted to learn it as it was quite interesting to me. This is how I learned it and this is the approach that I typically use for any technology. Regardless of the technology that you want to learn, this type of approach can be used.
Much of this might seem intuitive and freely available on most Microsoft sites. But the keys are: 1) be systematic and organized in your approach, and 2) keep track of everything you're about to do and what you've done in written or electronic form. You need the systematic documentation to keep you goal oriented, focused, and on-track.
Step 1 - Identify specific quality sites and read EVERYTHING on these sites. For MVC, there was MVC on ASP.NET. There are a ton of links to articles, training, and additional resources that you'll find on sites like these. Read everything on these sites.
Step 2 - Identify and subscribe to quality blogs. For MVC, there was Scott Gu, Scott Hanselman, Stephen Walther, etc. There will be other blogs like these for whatever technology you are currently learning - find them. It's great to read articles (from step 1) but blogs can be extremely valuable with information from people that are already experts in the technology or are using the technology hands-on. Use them.
Step 3 - Web casts. For MVC, there is a page dedicated to MVC web casts. You can read all the articles in the world but web casts can give you a great high level picture while seeing live demonstrations that can get you up to speed quicker than floundering yourself. If Microsoft gives you a page with 10 web casts, watch all 10. In fact, should write down specific days and which web casts you are going to watch on which days and treat watching them like goals. Get it done.
Step 4 - Get a book. Articles and web casts are great but a book is a more complete reference that will go into details of your technology in greater depth than you'd get from an article or blog post. Use the consumer feedback on sites like Amazon.com to determine the best books to get if you're unsure.
Step 5 - Hands-on Labs. You can read/watch all the articles/books/webcasts in the world but there is simply no substitute for hands-on experience. Microsoft does a decent job providing guided hands-on labs in many new technologies. These typically (but not always) do a good job providing systematic hands-on experience in the primary areas.
Step 6 - Hands-on Project. Hands-on labs are great but, ultimately, they are totally guided. All the code is given to you. To really become good at something you *need* to flounder a little. You need to run into problems and figure them out. Give yourself a little side project outside of work to build some sort of application that does XYZ. Although this is step 6, this is the most important step. There is simply no substitute for hands-on experience. But you want that hands-on experience to be based on an already strong foundation from other learning materials.
Step 7 - Write an article. This might be something as simple as a blog post. Or you may decide to go as far as to write an article for MSDN Magazine or Visual Studio Magazine. Having to write something down helps organize your thoughts especially if you know other people are going to read it. I've certainly had times when people politely (or not so politely) told me that something I wrote on my blog made me look like an idiot so you want to give it at least a little thought first.
Step 8 - Give a Presentation. This one often scares people off but it shouldn't. Set a goal for yourself to give a presentation on your topic in a 6 month timeframe. You'll have plenty of time to learn it. This presentation might be for 5 developers at your company, maybe your entire development staff, maybe a local users group, maybe a regional Code Camp, maybe Tech Ed! Either way, this is a huge motivating step. You know that if you're going to get up in front of a room full of your fellow professional developers then you better know what you're talking about!
If you're learning a new technology that you're truly interested in, then it should be an enjoyable thing to totally immerse yourself. With the amount of freely available training materials these days, you have only yourself to blame if you don't take full advantage. Either way, next time you're asked in an interview how you learn something new, please don't tell them you Google and leave it at that.