• The problem with most programming courses today is scope exceeds depth. I can still write a program at machine level, but frankly that skill is presently of little real value as a core study in any course. Focusing on what tools should be learned broadens scope, but doesn't imply inherent value. Forcing anyone to learn a specific language is probably counterproductive at some level, even if the language is C.

    When I think of what should be learned, I can sum it up in two words: logic & structure. Those are skills unrelated to any specific language, and almost none of the recent graduates I deal with have a significant foundation in basic logic or basic structure to be effective out of the gate. They often have a smattering of many languages, tend to be efficient in only their particular passion, and only truly effective in a narrow range. (And that isn't a reflection on the individuals, but on the fact these two fundamentals are not stressed enough, and not even the genius crowd can know everything.)

    Think of coding as similar to auto repair: mechanics don't manufacture engine blocks, or any of the myriad of parts they combine to make a car run; realistically most coders today don't fashion those parts. Yes, for kernel coders and the like there are specific skill requirements, but these people breathe the code. For most general programmers, it is far better they learn to combine tools and components well, rather than carry around some ill-formed and often incorrect views about pointers and the like.

    As for CS in general, it would benefit greatly if the people in the programs were the ones with the greatest latent talents. Just like all folks cannot be great doctors, not all folks can be great programmers. The standards in our industry are reflected by the standards of these programs.

    Of course, I'm getting old, it's late, and I'm pretty sure I lost track of my own point many minutes ago.