I basically came here to say this. Often HN is frequented by those who are go to top CS schools, but I do not think they are in the majority of most CS schools. It is really possible to escape a university with a BS and MS without knowing how to develop and learn beyond your scope of knowledge. At our university, for example, we are supposedly taught C++, but I still find myself having to explain basics like STL Containers such as Sets and Maps to 3rd and 4th year students. This is after they've run into bugs with something that would essentially take two or three lines using one of the above structures.
Another problem is that CS is often very, ahem, academic.
In the UK, we have the British Computer Society (BCS) who give accreditation. If your doing a CS corse without BCS accreditation everyone knows it will be a bit suspect.
However, the BCS you've probably never heard of, they aren't exactly at the forefront of anything, they are also quite stuck in the past.
In a world where dynamic or at the very least JIT'd languages are the norm, teaching Pascal or Delphi I really doubt is in the best interests of the students. Yet in 2003 that is what I was taught for first year.
So the idea that a CS graduate will be able to go in to software development immediately is a bit missleading. It's more a case of someone who has a CS degree will have demonstrated they have the aptitude to become a software dev.
I really do agree with your point, but it sounds like an excuse from academia. I can assure you that many students, when starting in their Freshman year in college, expect to be able to build the cool things they want to build or be competitive in the job after their 4 or 5 year stay is over. However, as you state, it is not necessarily the case and the problem is with the archaic nature of academia. Yet, you don't learn the things that many would define as essential knowledge in current technology.
In my university, for example, I have not once ever heard about design patterns or ever seen different coding paradigms other than OOP. What I've learned is how to solve trivial or nuanced problems in poor ways in languages not really suited for it. In job interviews, I've only passed through because of things I've personally self-taught myself due to projects I've worked on. So what's the point of an education if you have to teach yourself most things?