Ask HN: Is it better to be quick generalist or a slow specialist?
In development world, we often espouse idealistic ways of writing and managing code: readability, maintainability etc...it's a very deep subject.
Compare this to the reality of many jobs, where some manager needs stuff delivered NOW.
It would seem a "hacker", someone that can bodge things together and make them "work" is more valuable often than someone who does everything following best practices....which would be seen as more naive perhaps.
Put another way, is it better to be a ultra pragmatic could-care-less hacker or an opinionated craftsman.
I know people complain, that you leave a mess for others to deal with. But really why would you care? It's not your problem anymore.
24 comments
[ 2.6 ms ] story [ 78.7 ms ] threadAs time goes on those bodges Programmer A is making will accumulate in the code and make it harder and harder to make changes and each new task takes longer to complete.
Programmer B on the other hand will find the code in a good state that's easy to change so each will be able to deliver tasks at a steady maintainable rate.
Of course if Programmer A is going to make a couple of changes and then leave the project there's no incentive for them to do anything other than bodges, that why we have things like code reviews so that those programmers who are going to be on a project long term can spot the bodges before they get into the live codebase.
https://martinfowler.com/articles/is-quality-worth-cost.html
It is better in theory, but not in practice.
A startup needs to deliver ASAP, and doesn't care if something is built carefully if a competitor beats you out the door with a subpar product. And that applies to any size company in fact.
If you want to take your time doing it well, work for yourself. Because out there what matters the most is delivering as quickly as possible.
Is that really put another way? You can't swap out generalist for careless hacker and specialist for craftsman, they don't mean the same things.
You're also attaching it to people's identities which doesn't make sense to me. A better question is - when is it okay to be sloppy in order to get something done and when should you take your time and pay more attention to all the details. << that way it can be the same person who is sometimes making some tradeoffs to meet a deadline and sometimes moving slower and thinking about long-term consequences, instead of someone always carrying the label "quick generalist" or "opinionated craftsman" or whatever.
I work in the latter and being a "jack of all trades" (who can do many things okay...ish but little really well) fits really good.
Many more companies than you think are very happy to take that tradeoff.
It's better to decently know 25 technologies, than being the world-class expert in the Spring Framework and nothing else.
Software engineering gets more complex and branches off every single day. The more things you know, the better, because it's not how deep your knowledge is, but how quickly you can get up to speed with something which you didn't know existed until today.
Ability to learn >>>> specialisation. So get good at learning by learning something new every single day.
Disclaimer: My HN profile says I'm a "jack of all trades", so I'm very biased.
The easiest way to quickly pick up new tools and languages is to have a deep understanding of the relevant concepts.
Or to put it another way, if I've only got 3 hammers of different sizes then everything will still look like a nail :)
So, it depends. If there's a high change whatever you're working on is there to stay, it's better to do it well.
If you're still experimenting, or unsure if the feature is there to stay, then the tech debt incurred might not matter.
“Nothing’s more permanent than a temporary solution.”
Change kills the value of a specialist.
What are you some stable environments in our industry? Are they going to be stable in 5-10-15 years?
I wish I picked Emacs up a while back. It seems to be stable.
Compilers are stable, I think.
A tenured computer science professor?
Thinking about this highlights the fact how backwards our industry is. It's either a handful of ultra specialist roles or continuing to jump from tech stack to tech stack to stay employable. My cgi-bin experience is worth nothing currently.
The pragmatic thing then, is to be a generalist.
Usually in complex settings you need a whole suite of problem solving strategies.
If you're asking about people's personal preferences it's going to be, funnily enough, personal. Right?
So, if you want a machine on which your business runs resurrected, regardless of parts availability, you will come to me and pay several thousand dollars.
It depends on the situation, but going slow misses out on learning opportunities that come from a faster iterations.