It depends on where you go. Jon Kleinberg's class on algorithms (and classes based on his book) is great. I don't think every CS student gets access to that quality of construction
As for database design, OO-design or concurrency, my experience is that you've got to spend two years or so building that kind of system before you're an asset instead of a liability. Some students might really get that much work in during their educations, but they won't all entirely.
In 1992 I took the only CS course that I've actually taken, and it was a course in comparative programming languages that introduced OO programming through Ada (a thoroughly obsolete form) and spent a lot of time on logic programming with Prolog. Now, I think Prolog is beautiful and my recent work has led me to believe that (20 years later) we're going to have to go more in that direction, the fact is that for practical purposes, Prolog is a dead end.
And then at the graduate level it's all about fads. At one top CS school there's nobody interested in the semantic web and description logics because that's all "dead stuff from ten years ago." In the engineering library at that school, I can find five units of modular shelves filled up with conference proceedings that plod endlessly about IP QoS, despite the fact that none of that has ever seen the light of day. Anybody with a pulse can think of ten or twenty other research areas that ought to be vastly more productive, but, somehow, resources never get allocated for them.
In terms of the actual needs of the workplace, what it takes to be productive ~is~ detailed knowledge of the details that are relevant now. Why are Facebook and Google having a crazy bidding war for employees (other than the fact that they've got too much capital?) -- it's because they're building stuff on a scale that nobody else is and you can't get experience building at that scale elsewhere.
As for database design, OO-design or concurrency, my experience is that you've got to spend two years or so building that kind of system before you're an asset instead of a liability. Some students might really get that much work in during their educations, but they won't all entirely.
In 1992 I took the only CS course that I've actually taken, and it was a course in comparative programming languages that introduced OO programming through Ada (a thoroughly obsolete form) and spent a lot of time on logic programming with Prolog. Now, I think Prolog is beautiful and my recent work has led me to believe that (20 years later) we're going to have to go more in that direction, the fact is that for practical purposes, Prolog is a dead end.
And then at the graduate level it's all about fads. At one top CS school there's nobody interested in the semantic web and description logics because that's all "dead stuff from ten years ago." In the engineering library at that school, I can find five units of modular shelves filled up with conference proceedings that plod endlessly about IP QoS, despite the fact that none of that has ever seen the light of day. Anybody with a pulse can think of ten or twenty other research areas that ought to be vastly more productive, but, somehow, resources never get allocated for them.
In terms of the actual needs of the workplace, what it takes to be productive ~is~ detailed knowledge of the details that are relevant now. Why are Facebook and Google having a crazy bidding war for employees (other than the fact that they've got too much capital?) -- it's because they're building stuff on a scale that nobody else is and you can't get experience building at that scale elsewhere.