I really didn't want to get involved in the debate going on over at Matt Welsh's blog, but I would like to offer a slightly different perspective.
The debate on Matt's blog is a classic one in CS undergraduate education. That question is: how much should we teach "real world" skills? And usually the answer I've heard is, "This is Computer Science, not a vocational program.", or, "This is Computer Science, not Engineering." etc.
Having spent a long time in industry, I can tell you the single most important thing a industrial Computer Scientist needs to know is: What the hell is this and how do I fix it.
Now, how do you get to that? How do you feel comfortable diving into deep hardware and software problems? Tinkering. Practice. Persistence. Being comfortable with failure. Knowing how to ask questions, read manuals, and type complex, arcane search queries into google.
You need to understand and appreciate not just how computers work, but how other computer scientists think. To do this you need to understand geek culture to some extent - why we always take shortcuts across the grass, why we hate Windows, why we sometimes describe programs as beautiful.
This all takes time, patience, and practice. And an incredible amount of stubbornness and persistence. The challenge to us as Computer Science educators is how to best cultivate this sense of duty toward solving problems.
Now some might argue the beauty of mathematics is enough to slog through Discrete Math. The burning desire to know the soul of a machine is enough to endure hours a night hunched over a soldering iron followed by eight hours of doing it again.
I think for some students this is true. But for many students this is not enough to stay the course, as it were.
We need to teach Computing that has purpose and meaning. Students need to understand why all this stuff matters. The "eat your Theory vegetables because it teaches you how to think" argument doesn't really hold here, but nor does a vocational PHP course.
Undergraduate CS Education needs a story - with a beginning, a middle, and an end. Students need to learn not just how to make and stack the building blocks, but to see how they fit into the context of the play room.
Give students that, and they will eat their theory vegetables gladly. Retention rates will soar. Instead of saying, "So what?", underrepresented minorities will say, "So that's what!"