|No such thing as a small change|
What about the guy who answers "red-black trees? Isn't that yet another theoretical CS datastructure that I'll never actually code myself, because tonnes of people have written a more efficient version already?".
If I try to store data terribly efficiently in some data structure, I'm probably be doing a premature optimization, something theoretical CS people also hate. ;-)
I mean, sure, I've got a mathematics background. In theory, I could look for some group theory to find me a nice hashing algorithm for a given problem. In practice, a sufficiently good hashing algorithm that's been coded and tested probably already exists; and it's almost certainly a waste of time to retread that ground unless I'm doing research in optimizing hash algorithms.
In general, there are three classes of CS problems - unsolved problems, on-going research, and solved problems. In general, businesses dislike betting their infrastrcture on unsolved problems and on-going research, so 99% of programmers will be dealing with solved problems. The correct solution to a solved problem is usually to download the code that solves it (if it exists), or code up the most reliable algorithm that's known to solve the problem (if no code exists yet).
Theoretical CS benefits many, many people: but that means that only a few really smart people actually need to do it. The rest of us just reap the benefits. I'm not smart enough to to PhD level cryptography, for example -- but I can certainly run the code that does, once my friends work out the algebra that underlies the algorithms.
So, in general, unless you're going to design a compiler, compiler theory isn't useful, except as an example of how to solve a complex problem. Multi-variate calculus isn't all that useful for doing the day-in/day-out work of making a billing system run. It's very useful if you happen to be working on a non-linear optimization research problem; but few of us non-PhDs are.
In general, real world knowledge is mostly what programmers need; the CS experts build tools for the rest of the world to use, and we need a lot less toolmakers than we do builders.
I guess my point is that I spent a lot of time learning the framework so that I could learn CS theory, but almost none of it applies to any job I've ever done. That's only for the Real Smart Kids (TM).