About eight year ago I would have considered myself a generalist. I wrote VB6 code for windows forms front ends or VBScript code in ASP web applications. I knew enough about relational databases to create tables and store the data I needed (most likely not the most efficient way, but it got the job done). Many of the projects I was on I was the designer, developer and project manager. Since then, and especially in the last three years, I’ve seen my skills become smaller and smaller compared to the overall breadth of technical advances in Microsoft Development tools and technologies. New things just keep coming from Microsoft and its really hard to stay up on all of it. In fact, I’d say damn near impossible for one person to keep up with everything.
The UI used to be just drag and drop some controls, or push out some HTML and you were good to go. Of course, it looked pretty much like you just used a WYSIWYG designer or slapped out some HTML, but back then people weren’t hooked on applications that had animations and “flash”. Now more and more emphasis is being placed on User Experience (UX). Things like AJAX, WPF and Silverlight are definitely signs that even line of business users are not going to be happy with gun metal gray boxes and lists. Don’t get me wrong, I think these are fabulous technologies and innovations, but WPF alone could take someone months of learning and deep diving to understand what’s going on under the hood.
The middle tier has also grown in scope. Now we have great options to help us in the middle tier like WCF, WF and more ORM options than you can shake a slide rule at. The database options have even grown with SQL CLR stored procedures, true XML support and things like Service Broker.
Any one of these technologies could take a few solid weekends to get your head around and be able to talk about them intelligently to a room full of your peers. If you want to be considered an “expert” then you better plan several months of dedicated time (or at least by the definition of expert that I go by).
One can make a good argument that we don’t need to be experts. Who cares how WPF translates the objects into the eye candy? Who cares how the Workflow Engine executes a parallel composite activity? As long as they just work and we can use them, do you really need to know what it’s doing?
I have complete mixed feelings about that statement. There are some things that I just don’t care how it works, as long as it does. For example, I don’t care how the System.Web.Mail works as long as I can send a message. But I DO care about how the parallel composite activity works in WF because it affects my decision to use it or not. It brings up a great question of how much about a given technology option should we know?
For now I have chosen a few things that I really want to know in-depth. Windows Workflow being one of them. Other technologies I’ve decided that a decent understanding of them will suffice (Service Broker for example); however, there are still many more that I’d really like to dig into (WCF, WPF, Silverlight, etc.). Most of it just comes down to having the time and making the decisions on what I need to know versus what I *want *to know versus what goes by the way side.
I’ve had several people ask me from time to time on what I do to keep my head above water. I’ve also often asked the question during interviews of “what do you do to keep current on technologies outside what you need on a day to day basis?” So, here’s my answer:
- I read blogs. I have about a dozen blogs I subscribe to that are technical in nature. I reserve time on the weekend to read through all the posts from that week. I skim a LOT and concentrate on posts that catch my interest or attention. About once every few months I weed through any blogs I’ve noticed I’m skipping a lot and drop them.
- I listen to .NET Rocks, Hanselminutes and Polymorphic Podcast. These take up the near 10 hours I spend in the car every week commuting.
- I read some technical books. While I’m a prolific book reader most of them are fiction books. Reading away from the computer is my down time and I often get away from it all by escaping into a good story. But, with that said, I have three technical books I want to read sitting around the house.
- I read MSN and CODE magazines. I don’t read them cover to cover; I skim for articles I’m interested in. Magazine suffer the same fate as reading the technical books though as can be proved by the fact that I have at least five MSDN magazines sitting on my nightstand I haven’t gotten to yet.
- I go to User Group meetings. I get some good info at the group presentations, especially if I’m not familiar with the topic.
- I attend free events when possible if they are on a topic I’m interested in. Things like DevCares, ArcReady and MSDN Events.
- I have made it a goal to attend at least one conference a year, though this year I have missed out I think (not for a lack of Josh trying for me…)
- Probably the most informative ways I learn new stuff is trying them out. I don’t do this as much I probably should, but just trying the hands on labs or testing out a new technology doing simple things can give you a wealth of knowledge. You don’t have to spend a lot of time with it to get something out of it.
- My favorite way to learn is to talk to other developers. When I worked at G.A. Sullivan we often had some great conversations about a given architecture or technology at the “end of the day” meeting (which was hanging around the office and shooting a game of pool after work). This still happens (the talks, not the pool), but I do miss working with that group.
So, with all that spilled out I was hoping to stir up some comments and thoughts:
What do you think is a good level of understanding for the technologies you use? What makes someone an expert?
What do you do to stay up on things? How important do you think it is to be aware of the new technologies?