You are mixing up 'programmer' and 'computer scientist'. They aren't necessarily one and the same. Computer science is largely the mathematics of computing, it just so happens that to physically show it often one has to write code to do it. This doesn't mean that everyone who writes code automatically is a CS major/graduate.
As an aside, you could also argue that programmers should have a good grasp on design patterns, requirements, planning, etc... Which seems to fall under the title of software engineer now. My CS department to date has required me to take a single SE course since I've been here and it'll be the only one I'll take.