Programming is hard, and for some people it´s hard bordering on impossible. A surprising number of the latter still manage to get CS degrees.
Part of the problem, IMNSHO, is that we have widespread disagreement with the profession of software 'engineering' (such as it is) about what is mandatory, what is excellent, what is good, what is minimally acceptable and what is intolerable. We even see that what some people think is mandatory others think is intolerable, and vice-versa.
I don't know that we'll be able to have an actual proper software engineering profession for at least another two decades, but honestly closer to a century.
CS is the only field where this happens, as far as I can tell. There's plenty of degrees that aren't really useful career prep, but they're generally well-known--no philosophy major expects to graduate into the highly-paid world of professional philosophy. But if you're studying law or medicine or architecture, you absolutely do expect to be learning career skills.
There's this bizarre hole in CS where students come looking for a law degree and somehow get philosophy training instead. And then we have a thousand blog posts complaining about how fresh CS grads can't code FizzBuzz, and nobody at the universities ever makes the connection.
While, or right after, taking these theoretical courses in Java or graphics or whatnot, I would launch a project in that area to ground all that theory in something I could then manifest. I don't think this occurred to many of them, but to be fair, they are young and have been in school all their lives, and I went to class with a lot of (mostly non-programming) experience in the IT business already under my belt.
I was pretty intimately familiar with CVS by the time I graduated (very late in the 90s). But now that I think about it, it was probably introduced in an "Intro to C and Unix" which was a 1-credit class one of the faculty forced as a pre-req for certain higher-level courses like those on compilers. It was a crash-course on C (for students who had mainly used Pascal in their first year or two), Unix philosophy, and some associated tools (make, cvs, vi/emacs).
It only met the first third of the semester, so it could be taken concurrently with the class the required it. I wonder if other schools do something similar. It worked quite well, since by the the time you got up to speed, it was time to start building lexers in the compilers course.
I should mention, also, that our programming exercises were in C++ exclusively, on the campus Unix system exclusively, and the only development environment we were ever officially taught was vi. Not even Vim. IDEs, debuggers, webcode, and GUI libraries were never mentioned. Hell, they didn't even teach us anything about CLI or vi beyond the absolute minimum needed to create a file, compile it, and run it. I spent some time trying to figure out how to just get a C++ compiler on my desktop so I wouldn't have to mess with vi anymore, with no help whatsoever from my classes.
I have never had to use C++ in my entire career since.
I've heard the same complaint from a lot of my classmates. The ones who were successful right out of school were the ones who were working on their own projects outside of class, and learning that way--which some people will say that I "obviously" should have been doing myself, but in my teenage naivete I assumed that the curriculum I was paying so much to receive would actually teach me what I needed to know.
I suspect you were down voted because there are a lot of people who went the traditional route into programming who now feel threatened by (or at least indignant towards) people coming in via accelerated routes like bootcamps and self-teaching.
The reality is that the universities _should_ be doing a better job.
Personally, I think splitting the two roles into different kinds of institutions with different goals makes a lot of sense, and we already have this with universities vs. trade schools and community colleges, but (unfortunately, IMO) employers have consistently shown that they prefer to hire people from places that at least make a show of being more of the "higher education" persuasion than the "job training" persuasion. Sooo, yeah, you're probably right that in the current world, universities should just do a better job of teaching job skills.
I dropped out of the CS department after I screwed up my math pre-reqs, studied history, and spent what time I wasn't drinking beer or playing basketball, fooling with game programming. That actually left me in good stead when I managed to leverage the few programming-centric courses in the CS department into a minor - I still can't do proofs, but I can sling code and I read enough Joel on Software and Coding Horror to pick up some software engineering and architecture by osmosis.
even better, learn programming on your own before college. then hacking out assignments is easy, and you can form a great appreciation for the theoretical work.
Focusing on practice or theory alone misses some of the magic, imo.