I think its really up to the individual person to gain those skills. If you don't care the concepts won't mean anything, even if they're spoon fed to you by a university professor.
I've met a fair few old school programmers who were around before CS courses really took off, they know everything on this list.
I disagree with all but the third, and I especially disagree with the 4th, the worst designed programs I've seen were written by CS trained people. They try and implement overly complex models because they've been taught them. Pure experience trumps book knowledge every single time in software design.
I know I have gaps in my knowledge, but if that's the best you've got I'm still happy I got a Philosophy degree!
You're also absolutely right that CS training isn't a panacea. Actually I tend to suggest math or electrical engineering training to people looking to get into the field. CS programs tend to overcorrect in some areas. For example, new CS grads often want to overuse regular expressions.