If I want to improve my career as a developer. Would it be better to grow into a very specialized Python guru or a Full-stack Developer?
Should I use my time to master a specific programming language? Or should I learn a wide range of languages?
Should I become as specialist in a particular topic? Or should I evolve into a generalist? Katana or Swiss Army Knife?
There is a big debate around this topic.
Surprisingly, it turns out this is a false dilemma. Those two paths are not mutually exclusive. You can choose both.
Let me explain to you why.
Effectiveness of Specialization
Let’s imagine that you are a CEO of a big corporation.
Suddenly, your financial advisor tells you that there is a new federal law. This new law changes drastically the way you should handle taxes for international transactions.
Nobody in your company knows how to make those changes, so you decide to hire someone to do the job.
Would you hire an accountant that have experience in multiple areas, such as funding, auditing, consulting?
Or would you hire an accountant who specialize in taxes for international transactions?
It is a common perception that companies search (or want) a generalist, or someone who could do everything. However, when the moment comes down to it, the specialist will be selected every time.
Do not get me wrong, having a broad range of knowledge is very useful. Sometimes you just need a handyman to get the job done. Yet is extremely more valuable to be the expert for a particular niche.
Potential of Generalization
There are some important distinctions that you can find in a generalist developer:
He can work in diverse projects
He can play multiple roles in a software development cycle.
He is flexible.
The distinctions mentioned above may sound good to you, even ideal for a developer. However, there is a huge lesson that you need to understand: if you try to be everywhere, you will end up getting nowhere.
When your objective is to learn as many technologies as possible, just for the sake of diversity of knowledge, it may lead you to a waste of time and effort. You may find yourself becoming a Master of None, or a Jack of All Trades.
Renaissance Man. A Multi-Specialized Generalist.
“I’m not a specialist nor a generalist. What should I become?”
Your goal should be to grow into a Renaissance Man.
The difference between a Renaissance Man and a Jack of All Trades, is that the former has multiple areas of expertise. While the latter knows a little of everything.
As a software developer you should strive to understand algorithms, best coding practices, data structures, design patterns, databases. Building a strong foundation will be required before you master a specific skill.
Once you have build a solid base, you should also pick at least one area where you can go deep. By doing this you will set apart from the rest of the developers, and increase your value.
Of course you will not become a specialist in a particular hard topic over the span of 3 months. Depending on your dedication, you can archive that over 1 or 5 years. Nobody said it was easy.
Not all skills take an equal amount of time to acquire, nor is the demand equal.
The good news is that it is not like you are starting from scratch every time you pursue a new skill. Once you have acquired a great depth of knowledge in one area, there will be a carry-over effect to other skills you are pursuing. Overcoming something hard gives you the confidence to continue. Eventually, you will have comb-shaped skills, where you have multiple strong skills, and a broad base of knowledge.
Finally, do not forget to marketing yourself, and letting others perceive that you are in fact THE expert in one or more fields, people will search for you. Do you know why? Because they know that you are the best around.
Develop into a specialist in multiple areas with a broad base of knowledge. The most valuable developers have deep knowledge in different areas.