Just a couple of thoughts, if I may.
Wendy says that one can graduate with a CS degree, yet have little idea of the practice of programming. Isn't that hugely troubling, even horrifying? It's as disturbing as the fraud that submerged English departments in the '70s: literature is not a collection of ideas that one can understand and integrate, but rather a bunch of 'texts' that the student must abstract and 'deconstruct' ( http://www.answers.com/topic/deconstruction ). Happily, that fetid tide is ebbing, maybe because the instructors who wiped out in its weedy surf are retiring now.
Years ago -- decades ago -- my first course in CS taught me assembly language (before C was invented) using actual problems like sorting, hashing, and searching (and, yes, recursion). My second course taught the design and realization of a real live working compiler. I was a part-time student at MIT and those two courses were all I needed to begin getting paid as a programmer; and to become just somewhat productive two or three months later.
So this morning, hearing Wendy's cry, I'm thinking that surely MIT, of all places, cannot have diluted its offerings and deluded its students with (in the context of programming practice) pretty-much-useless crap. But when I look at MIT's EE/CS curriculum, I see that's just what's happened:
I particularly notice that the the department uses Python as a/the teaching language! I mean, really! It looks like a CS degree at MIT means to qualify a student to become a teacher of CS at MIT. Talk about recursion!
Then I came across this contribution to Coding Horror ( http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html ) and thought it very much to the point of this conversation:
"I'm a latecomer to this discussion [about predicting success in programmer candidates], but in my experience as a late-blooming 30 year old CS undergraduate senior, I've found the programming classes to be useless, and less badly taught as un-taught. I've only been to a community college and then the University of Illinois in Chicago, but the introductory programming classes were:
"1. Object-oriented, which left students with little or no understanding of procedural methods, and
"2. Weed-out classes. The classes consisted primarily of descriptions of different types of problems and the mathematics behind them, rather than ayntax and structure, for which people were told to just read the book.
"Code was barely directly acknowledged until the Data Structures core, and then it still depended on which instructor you got, some being very code light and some being nicely code heavy. You could tell that it was a big temptation for teachers to be code light at this point, because if they concentrated on code, they would also have to concentrate on teaching students who had been in a computer science course for two years how to program.
"Since coding is a hobby for many young people, I think that educational institutions have relied on that to establish their expected learning curves, leaving people who had little to no experience programming when they entered school no choice but to cheat like crazy, spend all of their spare time studying code, or switch majors. And it isn't a necessarily a deficit in abstract thinking in my experience, because everyone I know who dropped out of CS ended up in Electrical Engineering, which is nothing to shake a stick at on the abstract front. They still don't know how to program, while doing math that I can't make heads nor tails of. Most absurd memories:
"1. Java as the required programming language. I'm not going to bash Java here, but wouldn't it be nice for students to have to learn their own garbage collection? And wouldn't pointers be a nice thing to learn, even if we never decided to program in a language with them again?
"2. Taking a core class on operating systems theory, after being being deluged with Java, and finding out it was in C (of course) without even one C class on campus?
"Of course, I'm thirty, and also one of those people who always programmed, so I had no problems, but I saw plenty of people who I knew were better at abstraction than me (from Calculus, DiffEQ, and physics classes before) and their total agony at trying to finish a program that had been stacked against them."
Just a couple of data points but, as others have said, haunting.