If the goal of universities is to pass on "deep knowledge", then I would argue that the vast majority of such institutions are utter failures at their mission.
We might have a definition problem, where some institutions that offer what amounts to a technical education (i.e. with almost no mandatory "theoretical" courses) call themselves "colleges".
In the workplace I definitely experience the difference between one who received a formal education, in the sense of raw theory, and one who studied how to "do" things. Both are useful, but they serve different purposes.
From my experience working in management over the past decade, I can say with some confidence that most computer science programs excel at pushing out people that can not, in fact, code in the real world.
Sure, they can solve ACM-style challenges and spit out Dijkstra on a whim, but I can't recall the last time I needed to deliver on a business objective that mapped to either of those things.
This is not to say that understanding computer science is bad! Having a deep understanding of the underlaying theory and technology is a requirement to attain mastery.
But being able to ship maintainable, well-factored, and properly-tested code in a collaborative environment is far more important to me than having memorized every algorithm in TAOCP.
I mean, if I can have both skillsets, I'll totally take both skillsets, but given the choice between the two, I know that a wizard-level software engineer with very weak algorithms skills will, in general, bring a lot more value to a project than a wizard-level computer scientist that can't write code that the rest of the team can maintain.
About the only time that a computer science wizard is useful to me, is if I already have a team of solid software engineers, so that they can mentor each other and lift the overall skill level of the team.
What universities really need to start doing is including a multi-year track built into their curricula whereby students build and maintain production software over the course of their studies, with quarterly rotation between teams.
Why not produce useful software needed by wider society as part of the course? Whether it's open source which will give them the github credentials or something like CodeForAmerica that fixes needed public works.
The problem is the dog eat dog narrow mindedness of seeing everything as a competition and not learning anything about collaboration and serving others. Something a lot of CS grads would benefit massively from, I know I would have.
Equally to blame is the industry hiring process. ACM HackerRank and Codility challenges are often the first stage before you're put through a whiteboard. As a result, a competent programmer has no incentive to actually continue training in best practice, rather optimise for the interview process. I flat out refuse to do any interviews with this silly competitive programming hoop jumping. As a manager, what is your hiring process?
I share your concerns, but I absolutely disagree with your last proposal: Universities should stay universities. There's a reason why civil engineers aren't pouring concrete and installing cables etc in a new hospital, for example. There are vastly more competent people for the tasks, and they all went to technical school (electricians, etc).
I actually think Universities do a disservice to their students if they promise them a curriculum that "leads to a job". You should go to University if you want to continue your formal education, not "to get a job". If you just want to get a piece of paper that lets you get a job, mentor with someone, go to a technical college, learn to "do" something. But Universities should teach how to think, that's about it, IMO. If you can find a job after should have no impact on the curriculum.
I am from Brazil, here people demanded that I should go to university to get a degree to get a job.
I can say now that trusting the adults was stupid idea, I ended getting student loans, got a degree, but no job. I am 29 now and my government job registry is still empty.
Then we need to build an entirely separate practical education track in the United States, similar to how things work in Germany. We could base it in community colleges to leverage existing mindshare and infrastructure.
I would actually love to see this, but haven't yet thought through in-depth how it would work in the US.
Because right now, nothing like this exists, and until it does, the primary focus of most university students is to indeed "get a job".
You mean like trade school? I'm not familiar with the German system, but the description of "practical education track" sounds a lot like trade school. Of which there are many in the US but are considered undesireable in comparison to college.
There really needs to be a division in American universities between Computer Science and Software Engineering, the same like you would find between Physics and Mechanical Engineering.
A part of which is the difference between information and experience.
Schools attempt to cram as much information as possible in as little time in the overworked and overwhelmed minds of the students. The result is low retention and studying for the tests.
Knowledge and deep understanding come with time and experience in the presence of awareness.
The experiential parts of medical training for example are closer to hazing than anything else. We have enough research to know that the brain needs rest to process learning. Having people work for 24-36h straight does not do anyone a favor, is not sustainable and presents significant dangers to everyone involved.