Ask HN: In CS, is it better to be highly specialized or generalized?

12 points by dlivingston ↗ HN
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.?

To rephrase: should a software dev be a jack of all trades, or a master of one?

8 comments

[ 5.9 ms ] story [ 36.2 ms ] thread
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).

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.

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.

Become a T-shaped developer. Have a broad range of skills with a deep expertise in one.
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

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!
It's one of my favorite as well! And that's an awesome little saying from your grandad too!
Do you want to become a consultant or a team leader?