It certainly all depends if you do consulting/customer projects or have projects of your own with consulting on top, for instance. However, after ten years working extensively with Java and lately some Kotlin in the backend, I would like to know if I should have a much broader knowledge or the desire to learn everything (yeah, well, we all know a couple of languages a little bit). I'm currently learning TypeScript, and most languages, if they are not purely functional, are relatively easy to learn with some experience. But I'll sure lack some depth and to learn the major frontend concepts for instance underlying the frameworks, build tools, you name it will certainly need much more time than 2 or 3 months.
I think the most interesting from my perspective, however, is a much deeper knowledge of specific topics (for instance, lately, I'm all about reading latency/throughput-related stuff, as I'm extensively profiling my OSS database project and I'm reading books from experts as Brendan Gregg...).
What's your opinion on the topic? For example, be an expert in something or be able to use the right tool for the right project at hand, but maybe not be able to use it in the best idiomatic way or not know all the pitfalls and stuff you'd probably know if you're more specialized?
If you want to make the most money possible, and are OK with a much higher risk of being unemployable at some point, become a specialist. The field is a lot narrower for specialists and it can quickly become full, leaving you without work. As time progresses, it's likely need for your area of expertise will dissolve unless you are an expert in something abstract (e.g. one day no one will care much about deep knowledge of the Java language specifically, but knowledge of how a bytecode VM, JIT capable OOP language works in general will be valuable for a long time).
If you are OK with taking some "losses" in terms of how much money you'll eventually make, and prefer less risk of unemployment become a generalist. You won't be paid as much because you do not hold a scarce knowledge commodity, but you'll have a much wider field of opportunity to find jobs that want to leverage some of the knowledge you do posses.
Finally, this is all assuming you want to stay in a focused technical role your whole life. If your goal is to eventually do something else like run your own company, start becoming a generalist immediately.
A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. —Robert A. Heinlein
This is a misapplication of the full quote, which is, "Jack of All Trades, Master of None, Oftentimes better than a Master of One".
I would try to master at least 1 topic or at least approach mastery of a topic, but then branch out into whatever interests you that will pay the bills. Might be a bit more fun that way.
The most valuable knowledge skill is being knowledgeable enough to communicate with your audience on their terms.
For example, I work on Linux kernel networking, and I'm usually helping people solve problems with that.
I expect an application developer to have some vague idea that their applications make TCP sessions, maybe they've even read a webpage about the SYN and SYN+ACK handshake. I expect them to be able to follow a heavily annotated and well-explained packet capture where I walk them through a problem line by line in detail, and to ask sensible questions if they don't understand.
I don't expect application developers to know all the various corner cases that traffic can be silently dropped by the Linux kernel for a variety of reasons, and be able to use the various Linux tools and debuggers to pinpoint which specific one of those reasons is causing their application problem. That's my job.
Likewise, I think it's reasonable of me to roughly understand the ways that applications are built and deployed, and which programming constructs and libraries are available to the authors. Maybe I can tell them how to manipulate their java.net.Socket object to achieve something, maybe I can suggest they use a connection pool instead of rapidly cycling through new connections all the time.
There are things which are reasonable for everyone within a domain to know, and things which really only specialists know. Being able to communicate that knowledge to and from others is the key.
There's a synergy around that. It's amazing how often one thing can be extremely helpful to understanding an apparently unrelated thing. Having a breadth of non-expert knowledge means that you have more grist for that mill.
Many people see through this, but not enough that the payoff isn't worth it. Far too many people see it as simply, "This person is knowledgeable of X, so they must also be knowledgeable of Y." Exploited tactfully, this is a substantial opportunity compared to being simply pretty good at several things.
In my experience I've found that trying to develop deep expertise requires a solid understanding of many different fundamentals. For example, when I was doing NLP research, I had to learn about distributed systems in order to diagnose problems when training with multiple GPUs, or about dynamic libraries for fixing CUDA errors.
Do you need a pianist? Get the world-class pianist.
Do you need an assistant? Get the one that knows the most things. If you have a particular need, you can always hire a specialist.
I find in these discussions people tends to say whatever career they have chosen is best. I am a generalist, so I am biased. Sure, sometimes one needs a world-class COBOL engineer, but pretty much any startup or small-mid business needs a software engineer that can wear many hats.
--
In simpler words. Which company sizes prefer which role?
* Startup: generalist (fewer hires, better time-to-market)
* Established tech company: specialist
* Established non-tech company: generalist (means smaller tech budget)
* Very large tech company/FAANG: generalist (in theory specialists are preferrable, but they use off-the-shelf or cutting edge tech that no one is truly specialised for).
* Very large non-tech company: specialist (to run their Oracle databases, and they have large budgets)
There is a famous quote from Heinlein “specialisation is for insects”, suggesting we should not specialise. But in modern society where everything is interconnected, we are not unlike a “super organism” akin to ants, termites, bees.
Another reason deep technical expertise is better is that, once you go deep in one thing, one appreciates and can connect with others who are deep in other things.
For example, world class pianists, violinists, cellists have deep expertise in their own field, but their deep expertise precisely gives them access to connect to a larger body of work (e.g. chamber music).
In my experience having some deep knowledge on a topic makes you a bit better situated on the market if you don't have a strong network, but having broad knowledge allows you to have impact on a greater scale and you might value that more.
Any potential answer will heavily depend on the assumptions you are making, there is no broad set specific answer, and depending on the assumptions you made but haven't communicated, it might spark whole new spectrum of potential solutions. You will get a different answer for every person you ask as it is written, which is structurally a poll with no real benefit...
There is no one size fits all answer to the questions you've asked, additionally, it may be you are really asking another question that you haven't actually communicated, the why? of the particular question you asked. For what purpose?
Until you narrow the scope, you will only get guesses about what people think you meant, and communication is inherently receiver based. We can't mind-read. Care to elaborate on what you are really trying to do?
Being an expert in a particular area means having a deep understanding and mastery of a specific technology, tool, or domain. On the other hand, having broad knowledge across different areas of tech can be valuable in roles that require a generalist skill set, such as product management or entrepreneurship.
If you haven't been aware of, for example, Blockchain technology, you can start expanding your knowledge with this blog: https://www.ratherlabs.com/blog
I highly recommend it for those who want to study something new!
For example, many people just know how use React components, Angular components. But that’s ok in many jobs become there is no strict UI requirement on many jobs.
However, If your endpoint is to write components with design system / customise / optimise the components a little bit, you really need to understand how CSS and JS works.
The biggest pitfall I think is career development, if you are too generalist and your knowledge just stays on the surface, you just can’t solve some problems with technical complexity. It is hard to know what you don’t know … and some problems need expertise.
Of course, it all depends on the job and industry you're in. But many organisations struggle because people don't talk, share and understand each other.
Learn it, Update yourself, Play with it, Upgrade yourself, Practice anytime, Keep in constant touch.
Is a generalist someone that’s competent in sales, marketing and has technical skills? Or someone that codes in a couple languages? Or maybe someone that’s worked in a couple different labs over their career?
Until everyone agrees on the definition, we’re left with a bunch of empty platitudes.
I'm trying to find a real job like this for ages.
Expert in business things business need like sap systems is highly sought after and payed well.
Best case you are broad and an expert on 2-3 things.