Disclaimer: I don't have a CS degree, so maybe things are different in a true CS program.
Update Feb 4, 2016 - I have since this post received a B.S. in Computer Science.
Roughly two years ago, I finished up my associates degree in Technology with an emphasis on computer programming. I had always been a self-taught programmer. I started by teaching my self BASIC using QBASIC on MS-DOS back in the early 90's. I tried my hand at a little Pascal, and learned C and eventually C++. After graduating high school I went to Arizona State University to study CS. The one CS class I had my first semester was all C++. I did a couple of the assignments, but unfortunately, my stupidity and youth got the better of me and I spent the rest of the year alternating between asleep, or drunk. The only class I did attend was marching band (good god, I am a dork).
I later tried to retake some classes at ASU to bring my GPA up to the level for reinstatement. The same CS class was now in Java. I passed, but my GPA was like .2 shy of being eligible. I then went to a local technical university with an emphasis on game programming. After taking some classes for a while, I dropped out because it just seemed it wasn't getting anywhere.
After working in banking for 5 years, I finished up the remaining credits I needed to at least get an associates. After getting that, I quit banking and got a job as a computer programmer for a local firm.
Now that the background story is out of the way, let me get to the point of this post. I've taken my fair share of programming courses. I've taken courses in C++, VB, C#, Java, Database programming, etc. Now, I didn't think I was an expert by any stretch of the imagination, but I though I knew a fair amount when I started this job. Boy was I wrong.
All of the piddly little assignments that I had to do for classes were absolutely worthless if you ask me. Pretty much every programming course was just a rehash of the previous one, but in a different language. The exercises were all, pretty much the same, even in higher level courses. Sure, maybe they'd introduce some new concepts along the way, but none of this was at all preparatory for the real world.
I came into a job where I would be maintaining a large code base. It's legacy VB6 stuff and it's nasty. It would be the perfect case study for a book on feature creep. I came across one function that's so long, that the VB6 IDE won't let us add more code to it. No joke.
Most classes just glaze over the topic of debugging, if they even mention it at all. Of course, I can't think of how one would give a lesson on debugging, either. Sure, you could provide a piece of buggy code and ask for it to be fixed, but that's only the literal definition of debugging. How do you teach a student how to use a debugger? Most textbooks just briefly mention that the given IDE has a debugger, and that' s usually only the one's dedicated to a .NET language. What if your shop uses C, and does everything from the command line in a unix environment? How many students know how to use gdb?
I never had to write a .dll for one of my classes. Everything was a stand alone application. I've written one standalone application in my nearly 2 years of employment. I've written or maintained countless dll's.
I learned more in my first two weeks on the job, than I did in all of my classes put together. None of this is to say that getting a higher education is not worth it. In fact, I wish I hadn't been such a slacker earlier in life and just gotten a proper 4 year degree from ASU (although, I do believe everything happens for a reason. I have a certain perspective about the work I do now, that I don't think I would have if I hadn't gone through some of the trials and tribulations that I have. But that's a topic for another post). However, I do think that we need to change how we teach programming. I think the open source movement has had, and will continue to have an impact on this. Many aspiring programmers start out tinkering on OSS. If the schools would encourage this and incorporate it into their curriculum, I think those entering the work force would be much better equipped.