Among CS-major seniors who are in the top half of the class, none that I talked to knew what software version control was, what git or Perforce or cvs etc. were.
The faculty is good. Almost all of them knew their stuff, and a few were very good at explaining things clearly.
The kids just didn't seem to have much interest in doing computer stuff outside of class. You'd think at least once in four years they'd browse Github bug reports, do a patch and send a pull request. They don't though. The ACM computer club on campus was always a little derelict and is now pretty much inactive.
A lot of kids have vague ideas about building video games, but then take a graphics course which uses matrix math to calculate transformations, formulas to calculate Phong shading and so forth. After doing that they lose interest.
They do get training - the theoretical stuff is taught beautifully. We also did a lot of Java and C++, as well as some Python, Common Lisp, Prolog etc. As well as learning about DBMSs and the various normal forms, or how the fetch/execute cycle works etc. and all of that.
I don't know how to explain the problem other than that students did the work for a grade and that was it. They had no interest in programming outside of class work. One reason I did extra work was just to feel I could apply things. I learned Java, and then fixed some open source Java bugs, and then wrote a 1000+ line program in order to get a grip on what I learned. Otherwise it would be free floating theory about inheritance, polymorphism, objects etc. The same with graphics - I did some OpenGL work to ground what I learned in class.
Some kids did not even really seem to care about learning what was needed for class or getting a decent grade. I don't know why they're even bothering. I can see slogging through required general classes, but slogging through your major?