Master your craft, overengineer your products.
I've always been one of those code-snobs, who argued that students ought to understand garbage-collection, pointers, recursion, etc. I decried the "java-schools" that basically just trained you how to use an API. However, I'm afraid the practical argument is lost. Spolsky argues:
"Without pointers, for example, you'd never be able to work on the Linux kernel. You can't understand a line of code in Linux, or, indeed, any operating system, without really understanding pointers.
Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable."
And that's fine and dandy, but the fact is the vast vast majority of programming jobs don't need these skills. Most students being forced to get Computer Science degrees today would probably be better served with a Software Engineering degree.
I think when I previously would argue for strict CS educations I was letting personal emotion about code and algorithms get in the way. The subtext of the argument goes: "this stuff is beautiful and fascinating and everyone should have to learn about it". It's proselytization, being wrapped up in false pragmatism.
Instead, I think those of us who find sublime beauty in the clever thought-stuff that is Computer Science should take a new angle in presenting our obsession. When a person shares news about an odd-finding in quantum-physics or bio-genetics, nobody demands a practical use. If you want to study ancient civilizations, it's perfectly acceptable that you are doing it out of just love and curiosity. Let us study Computer Science for the love of the subject itself, practicality be damned!
There's also nothing wrong with deeply understanding your job far more than is necessary for proper implementation. A home-builder almost certainly does not need to know the same issues as a skyscraper-architect, but if the home-builder finds construction truly fascinating and DOES know about advanced issues like the effects of wind-shearing on tall buildings, they can probably apply their knowledge to make a slightly stronger, sturdier house. The house would've been fine regardless, but now perhaps it has optimal roof angles for running off water and withstanding strong wind, or maybe it's hallways are oriented to increase insulation.
Those of us who love code would all love to be working on something like MapReduce, just as every amateur astronomer would probably like to have some time on the Hubble telescope. But just because we lack that opportunity doesn't mean we can't still apply our passion to the simpler tasks available. Sure, the same tasks could've been done by a Java-schlub, but take pride in the fact that your version is written with that expertise that makes it far more robust, clever, extensible, and efficient than it'll ever need to be. ;o)