ну допустим:
1. "детские" ошибки.
Код:
$temp = $value;
echo $temp;
лишняя операция присвоения. такие ошибки легче всего.
2. работа с памятью. Встает вопрос о том, как работать с памятью. что лучше: диамически выделять память или хранить переменные статически. как реализовано: копирование, выделение, очистка?
3. ООП. если используется, то нужно смотреть реализацию классов, методов, перегрузку операторов, наследование и т.д. что где используется, оправдано или нет?
4. этот пункт уже не обязателен, но если попадутся очень качественные работы, то его можно учесть:
а). используется ли какая-либо нотация при присвоении имен переменных, классов, методов?
б). читаемость кода?
в). комментарии?
а самое главное:
код должен как можно оптимальнее реализовывать конкретный алгоритм.
p.s. конечно тут встанет вопрос о разнообразии языков и технологий. скажем в c#(.NET) в принципе не нужно брать на себя работу с памятью, т.к. за нас уже это сделает среда ..NET. Как вариант, можно будет разделить работы на несколько групп. В каждой группе свой победитель.
в любом случае, даже если отмести все критерии, которые я привел, то останется 1 основной:
оптимальная реализация алгоритма.