There is an expression in German – calling someone a Fachidiot. I don’t think it translates very well into English as there isn’t an expression that conveys the same notion. Idiot savant is getting close, though. What the German word describes is a person who knows everything about very little.
While the opposite – knowing a little about everything - isn’t really desirable either, the Fachidiot type programmer seems to be highly prized by employers. From a business perspective this is understandable. The programmer who already knows everything about a very small field[1] can really hit the ground running, to quote one of my least favourite recruiter-speak. Not only can the hit the ground running, they’re very likely to run into the right direction. Obviously this is a good thing because it saves on training expenses. Given that there are plenty of employers out there who seem to view training as something they grudgingly have to pay for to stop their programmers from legging it at the first opportunity. But I digress.
However, from a career perspective, is being the Fachidiot type programmer really desirable? I doubt it, for several reasons.
First, our field moves very, very quickly. The words “running just to stand still” come to mind but I have already used up my quota of sporty metaphors for today. Anyway, like a lot of young crafts and sciences, the world of programming moves at a breathtaking pace. New techniques and tools are developed every day as we find better ways to solve the same problems or even new problems that we couldn’t solve before because we didn’t have the computing power or understanding of algorithms necessary to do so. Unless you happen to work in a field that is always at the cutting edge of this sort of development, you will inevitably fall behind. Fall behind far enough as a new technology encroaches on your field and you’ve just specialised your way out of a job.
Second, assume that you are the person who is known to do X in your area and X is a technical skill. If X is a pretty rare and valuable skill, that might not be a bad thing initially, but there are two problems with that. First, going from being known as the person who does X to being known as the person who only does X is a very short trip. That’s bad, because people will forget that you might also be quite good at Y and Z, but you’re now “just” an Xer. Also, if people who do X are rare and sought after, companies will start to work around making use of X. They will have to because Xers are rare, sought after and therefore expensive and because they’re rare, not every company can hire one. So people will find ways do work around the lack of X and people move around, fewer companies will need X skills.
That way lies eventual redundancy and retraining as a plumber. Not that being a plumber is a bad thing but it’s probably not what you had in mind when you were looking for a lifetime career in IT.
One alternative I would suggest is trying to stay more of a generalist. Most of us specialise over time anyway as we move from the “can do anything, just not very well” stage to the stage where we are producing decent programs. Most people tend to stay within a certain field once they found one that they work well in. However, there are usually various completely different technologies and applications used within that field and it pays to be able to move between them and do very different work, all within your field. If you’re lucky, you’ll get to work on a web app one month or year and on some high performance grid stuff another time. And if you’re playing your cards right it will be within the same sort of business area so you’ll be able to make use of the business skills you’ve learned over time.
In other words, specialist on the type of business you write software for, but be a generalist within that area. The two are almost orthogonal and you should be able to make a reasonable career out of it.
[1] Please note that this is a different species from the, usually young and not that experienced, programmers who think they know everything. The type programmer I’m referring to here definitely does know everything there is to know for his, usually very small, field.