I dared initiating the age old debate on twitter — to specialize or generalize?
86 replies later I think I have a better understanding of the best course of action for me.
My goal with this article is to summarize the discussion and present arguments people have for their choice. Hope this will help you in making an informed decision that is ideal for your career stage.
Let’s dive in! 🚀
Here’s a quick summary of the responses.
Looking at the results ~45% of developers believe that specialization is the way to go, while ~29% are inclined towards generalization.
While we have a clear winner, it’s important to examine the reasoning and motivations behind these responses.
Rationale For Specialization
🔸 More job opportunities. Specializing can lead to more opportunities and success as a freelancer or contractor. It’s also clear to your employer what value you bring to the table.
🔸 Building credibility. With specialization you build credibility by developing a deep understanding of the subject matter. It gives you the ability to solve complex problems and create innovative solutions.
🔸 To show expertise. If you are working on a specific area or technology for 3-4 years, you naturally build a reputation as an expert.
Rationale For Generalization
🔸 More flexibility. With your ability to quickly understand and work with multiple technologies as a generalist, you can move into different roles and industries.
🔸 Better adaptability. You will easily adapt to new situations or technologies that you will encounter in your work.
🔸 To find passion. Generalizing at first can help in finding what you love. Something that you can focus on for a long period of time and make it your speciality.
Major takeaway for me from the discussion is - there is no RIGHT answer to this question. Also, your choice can change as you will progress in career.
Having said that, share in comments what do you think — should developers specialize or generalize?
If you liked this discussion, follow me for more of these.
Top comments (43)
Developers should do both IMO. I think it's important to have general knowledge of a lot of things, and specialist knowledge of something. (or a few things) It's the classic "T" shaped developer mantra. The specialist knowledge informs the other things you learn because you will understand what deep knowledge on a subject means, so you will recognize what you don't know about other specialties earlier. In contrast, having broader general knowledge will inform you better on how whole systems work and also educate you on other approaches to similar problems, and when your particular specialty might not be the right solution.
Yes indeed, do both ...
1) build a 'foundation' of broad knowledge (even employing multiple programming languages if you want), which you need in order to "find your way around" including being able to get anything out of Google or Stackoverflow ...
2) and then: pick one area/stack/technology/toolset and become REALLY good at it.
I find the T concept educative. thank you
From my experience, I believe it's better to generalize when you're a beginner. Generalize til you have a broad knowledge on how things work and have developed the ability to learn and adapt. When you reach this point, it's time to start specializing.
Makes sense. Thanks for sharing Marcos.
Totally ... only, even as a beginner, don't fall for the temptation to want to learn "everything" - choose one or two broad topic areas (say, web development with one frontend language and one backend language).
I am all for generalizing, for two reasons: It is hard to find one technology/framework/role that will keep me excited (I get bored quickly) AND is guaranteed to still exist in five years (remember Hadoop, the buzzword not so long ago?).
Good point. Thanks for sharing Lucy!
I think it depends on what you want to do in the future as well. There are some people who do very well being expert in one particular thing and contracting themselves out, but you'd likely be hard pressed to get into an enterprise architecture position specializing in only a couple things.
I bet you haven't tried Elixir yet!
What I suspect is if I would do the sane poll I might get diferent results due we might be surrounded by a diferent distribution of population.
I might be bias here, but i dont agree with that specialist have more job opportunities, from experience companies are moving towards crossfunctional teams with T shapped developers and that is true in my last 3 companies.
The why is because most of the software development does not require in depth knowledge of a vm, language, etc, but it requires the understanding and capacity to go throught the entire lifecycle.
I thought so too. I guess the poll population might be biased towards student/junior developers. As for junior/internship roles startups/small size companies are preferring specialized role - like ReactJS or NextJS developer.
I agree to the point that as you grow your generalist qualities starts to matter more.
I'm all for generalization. As a consultant I can work almost any web tech and I'm currently being pulled between projects as I have such breadth in my skillset. I do have areas where I am a specialist in, but I once worked as an architect so it was required for me to understand many technologies.
Personally I'd argue the first rationale point of specialization, in my opinion I believe that generalization would bring more job opportunities due to a wide access to different tech fields and a wide range of expertise.
I wrote an article a while ago, about the benefits of being exposed to multiple languages and technologies. One benefit for it that I don't see here, is that it can broaden your mind, and improve your problem solving skills, after you get to see how it can be solved in different ways in different technologies.
But i do still see the value of specialisation. I few projects that I was in could sure use an specialist.
Valid point. Thanks for reading Renato.
Spend your first few years generalizing to build a good foundation. Then at some point you'll have the confidence and opportunity to try something a bit more specific / specialized and you can decide to work towards the specialization.
If that specialization doesn't work out, you still have your generalized experience to fall back on and it helps taking on a new specialization later on.
💯 Thanks for the add Tinus.
I default to a "whatever the moment demands" strategy. That is, be ready to do either depending on what you're doing for work at that time. Life will give you plenty of opportunities to do both. Picking one and closing your mind off to the other will lead to a lot of work dissatisfaction.
Be ready to switch between the two depending on current work demands, this will lead to a more fulfilling work experience.
Good point 👍. Thanks for the add.
I support do generalizing first, especially when you are at the early stage of your career. It's better to try different tools and absorb as much knowledge as possible first and then to find out which tech area you are really interested in. but sometimes I do felt tired continuing to learn new things everyday. It's paradoxical.
Interesting point. Thank you for sharing :)
I generalize--there's never something you shouldn't know at a cursory level, at least, enough to know where you'd start to work it and fold it in if you needed to--but every now and then you do come across a topic/technology that seems both particularly interesting and useful. It's worth specializing in a small handful of these to highlight your skills and expertise. But I live in deathly fear of getting pigeon-holed so overspecialization is definitely something that keeps me up at night. "Hey, you know fortran? LISTEN UP EVERYONE WE HAVE A NEW FORTRAN GUY!" (big mistake) "Oh you know more than average about sql? GUESS WHAT YOU'RE OUR NEW DATABASE ADMINISTRATOR!" (drive nails through my eyeballs please it feels better)
The answer is, Whichever one you enjoy more.
If you love to deep-dive into one technology, and get frustrated by jumping around, do so.
If you love to know heaps about many technologies, and don't mind switching often, do so.
Both are viable career paths.
Really good answers to what is probably the oldest dilemma of any developer. As a personal opinion, I’d prefer generalization over specialization mainly because nowadays things evolve so fast, that putting all your eggs into one basket doesn’t seem like the safest career choice.
Appreciate it. Thanks for reading Daniel :)
That's the hardest question for a programmer. My take is: spend 80% in the most common stuff possible, like design patterns, data structures, algorithms, languages, architectural patterns, as those are the most common things you have to master and will always use; then, spend the remaining 20% to learn the tools and frameworks. That's the only way to survive when they kill your "specialization"
Great framework. Thanks for sharing Alain!
Commit strip expresed it very easily in this strip