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.
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.
https://martinfowler.com/articles/is-quality-worth-cost.html
As 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.
Change kills the value of a specialist.
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.
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'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.
It depends on the situation, but going slow misses out on learning opportunities that come from a faster iterations.
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?