
Ask HN: In CS, is it better to be highly specialized or generalized? - dlivingston
As a programmer, is it better for long-term career growth to hone in on one single skill (i.e., systems programming, or high-performance computing, or webdev) or is it better to be more of a generalist - to be able to write iOS apps, but also know a bit of assembly, but also be familiar with .NET and React, etc.?<p>To rephrase: should a software dev be a jack of all trades, or a master of one?
======
navd
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, analyse a new problem, pitch manure, program a
computer, cook a tasty meal, fight efficiently, die gallantly. Specialization
is for insects.

— Robert Heinlein, Time Enough for Love

~~~
osrec
That has become one of my favourite quotes - thanks for sharing. Reminds me of
my grandad, who used to tell me "Study like a scholar. Play like a champion."
before he dropped me at school!

~~~
navd
It's one of my favorite as well! And that's an awesome little saying from your
grandad too!

------
csnewb
Become a T-shaped developer. Have a broad range of skills with a deep
expertise in one.

------
natalyarostova
Depends on your natural ability as well. Scott Adams outlined an interesting
heuristic, which is that for some/many people being the 80th percentile in
five fields can give you the same value as being, say, the .999th percentile
in one.

In addition, in some sense it can be easier to be the 80th percentile in five
fields with hard work. Whereas being the .999th percentile in one can also
require God given talent.

I work as a data scientist who can do some development, stats, ML, design,
writing, communication, econ. In any one of those I'm not a specialist.

------
codegeek
It depends on your goals in life (if you have thought of them yet).
Specialized means that you are can solve one specific problem really well and
you can be relied upon to do that. But in that case, you may not be running a
team or an entire company. So if you goal is to be really good at being an
individual contributor, I would say go Specialized.

If your goals in life are to manage a team, company, do more high level
strategic or visionary things, then you need to acquire all round knowledge
and skills.

Both of their pros and cons. So there is no right or wrong answer. It comes
down to who _you_ want to be ultimately. It is always about you.

------
tr33house
tldr: jack off all trades and master of ONE at the beginning, master more as
time goes by. Fields are highly correlated.

In my opinion, i'd take the 'be a jack of many trades and a master of some'
route.

CS fields are very correlated and being a master in at least __something__
will boost your overall mastery of many other subfields.

At the start of your career, exposure to a lot of fields goes a long way while
simultaneously going deeper in one field. Doing this opens a lot of doors and
CS changes too fast for you to know what the future holds.

Being a master in at least one field will greatly improve your income
potential and help you position yourself professionally. Being familiar with
other technologies will help you if you ever need to pivot so you're not too
clueless. It also opens you up to what tools are out there so you can choose
the right tools for a specific problem (at which point you'll dive deeper into
it).

------
sloaken
Do you want to become a consultant or a team leader?

