Sometime we get a new inexperienced guy in a company as a programmer. Typically, we test them beforehand; however they are rarely perfect when started. Sometimes they are very new to programming or have bad habits from previous programming jobs. Thus it is my goal to help them to improve. And sometimes it gets really hard to integrate the guy into company. However there are some criteria that allow recognizing people with potential on becoming programmers and ones that are better left behind.
Persistence and knowing how to learn. Even more, urge to try and learn new things. I love programmers that know how to look for information on a problem. Everyone can do a task they learned, but the best programmers know where to look for an answer and never give up without a good reason. The best way is to give a task they have no experience in and look how they are trying to solve it. If a person gives up prior googling for an answer, he will not be a programmer.
Ability to integrate various things he learned in different environment. Few programmers learned MVC or frameworks at universities here. However, they have learned FSMs or some other paradigms that can be successfully applied in web development as well. Few try it though (Note: knowing more than one programming paradigm is a bonus).
Ability to create a concise logical algorithm for solving a problem. You can be entry level web programmer without that, but that’s it. Ability to draw these using some popular schematics like UML state diagram is a bonus.
Ability to debug code of other person. A programmer is unable to learn if he can’t dive into code of someone else and understand how it works. Sooner or later you will have to implement a similar algorithm where you will not be able to use that code as it is. This is closely related to ability to create algorithm.
Ability to write code other people understands. I loved one programmer that wrote nice functions for everything while coding a trivial task in PHP. Also, he commented a lot. Sadly, his interest was not web programming.