The more I watch people struggle with programming, the more I think that synthesis and intellectual flexibility are far more important skills than the ability to write small, isolated, brilliant bits of code.
That means somebody who can come up with a sensible, coherent vision of what the application will do, not only keep its working parts in her head but imagining/seeing how it all fits together as a whole program/narrative… and ensure that things are sensible and consistent across the board. That means not getting caught up with the tiniest details but rather having the willpower and restraint to execute (and finish). And, finally, someone who can remember the overweening point of the development to begin with.
…the world seems full of people who can competently solve subsets of a problem but who fail utterly at building an entire solution.