Определения
Перед тем как определять хорошего программиста, Стоит дать определение просто программисту. В самом простом случае
Программист - человек, который пишет код.
Оценка - понятие субъективное, поэтому надо определить субъекты, которые будут проводить оценку. Знакомьтесь:
- Пользователь - человек, который работает с программой. Ему важно чтобы программа работала быстро, не глючила, делала то, чего он от неё ждёт.
- Программист. Ему важно, чтобы код программы был читаемым, красивым, легко и быстро изменялся. Что такое красивый код – тема для отдельной статьи.
- Заказчик – человек, который платит программисту деньги. Естественно деньги он платит не просто так, а за работающую программу. Работающая программа ему нужна для решения какой-либо бизнес-задачи. Решение бизнес-задачи позволит ему либо зарабатывать больше, либо тратить меньше. В реальном мире бывает, что заказчик преследует другие цели. Такие заказчики к теме статьи так же не относятся.
Осталось определить, что такое хорошо. В общем случае это большой философский вопрос. В случае субъективной оценки
Хорошее – то, что соответствует системе ценностей субъекта.
С понятиями разобрались, теперь можно переходить к оценке.
Пользователь
Пользователь хочет работать в максимально комфортных для него условиях. Он не хочет тратить время и силы на размышления о том куда нажать. Он хочет премию и в отпуск. Ещё у пользователя есть чувство прекрасного, поэтому он хочет, чтобы кнопочки были красивыми, таблички ровными, а всплывающие подсказки напоминали о красивой отличнице в первом классе, у которой можно было списать математику. Кто для него хороший программист? Тот, кто придёт, выслушает его истории о том, как вчера ему вылечили зуб, какой его начальник козёл и как его во втором классе несправедливо перевели в другую школу. А потом встанет, похлопает по плечу и скажет что-то типа: «Смотри, вот тут есть кнопка твоего любимого цвета. Нажимай ее, когда тебе нужно что-то сделать и всё заработает само»
Программист
У программиста есть задача. Он хочет её решить. Решение задачи помимо денег приносит программисту моральное удовлетворение от процесса. Программиста, как и большинство людей, раздражает то, что стоит на его пути к удовольствиям. Непонятный код – одна из таких вещей. Кроме задачи у программиста есть чувство прекрасного. Он смотрит на отступы, на названия переменных, пытается понять алгоритм. Если в процессе переписывания кода программист получил удовольствие, код считается хорошим. Значит и программист, который его написал, тоже хороший.
Заказчик
В случае 1С заказчик, как правило, бизнесмен. Бизнесмен любит деньги. Он любит получать деньги и не любит терять деньги. Причём он настолько не любит терять деньги, что готов платить другим людям, чтобы этого избежать. В трудовом кодексе это называется «заработной платой». Бизнесмены тоже люди. У них тоже есть чувство прекрасного. За удовлетворение этого чувства они тоже готовы платить зарплату. Для бизнесмена хороший программист тот, кто поможет ему «делать деньги» за наименьшую зарплату, при этом удовлетворять его чувство прекрасного.
В поисках баланса или как не продать душу дьяволу.
Понятие о хорошем у всех троих сильно отличаются. Каждый хочет лучшего для себя и объективно оценить чьё мнение важнее невозможно. Но есть другой показатель - деньги. Деньги есть только у заказчика. Чтобы их получить, довольным нужно сделать именно его. Например, если заказчик требует, чтобы все переменные назывались по-особенному, потому что испытывает нежные чувства к букве «г», программисту придётся выбирать между совестью и голодом. Тот, кто достойно разрешит это противоречие может считаться хорошим программистом, как минимум с двух точек зрения. Для себя я выбрал такие критерии:
Хороший программист помогает заказчику делать деньги максимально дёшево.
Для этого нужно учитывать не только задачу, но и контекст в котором она решается. Заказчики в этом плане могут делиться на две категории, одним важно сократить только стоимость разработки, другим – сумму стоимостей разработки и владения. И для достижения их целей бывает нужно писать код, который даже писать не хочется. И это подводит ко второму критерию.
Хороший программист сам заботится о том, чтобы писать хороший код.
Иногда приходится делать задачу быстро и на коленке, за этот код стыдно, но вариантов сделать по-другому просто нет. Иногда хорошие продуманные разработки тупо уходят «в стол». И то и другое бьёт по мотивации. «Зачем делать хорошо, если этим всё равно не будут пользоваться?» А ещё очень тяжело сконцентрироваться на задаче, когда что-то болит, или не выспался из-за того, что полночи ругался с женой.
Заключение
Критерии получились абстрактными, но это описание некого идеала от обычного неидеального парня. Стремиться ли к нему и каким путём – личный выбор каждого. Я всё сказал.