One of the biggest differences, after raw talent, to a programmer's abilities is writing appropriate code with suitable data structures and algorithms, which in the real world means having a practical understanding of the computer system's underlying hardware, which are often "silent" or heavily muted details in the specification and requirements documentation in software development.
Here's a talk by Herb Sutter, noted C++ book author and ISO C++ committee member, entitled, "Machine Architecture: Things Your Programming Language Never Told You."
A useful resource is Randy Hydes' Write Great Code series of books. As well as classic computer organization and architecture textbooks like Structured Computer Organization by Tanenbaum, and Computer Architecture: A Quantitative Approach by Hennessy and Patterson.
Some programmer quality factors (IMHO):
- raw talent (hard to measure)
- knowledge of data structures and algorithms (i.e. education, often formal)
- knowledge of computer architecture and organization (i.e. hardware)
- real self-confidence, not shallow vanity, but comfortable with one's own abilities to withstand constructive criticism