My answer will be politically incorrect. However, I am actually a founder of a start up and my job is to hire the best programmers.
How do I know which people will be good programmers or can be good programmers?
1 word: IQ.
IQ is for programming as height is for basket ball players.
I would put Math skills as another more politically correct indicators. My computer science teachers told me that there is one criteria that correctly predict who will succeed at programming courses. High School Math scores. Those are effectively IQ anyway.
This may come as a surprise. We are told that programming is a college degree job. Guess what, I don't care about degree. I care only about 3 things.
- Programming skills (that can be tested).
- Aptitude.
- Common sense (not too low) people's skills.
Unfortunately IQ only measures one thing. So I do some tests.
I ask people questions. Simple question I expect elementary school kid should be able to answer.
I ask questions like:
- What's the distance between short and long hand of the clock at 7:35
- If I go from Jakarta to Semarang and want to maintain 60km/hour speed. Then on first 2 hours I drive 100km/hour. How fast I should go for the rest of the trip so that my AVERAGE speed is 60km/hour?
If you look carefully those questions do not require creativity at all. Only common sense. Any elementary school kids with IQ can answer that.
MOST college graduate cannot. Now imagine if someone cannot answer that? Can he program? Think about it. How often you will have to specify what he should do?
You can also ask questions like Microsoft that do require creativity. You can ask questions on how to weigh 8 balls in a balance scale to know which one is the heaviest. The problem with such questions is that it involves luck. However, some are quite easy it should be a minimum requirement.
Getting an awesome programmer can improve morales of other programmers. Getting one lawsy programmers can lower everyone else' morale.
After people can answer questions like that, which is very easy, I would make them write some google jam code.
Good programmers can solve google jam code and can predict which problems are easier.