I am a programmer. There are different skilled level of programmer. Let me break it down, then you can think of a way to identify them during interview.
1. Programmer who can solve simple problems.
2. Programmer who can solve hard problems.
3. Programmer who can solve very hard problems.
4. Programmer who can solve hard problems and recognize the root of the problem.
5. Programmer who acknowledge the root of the problem and brave enough to determine that the root problem must be solved.
6. Programmer who acknowledge the root of the problem, brave enough to determine that the root problem must be solved, and smart enough to know what the solution is.
7. Programmer who acknowledge the root of the problem, brave enough to determine that the root problem must be solved, smart enough to know what the solution is, and hard work enough to actually solve the problem for the good of the company.
You just need to find a way to identify these different type of programmer.