Generalist Or Specialist
I’ve been asked, “Which is better? Having specialization in one language/technology vs wide range of exposure in multiple languages/technologies?”
Well, like all good questions, I think the answer is “it depends”. I don’t think one is objectively better than the other, but rather in some situations one works better, and in others the other one does.
Just because of the amount of years working I’ve seen a lot of things and because of my nature I’ve done some 0’th level “poking around the edges” of them. As a consequence, my thinking had been subtly influenced in a lot of different directions so I’m able to take advantage of many of them. I’m not a functional programming master; nay, barely a neophyte; but I recognize many functional patterns and the beauty of pure functions, immutability, and higher order functions. Same with OOP; classes, composition, inheritance, and polymorphism, or imperative and gotos and structured programming and loops, etc.
On the good side, this opens up a lot of toolboxes to various ways to solve a problem, or even to just think about how to get a thing done. However, implementations might end up non-idiomatic because of “surface level” knowledge of it. It also works well in interviews; you might be able to speak intelligently about a given topic, or at least as 1 topic among many in a :30 to 1:00 interview allows, but watch out for the natural assumption that you also know the ins and outs of said topic to be able to construct something robust with it quickly.
Once hired, being a generalist gives a lot of flexibility in roles. You might not know enough about a given thing to excel at it right off, but you’ll be able to come up to speed quicker than someone who knows less. For small/mid sized companies or orgs this is handy; the “wear multiple hats” thing is important then, since they often need people capable of multiple things. Beware of this as a requirement though; this often is an implication you will be expected to actually DO these multiple salaries worth of things simultaneously, while being paid for one. To wit: “DevOps” Generalists are often successful in companies that value a team as the unit of “ownership”.
On the other hand, when you’re a specialist, you’re often the only one for a given specialty in a given org, so you’ll always be the go-to person for whatever that is. There’s a lot of job security in that. At companies of sufficient size, when you’re a generalist you can do a lot of things but no matter what that thing is, there’s always someone that can do it better/faster/cheaper than you. Specialists, as long as their specialty remains in need, are the last people to be let go in a downturn. The danger here is that a better specialist for your specialty can be hired, or your domain is no longer in need, and then your options are limited. Specialists are often successful in companies that value an individual as the unit of “ownership”.
Heinlein said, “Specialization is for insects” which a lot of generalists love to trot out; while I don’t necessarily disagree with the sentiment, he was speaking in more broad terms - how to live your life, not for one tiny employment corner of it. And anyone who’s read Diamond’s Guns, Germs, and Steel knows that without specialization we’d all be still gathering our own food at every meal; it’s literally what makes civilization possible.
So both are valuable. But which do you choose? As I get older, I’ve come to realize that at least for me, it’s not really something I have much control over. I’m more of a generalist. I don’t think this is a conscious choice I’ve made, it’s just how I’m wired. From an “as long as I’m happy” standpoint, my suggestion would be to try and discover where you are on the specialist-generalist continuum and try to maximize your impact using your natural talents.