Tuesday, October 14, 2008

Generalist or Specialist?

Continuing on the topic of learning new technologies, should you learn as many skills as possible or should you specialize in a few? Which will make you more marketable?

In my world view there is no such thing as an IT handyman. Actually, come to think of it that’s not a bad analogy. If you are constructing a skyscraper would you want a team consisting of an architect, a general contractor, and skilled tradesmen – or would you hire a bunch of handymen? The obvious answer is that you’d want specialists who are experienced in their fields. There’s no way that a single person can be an expert architect, draftsman, mason, carpenter, plumber, electrician, etc., all in one, regardless of what they might like to believe.

The situation is not too different in the technology world. In fact, IT presents an even wider array of skills for people to learn and master. While it’s true that good engineers can pick up new technologies fairly quickly, it still takes years to become an expert at most of those skills. So when I see a resume from a candidate that claims expertise with ASP.NET, J2EE, LAMP, Ruby on Rails, C#, C++, VB.NET, PHP, Perl, Python, TCL, Flash, SQL Server, Oracle, etc. -- naturally I’m more than a bit skeptical.

My recommendation is to pick a single track and become as good as you can with that skillset. You can (and probably should) supplement those skills with other technologies, but when the rubber hits the road you need to show real competence in a particular area. The tracks might include:

Front End Web Development:
  • ASP.NET / C#, or
  • PHP, Python, or Perl, or
  • Java / JSP / Struts / Spring MVC, or
  • Ruby On Rails
Middleware / Data Services:
  • C# / WCF / ADO.NET / SQL Server, or
  • Java / Spring / Hibernate / Oracle, or
  • MySQL + various ORMs
Infrastructure
  • IIS / Windows Server, or
  • Apache / Linux / Solaris
This is obviously not a complete list, and there are many possible technology combinations, but it does highlight a number of possible specialization tracks. Many of the tracks are complementary, but it’s unlikely most people could be experts in more than one or two of them.

You might be wondering, does this advice conflict with what I said earlier about learning lots of different technologies? Not at all; my philosophy remains the same -- you need breadth as well as depth. Show that you are familiar with a range of technologies, but pick an area of expertise and learn that set of technologies inside and out.

No comments: