Understands programming is problem solving.
The better you get at solving problems in general, the better programmer you will be.
A beautiful mind.
An ability to quickly, clearly understand how the data in the system is interacting with each other.
solves problems of all kinds in his spare time. Learns to apply the different ways
Loves to develop software
Painters love painting, writers love writing, musicians love making music..
never knows enough. Instead of "I don't know", the first thought in their mind is "I want to know how".
The biggest talent is the talent to learn. For example, I don't judge on what languages somebody knows - what is more important is that they are actively learning and trying new things. Playing with new tools. Regularly.
It is very easy to find somebody who is very very good at what they do today, but can't translate those skills to something new. Unfortunately, this business moves frighteningly quickly at times.
First, the ability to break a problem into small, manageable parts. A problem can be anything- from a feature request for a product to a complex algorithm. The idea is a programmer doesn't get lost in the complexity. They can break the problem into small, manageable pieces which can be done incrementally or concurrently with a group of people. This should be easy to measure- if you can understand a complex problem then it's broken down enough.
The second quality is the ability to deliver a "thing" to a "user" efficiently and with a positive result. A user can be another programmer, a product owner, even a business. The "thing" can be an class, framework, a website, or even an answer to a simple "Is this possible?" question. If you're impressed with the end result in an expected timeframe it's good. If it's an overkill solution or it took too long, then the problem wasn't broken down correctly! Why shouldn't you be impressed with a software product?
Third, a developer must have vision which is aligned with goals. Foresight is extremely important. Systems are organic and must grow. If something is done quickly and fancy, but is full of bugs or can't be changed, then shortcuts were taken and a bad product was built. If something was done that doesn't get the group to where they need to be, then the programmer isn't really helping anybody. What positive value is being added for the end result? This should be explicit and visible.
To gauge these qualities quickly (as in an interview) simply do some role playing games. Propose a complex problem and see if it can be broken down effectively. Ask how it will be done. See if long term problems can be solved or the system has extensibility points for growth.