Approach For Learning New Technologies

How do you stay up on new technologies?  How do you approach learning a specific new technology?  The first thing you have to accept is that the Microsoft technology stack has gotten so vast that it is simply impossible for a single person to be an expert in everything.  This is the most important aspect to remember. This post is simply to describe my personal approach for staying up on new technologies in the hopes that other people will find something valuable in this to add to their toolbox.  In terms of a high level philosophy, my outlook is that I want to be able to speak intelligently about as many technologies as possible, but then be able to consider myself an "expert" in a few of the most important.  It is simply not possible to be an expert in everything.

Step 1 - Make a list.  Literally create a spreadsheet for yourself for all the technologies that you already know or want to learn about. Consider this your own person "Skills Matrix."  You want to be able to see, on one page, everything you know or don't know.  I've been keeping my own list for 4 years and it's a working document that I'm constantly updating. My personal list looks something like this:

  • C# language / .NET Framework
  • C# 2.0 (generics, anonymous methods, etc.)
  • C# 3.0 (lambdas, object initializers, etc.)
  • ASP.NET 2.0 (Membership, MasterPages, etc.)
  • ASP.NET 3.5 (New web server controls, etc.)
  • Windows Apps
  • XSLT
  • OO Design / Architecture
  • Design Patterns
  • Web Services (asmx)
  • LINQ to SQL
  • IIS 6.0
  • IIS 7.0
  • WSE
  • Windows Workflow Foundation
  • Windows Communication Foundation
  • Windows Presentation Foundation
  • CardSpace
  • Commerce Server
  • Oracle
  • Microsoft AJAX
  • jQuery
  • InfoPath 2003/2007
  • BizTalk 2004
  • BizTalk 2006
  • Enterprise Library Validation (VAB)
  • ASP.NET MVC
  • MSBuild
  • SQL Server
  • SQL Reporting Services
  • SQL Integration Services
  • SQL Analysis Services
  • SQL Notification Services
  • SQL Service Broker
  • MOSS
  • Silverlight
  • Entity Framework
  • ADO.NET Data Services
  • ASP.NET Dynamic Data
  • Enterprise Library Logging, Data block, Exception Handling, etc.
  • Microsoft Expression

Step 2 - Categorize your list.  If you're not overwhelmed with the list you created above then you're doing something wrong. Remember, the goal is to not be an expert in everything.  The next step is probably the most challenging - you must put each item on the list in 1 of 4 categories: 

  • Expert - I'm a true Expert in this technology and I could talk with anyone in true technical depth about any aspect of it. I can complete any hands on task given to me with mastery.
  • Solid - I'm Solid in this technology with some great professional hands-on experience but not a true expert.
  • Low - I have some experience so I can speak intelligently about this technology but my expertise is "low".
  • None - I may or may not have read about this technology but I definitely don't have any hands on experience and I don't really know what I'm talking about.

In order to be successful with this step and, ultimately, successful learning new technologies you have to be very honest with yourself with Step #2.  Remember, you're not sharing this list with anyone so if you have only 1 item in Expert and 30 items in None, that's OK - no one will know but you.  If you've got 40 items on your list and you've got 20 in the Expert category, then you're definitely doing something wrong and are not being honest with yourself.  Trust me, you're not a true expert in 20 technological areas.

Step 3 - Identify Key Areas.  Now it's time to start narrowing down what you're actually going to dive deeper into.  There are three main categories I have for this:

  1. Technologies on the list that you're very interested in but you don't have a lot of opportunity to use them in your professional life.
  2. Technologies on the list that your employer is going to consider very important but the technology is not incredibly engaging to you.
  3. Technologies on the list that both interest you greatly (#1 above), and your employer deems valuable (#2 above).

The technologies in #3 are the best ones to start with.  But don't forget about #1 and #2 as those are important as well.  If you list has 40 items on it, focus on about 5 for this step #3 here.

Step 4 - Determine where you want to go.  Now that you've identified about 5 areas in step 3, you need to look at what category you're in now and then figure out where you want to go.  If you're a "None" in all 5 areas and you want to go to "Expert" in all 5, then you're doing something wrong.  In fact, I think, from a goal perspective, it would be a mistake to go above 1 item for the Expert category.  There might be one or two where you want to go from None to Low because you want to be able to speak intelligently about it but don't have a need to be a true hands on expert - once you attain that level, it's time to move on to the next thing.  There might be an area where you're already very solid with a couple of years of experience but you want to go to the next level and become an Expert.  Bottom line, it varies for each item.

Step 5 - Repeat steps 1-4.  Going from None to Low is not difficult for most items.  You're going to read articles, do some hands on labs, etc. and you'll feel comfortable talking about it.  But you want to constantly re-asses.  When I started my own personal list 4 years ago, it probably only had 20 items on it but it's obviously going to grow as new technologies emerge.  Make sure to add new items to your None category as they come out and keep re-assessing Step 3 to constantly identify the areas where you want to learn.

Much of this might seem pretty intuitive but I think the real key is to keep track of everything in written (or preferably) electronic form. 

There are some technologies where you're going to want to go to the next level and truly improve your current knowledge level. I discuss my own process here in my Approach For Learning a Specific New Technology.