If you pose that question to a nontechnical person, you'll probably get an answer relating to technical ability. Traits like problem solving, being good at math and having a knack with computers are what most people identify as making a programmer tick. So when a programmer writes software that is technically excellent, meaning it runs lightning fast and doesn't have any bugs, can we say it's a job well done?
A client who finds the software difficult to use might not think so. Another programmer who is struggling to change or extend the software would have something different to say. And the original programmer who picks up the software after two years and doesn't understand what he wrote wouldn't think so either.
There's a lot that goes into being a successful programmer, and technical ability is only one piece of the puzzle. What are some of the other pieces?
A good programmer is a good communicator. There is a reason we say "writing" code; like any quality novel or story, a good program can be summarized and explained to the layperson. The same holds true when a programmer works in a team; if none of their colleagues can understand or work with what they write, what is the point?
Technology doesn't stand still–and neither does a good programmer. An appetite for learning is something you'll find universal among the best programmers. We like to read as much as we like to experiment with new platforms and technologies. On the other side of the coin, there is a more critical eye, one that sees through hype and buzzwords. New technologies that are more style over substance won't make it into the toolbox.
You may be forgiven for thinking it takes a certain type of person to be a programmer, and you would be right. If you ask a programmer for the single most important personality trait to programming, I'm willing to bet the word perseverance, or another of its many synonyms like persistence, tenacity, determination, would be the answer.
Sometimes it takes time to find that elusive bug, to not take that shortcut or simply work through a large project. But that's not to say impatience isn't a virtue. In fact, Bill Gates made a point to hire programmers he saw as impatient or even lazy simply because they would find faster ways to work.