Но вот что я не могу понять, если человек берет по часовую оплату, но из половины и даже больше этих часов он разбирается сам, как это можно сделать, получается, что он не совсем хороший программист? Или это в принципе нормальное явление? И как тогда поступать считать меньшее количество часов ?
Это нормальное явление. Программист — это работник
умственного труда. Научить быстро-быстро долбиться пальцами в клавиатуру можно обезьяну. Если инструктор хороший, то из-под пальцев обезьяны может даже выйти код и — о чудо! — он даже может заработать, но вот научить обезьяну по-человечески думать вряд ли у кого-нибудь получится.
Программисту платят не за имитацию бурной деятельности, а за решение конкретных задач в вполне конкретные сроки, причем почасовая оплата или нет роли тут не играет. До тех пор, пока программист укладывается в сроки, мой Вам совет, не пытайтесь заниматься микроменеджментом там, где этого не требуется. Особенно с учетом того, что микроменеджмент написателя кода руками — это задача примерно того же порядка, что микроменеджмент кота. Результат обычно такой же.