Front end and back end are different enough that you can really specialize in one or the other. They take very different mindsets. I know how to make css obey, I don't know how to make sql performant. Its possible to have both, but not as well.
For every front-end dev, you need 3 back-end guys and a designer.
Programmers are not bad at our jobs, its just not a mature disclipline yet.
Programming is over 70 years old, that's not a new discipline. Yet, the engineering in our industry is still abysmal. Countless reinvented wheels, nothing is ever finished, changes happen often enough for the sake of change, not progress.
That's part of the nature of programming. Half-finished might be good enough. If you've made an awesome wheel but I need a kink in one of my spokes and yours doesn't do that, making my own wheel might be cheaper than modding yours.
OTOH, there's nothing more frustrating than looking for a particular wheel, finding ten really great ones that collectively have the features you need, but individually aren't good enough.
To stay in the analogy: usually we just want to transport things from a to b. It doesn't matter, how we get there. So usually we begin with a road and start to cobble together a vehicle from barely fitting and functioning junk we find on the roadside.
There's hardly any stable surface to work on. And that's extremely costly.
I don't agree and I don't disagree, but I thinkcontext matters a lot here. Some teams and codebases need deep knowledge, some don't. Some nned sql performance, some don't. Your conclusion is only true some of the time