I think a distinction should be made between a programmer and a *good* programmer.
My CS program had a number of *really* smart kids - 1600 SAT scores and the like - but many of them really struggled at the concepts and barely made it through the curriculum.
I think a good programmer takes
1. Creativity to think about problems from different angles
2. Drive to hunker down and get through hard problems (be it starting a new language, that pesky compile error, starting a large project from scratch).
3. I'm sure fellow slashdotters can think of many more