DEV Community

Cover image for Should Developers Specialize or Generalize?

Should Developers Specialize or Generalize?

Void⚡ on January 24, 2023

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 be...
Collapse
 
nikfp profile image
Nik F P

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.

Collapse
 
gutopro profile image
Gutopro

I find the T concept educative. thank you

Collapse
 
leob profile image
leob

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.

Collapse
 
marcosdiasdev profile image
Marcos Dias

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.

Collapse
 
thallesrangel profile image
Thallesrangel

I agree

Collapse
 
leob profile image
leob

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).

Collapse
 
codewithvoid profile image
Void⚡

Makes sense. Thanks for sharing Marcos.

Collapse
 
derlin profile image
Lucy Linder

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?).

Collapse
 
codewithvoid profile image
Void⚡

Good point. Thanks for sharing Lucy!

Collapse
 
davelapchuk profile image
Dave Lapchuk

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.

Collapse
 
soldiercoder profile image
Ed Drain

I bet you haven't tried Elixir yet!

Collapse
 
rcls profile image
OssiDev • Edited

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.

Collapse
 
alvarolorentedev profile image
Alvaro

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.

Collapse
 
codewithvoid profile image
Void⚡

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.

Collapse
 
nerro profile image
Nerro

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.

Collapse
 
tinussmit profile image
Tinus Smit

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.

Collapse
 
codewithvoid profile image
Void⚡

💯 Thanks for the add Tinus.

Collapse
 
renatosugimoto profile image
Renato

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.

Collapse
 
codewithvoid profile image
Void⚡

Valid point. Thanks for reading Renato.

Collapse
 
roenfeldt profile image
Daniel

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.

Collapse
 
codewithvoid profile image
Void⚡

Appreciate it. Thanks for reading Daniel :)

Collapse
 
tythos profile image
Brian Kirkpatrick

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)

Collapse
 
hseritt profile image
Harlin Seritt

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.

Collapse
 
codewithvoid profile image
Void⚡

Good point 👍. Thanks for the add.

Collapse
 
cheese0409 profile image
Dongdong Yu

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.

Collapse
 
codewithvoid profile image
Void⚡

Interesting point. Thank you for sharing :)

Collapse
 
alaindet profile image
Alain D'Ettorre

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"

Collapse
 
codewithvoid profile image
Void⚡

Great framework. Thanks for sharing Alain!

Collapse
 
alvarolorentedev profile image
Alvaro

Commit strip expresed it very easily in this strip
Image description

Collapse
 
thenickest profile image
TheNickest

How shall specialising necessarily lead to more job opportunities? A special skill might be in high demand or not. How did you come to the conclusion?

Collapse
 
codewithvoid profile image
Void⚡

It's not my conclusion but the result from the poll :)

As mentioned in another comment - the poll population seems biased towards student/junior developers. As for them startups/small size companies are prefer more specialized role - like react developer over general software developer. This way it's easier for companies to train them.

Collapse
 
codewithvoid profile image
Void⚡

👍👍

Collapse
 
indubhusannath profile image
Indu Bhusan Nath

Still, I believe specialization is the right way

Collapse
 
codewithvoid profile image
Void⚡

Why so?

Collapse
 
gutopro profile image
Gutopro

I'm team specialize. Bruce Lee once said he wasn't scared of an enemy who learnt a thousand techniques but he was scared of the enemy who learnt a single technique a thousand times.

Collapse
 
codewithvoid profile image
Void⚡

Thanks for sharing Gutopro :)

Collapse
 
heatherw profile image
Heather Williams

I would say generalize early in your career and specialize later on once you know what you enjoy doing. That said you might specialize in e.g. DevSecOps but generalize in what tech you use to do that.
Or you might work at a small company and specialize in e.g. Python but generalize in doing a bit of everything with that.

Collapse
 
mikec711g profile image
Michael Casile

Nice article. I have always been a generalist but ... in hindsight ... I'm not sure. In that many technologies come and go ... being a generalist has some advantage there ... but I often look up how best to do something in a technology I'm using (or why something isn't working) and I actually envy the folks who have such a deep subject matter understanding. So my answer would have been ... No idea.

Collapse
 
the_yamiteru profile image
Yamiteru

Asking such a question is generalization in itself.

Those who replied "it depends" are the only ones who were right.

Imagine there are two people. The first one knows he loves kernels and compilers so he specializes in that. The second one doesn't really have a preference and just wants to make good money and go with the flow so he doesn't specialize.

Now if you chose either specialization or generalization you'd be wrong because you'd be denying the existence of one of these people.

So it depends. Next time ask concrete questions that derive more value.

Collapse
 
yurieastwood profile image
Yuri Eastwood

For me it's all about context, but in the end will be both.

While you're seeking for your first opportunity you'll end up going with the little you know about everything you've seen, and put some effort for the latest hiring trends, thus generalizing.

Once you've laid your stable career path you'll probably end up seeing a lot about a specific context, thus specializing.

And throughout your mid-senior path you'll use both to become a better professional. Knowing a little bit of it all and a lot about one/a few will complement each other.

Collapse
 
raviklog profile image
raviklog

Only on the context of Developer: My personal opinion, It is better to start with a Specialization...for ex: I can start with being a good Assembly programmer and i stabilize it...then having it as a foundation to become better at Generalization and take up newer technologies to work on. As we grow the Generalization helps more.Also liked to take a leaf out of Einstein's work...he initially came out with Special Theory of Relativity and then went on after decades of work in to General Theory of Relativity...So it evolves organically once the maturity and the grasp develops.

Collapse
 
devsmt profile image
devsmt

Depends on the market: in high competitive, overcrouded, dinamic and fast market there can't be successful alternative to specialization. Where there is lack of supply, for reasons demographics or regulatory, then can exist the need for generalists. For the most part we work in the first environment.