I heard recently that for a software company, an important part of getting its code to be of world-class quality is to have its developers be specialists rather than generalists.
Related to yesterday’s post, I am concerned that such specialization could lead to getting stale at your craft, dulling the developer’s innovative power.
I am curious and interested in a wide range of technologies, and I want to keep learning and growing. I don’t see how I could do that if I concentrated on one small set of technologies to the exclusion of all others.
On the other hand, having to do a bunch of different things at the same time might diffuse my energy. Perhaps the specialization we’re talking about is specialization during a snapshot of time — sort of a “serial specialization” (or I guess you could also see this as “single-threaded generalization”) — so that right now I’m only working on set-of-technologies A and getting good expertise with that; but six months to a year from now I may be working on technology set B… rather than meaning “you work on set-of-technolgies A forever”.
Which, then, is really best for the individual developer who wants to master his craft: generalization, specialization, or “serial specialization”?
Which is better for his company?