With much of CS and programming being so collaborative, those that just don't have the talent or the heart for it generally cause more hassle and grief for the rest of us.
Of course, I'm also not assuming that I'm not an awful programmer myself, but I really do love CS and try to improve myself all the time.
Sure, there are some people who finish through sheer bullheadedness and others who stop caring after they graduate, but I still think that if you manage to make it through a 4 year CS program (especially if it is at a place like Stanford), there is a pretty good chance you have potential to become a useful programmer.
I'd argue that one reason we end up with CS graduates who don't end up becoming very useful is that our industry in general isn't that great at mentoring, and there are a lot of things you need to know to be a decent programmer that aren't always taught (or taught very well) in college. Good mentors in the first few years that someone is developing professionally can make a huge impact, and we should figure out a way for this to happen more often.
You'd be surprised how adaptable people can be. It wasn't long ago that most of us spent our days finding and growing food. Compared to the skill change in the agriculture to industry transition, learning about computation isn't a big deal.
The difference, for programmers, is that they get to do interesting stuff with those machines.