Joel on Software had a nifty lil' article I dug recently. He kinda echoes my sentiments on the current crop of programmers coming out of colleges nowadays: they're more vocational than educational. Wow. That was catchy. I just thought that up!
To any point, the issue at hand is that pragmatism has seeped into colleges that keep wanting more money to give to football players. When I was completing my undergraduate degrees, a few courses were starting to teach data structures using Java instead of C++. The idea behind their reasoning is that they would have to spend less time fighting memory leaks, more time learning a language actually used in the industry and more focus on the algorithms at hand (since data structures are language-agnostic). It seems sensible to me to teach some data structure courses in Java... that way you can spend more time figuring out why a binary search tree is more efficient than a linked list.
But back in my day, we started CS 101 with freakin' Scheme. That's right. That's right. And it blew everyone's freakin' minds. Recursion vs. iteration was something that was absolutely essential to our budding brains. List manipulation was needed for us to learn how to manage memory later. And once we learned the essence of all the basic CS algorithms, we didn't need to really learn a language, we just needed to understand syntactically how a language was comprised.
Now that I actually have a "job" managing enterprise software, I'm finding that software in the corporate world doesn't need to be fast. It doesn't even need to be that correct, ultimately. It just needs to be easily mantainable. That's what the crux of enterprise software is - maintainability; so when you quit and move on the next dufus who sits in your chair can easily pick up where you left off.
And hence why all the knowledge I gained in four years is quickly evaporating from my head...