Ask HN: In CS, is it better to be highly specialized or generalized?
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 ] threadIn 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).
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.
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.
— Robert Heinlein, Time Enough for Love