Ask HN: In CS, is it better to be highly specialized or generalized?
8 comments
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
— Robert Heinlein, Time Enough for Love
Become a T-shaped developer. Have a broad range of skills with a deep expertise in one.
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.
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.
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.
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.
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).
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).
Do you want to become a consultant or a team leader?
To rephrase: should a software dev be a jack of all trades, or a master of one?