Great programmers I've known seem to have a narrow rather than a wide sort of ability. They tend to be unbelievably great at some things but maybe know nothing about others. What they all have in common is the ability to have good new ideas, and to write code that works.
All the things on your list seem reasonable, except for numbers 1 and 5. In my experience, great programmers know that the world is so surprising that they tend to avoid even trying to estimate things. They may try to predict at a coarse granularity, but beyond that they just try to set things up so they can easily change their minds later when their predictions turn out to be wrong.
All the things on your list seem reasonable, except for numbers 1 and 5. In my experience, great programmers know that the world is so surprising that they tend to avoid even trying to estimate things. They may try to predict at a coarse granularity, but beyond that they just try to set things up so they can easily change their minds later when their predictions turn out to be wrong.