Zuidhof asked an interesting question in his blog: do you have the time to learn everything? He gave an incomplete list of newest .Net technologies and software methodologies that any developers worth his salt should know. Going through them can be quite daunting for even the most gifted developers; there are just too many things to learn and not enough time. I am pretty sure that in another year or two Microsoft or the software development world will throw at us another list of "must learn" technologies, and push us the poor developers to upgrade ourselves again.
Getting to learn new technologies are no joke as they can have deep learning curve. WPF and XAML are the classic examples of this. The XAML syntax is completely different from other existing languages and that is a challenge for the beginners. If you are not actively using new technologies at your work and you have to pick them up on your own, you probably will never have the time to learn all new stuffs.
But somehow in an IT world where developer's asking salary is determined by the technologies he mastered ( instead of analytical skills and the smarts), learning new technologies is necessary just to keep up with your salary expectation. It's not so much of a question of whether you have the time to learn any new technologies, you must or else you grow obselete. It's also not so much of whether you have the time to learn everything; you don't.
So obviously you need prioritization. When comes to this, my humble suggestion is that you should prefer technologies ( such as LINQ-SQL, ADO entity framework) over software design philosophies ( such as continuous integration, agile programming etc). There are a few reasons for this:
- It's more marketable, as far as the job market is concerned. HR department scans for keywords when comes to hiring. Now you may say that you are comfortable with your job and you don't plan a switch. But still, it's better to retain your marketability, just in case-- I mean, really, just in case-- you need to find a new job.
- Technologies are more "quantifiable". A competent team lead can know whether you really know LINQ-SQL, or ASP.NET MVC by looking at your code, but how does he know that you know enough about agile programming?
- Technologies are easier to learn, in the sense that you can simply pick a book and start coding. But software methodologies are much harder; they take time and deeper thoughts.
- It is said that technologies are ephemeral, but software methodologies are here to stay as long as there is software development. But who cares? Do you think your fellow developers will be impressed if you know the A-Z about software design? I don't think so. They ( and the headhunters!) will be more impressed if you have a lot of technologies under your belt.
Which technologies are more important? I think ADO.NET entity framework and LINQ-SQL are the most important because they are the further simplification and abstraction of the data access layer. Hence, you can apply them gradually in your day job and ease the development task. Unit testing tools and mocking are important as well, but because the employers don't value them as much, so I have to rank them second to the ADO.NET entity framework and LINQ-SQL.
Or, if you are out to amaze your friends with Microsoft technologies, you can try WPF. But my experience with WPF is that it only makes the most impact when you are also an excellent graphic designer. Otherwise as a plain developer the apps you create may not be very impressive and that somehow reduces the fun of learning.