This question makes the mistake of putting all programmers - and programming jobs - in the same bag...
In other domains the distinction is clear... on one hand you have "scientists" who do the research ... and on the other hand you have "engineers" who take care of the applications.
Computer science is no different...
There is a small population of "scientist" programmers (computer scientists) out there that do work on innovative algorithms and "computationally challenging" problems... I think they are a minority and tucked away from their Post Doc research into R&D departments.
And then there is us - the overwhelming majority of "engineers" programmers...
I know for example "engineering" programmers who efficiently use complex cryptographic libraries but who - by their own admission - have only a very vague inkling of what goes on inside besides general principles
and would not recognize an elliptic curve if they met it in the street.
I also know some "scientist" programmers out there who wrangle with daunting problems like natural language processing but would panic at the idea of writing a small [name your language and environment] application.
Soooo.... to go back to the original question. Do the immense majority of programmers need to be bludgeoned with theoretical CS and made to fence with computational theory - beyond general principles?
I don't think so......
Compare with medicine...what GPs learn is practical operational knowledge that they will need for their practice (yup they're "engineers").... which has very little to do with a what a molecular biologist will need to know to do her research.
If you're sick would you rather have by your side a GP who has practical clinical knowledge or one who has a lot of theoretical understanding on protein folding mechanisms.... ?
I'll leave you to see how that applies to IT and "programmers".....