As a software engineer, this question comes up fairly often “Should you specialize in a technology”. Right now the question is there because the large number of Java developers are wondering whether they should learn Ruby or Groovy. For those asking the Ruby or Groovy question, yes learn one of them. Learning is always important, especially in an industry that changes as quickly as technology. However, the real question is whether you should specialize in a certain technology set, or stay a generalist. Just for clarification, a technology set is the group of technologies needed for a specific type of development. So if you are a web developer, you need to know (X)HTML, CSS and JavaScript at the minimum. Anything less and you are not a web developer. As usual, there is no clear cut answer to this, and there are benefits to specialization as well as staying a generalist.

Implications of Specialization

The most obvious benefit of specialization is the potential of becoming an expert in the technology. If you become an expert, you can command higher pay and possibly get cooler projects to work on. It does take some time to get to the expert level, but even internal to your company you can become the “resident expert”. The “resident expert” is the person who knows the most about the technology and most likely to answer any questions. Specialization is also very helpful in the consulting field. When looking for consultants, many companies want to get the most experience for their dollar. So, they look for experts in specific technologies to fill roles on their projects. You also tend to learn things that some people will never need to know. If you like knowing the more esoteric aspects of a technology, then definitely become an expert.

Interviewing as a specialist is typically fairly easy. You are an expert in a technology, so you will not be asked questions on technologies that are not your focus. This is mostly a benefit, but in some environments especially more corporate environments, it can be a disadvantage. Product companies need specialists as they have very specific needs. Corporate environments need people who are good at multiple things. Even if you are mostly a JEE developer, you will still need to write some web pages because you are writing a web application. One major issue with specialization is knowing that one day your skills will be outdated. At that point you need to become an expert in some other technology.

Implications of Generalization

A major benefit of staying a generalist is that you can easily play multiple roles on any given project. This is not quite as valuable in the consulting world (sometimes), but it is typically very important in a corporate environment or a startup. In these environments you will be expected to write code for the server side, the database and the web pages. There is a potential issue of becoming the quote “knowledge of all, master of none”. This is not a problem if generalization is pursued appropriately. As a generalist, you want to generalize in a “stack”. For Java developers, the “stack” could be the entire set of technologies needed to write a dynamic web application. This set would include HTML, CSS, JavaScript, JSP, “Core” Java, and JEE (like servlets and a few other items). This seems like a long list of technologies, but deep knowledge of these is not required. “Good enough” knowledge will suffice in most scenarios.

Depending on the position being pursued, interviewing is a mixed experience. Many companies will be looking for a JEE specialist, and you will flounder with some of the questions asked. In a company that is writing web applications, you might look like a rock star because there are not any technically detailed questions. The other major benefit to being a generalist is that you are already always learning. You need to constantly evaluate a technology to see if it fits with the technologies you are already using. This is extremely helpful if you ever change jobs.

Generalize or Specialize?

The question is really a personal preference. In my case, I need to generalize as I do not care as much about some of the detail needed to become a JEE expert. I would rather be able to write an entire web application in a short amount of time. Some people love the details, and I have some consulting friends who are becoming experts in a technology. When I need this level of knowledge they will be getting a call. One caveat to all of this is that the “benefits” depend on the environment you are currently in. I mentioned consulting in the specialization section, as many consultants do become specialists. There are many consulting firms that use more generalists because of the benefits to broad knowledge. Again, it is a matter of preference. More importantly, find out what you want to do and pursue it.