Еще раз к вопросу об эффективности программистов

Я получил несколько интересных комментариев на пост «Откуда берётся эффективность программиста«, которые навели меня на мысль, что я не слишком четко изложил свою позицию по этому вопросу. В комментариях соцсетей люди пишут, что я не прав, говоря, что эффективность измеряется только временем, проведенным за клавиатурой. Что кто-то за 4 рабочих часа может сделать больше, чем другой за 8.

Но ведь это именно то, о чем я и писал!

эффективность программистаВозможно первый пример про “работящего Васю” и “обычного Петю” сбил всех с толку, но этот пример показывает только то, что при прочих равных производительнее будет тот, кто больше времени уделяет работе, а не другим делам. Это вроде как очевидно и споров не должно вызывать.

Другое дело, что разница в производительности (эффективности) между такими Петей и Васей будет не очень-то большой, если они отличаются только усидчивостью — разница будет в процентах или десятках процентов, максимум в 2 раза (хотя бывают и клинические случаи, когда опытнейшие люди просто испытывают уже отвращение к работе и занимаются ей от силы 10% своего времени, но это все же клиника, которую можно не рассматривать).

К тому же редко встретишь программиста, который никогда не ленится или никогда не впадает в “рабочий раш”. Обычно программисты переключаются между режимами Пети и Васи несколько раз в месяц (а некоторые умудряются переключаться и каждый день).

Зато если Петя и Вася отличаются уровнем знаний, опытом и природной одаренностью, то разница в их производительности может уже составлять десятки раз.

Например, даже если Петя сидит за клавиатурой 3 часа в день, а Вася — 8, но при этом Петя одарён и опытен, а Вася — студент, только начавший изучение программирования, то производительность Пети будет в сотни раз выше, чем Васи. И неважно, что он клавиатуру может за целый день даже не потрогать — у него перед Васей такое преимущество, которое тому простой усидчивостью никак не наверстать.

Пример со студентом наиболее нагляден и понятен, но и среди профессионалов существует такая же разница — кто-то просто работает в 10 раз лучше, чем другие. И это сложно чем-то конкретным объяснить — ни опыт, ни знания тут в принципе ни при чем, хотя и оказывают влияние. Но бывает, что программист с 5 годами опыта работает на порядок эффективнее, чем программист с 20 годами опыта.

Вообще, чем дольше я в этой индустрии, тем больше я укрепляюсь в мысли, что программирование сродни искусству. Мы, как художники — либо умеем “рисовать” и делаем шедевры, либо не умеем — и делаем какашки.

Также я получил один интересный комментарий про то, что производительность программиста и его эффективность — это совершенно разные и несравнимые вещи.

Что ж, это зависит от того, что считать “производительностью”, а что “эффективностью”. Если под производительностью программиста кто-то понимает число строк кода, которые тот настрочил, то да — это не эффективность. Строки кода — это вообще не параметр для программиста, как бы не пытались его продвигать любители метрик.

Плохие программисты пишут много кода, который в итоге усложняет программу и в особенности её поддержку в будущем. Такой код пишется быстро, но в будущем он превращается в болото, не дающее развивать программу дальше и тянущее весь проект на дно.

Хорошие программисты пишут мало строк кода, которые делают много работы. Такой код уже гораздо легче понимать, развивать и поддерживать.

А лучшие программисты берут проект и уменьшают число строк кода в нем, делая код проще и надежнее и добавляя при этом новую функциональность. У них что, отрицательная производительность?

Для меня производительность программиста — это умение решать поставленную задачу за определенное время. Например,

Вася получил User Story и сделал ее за 5 дней. А Петя такую же User Story сделал с тем же уровнем качества за 10 дней.

Очевидно, что Вася в 2 раза более производителен. И также очевидно, что он в 2 раза более эффективен, так как делает в 2 раза больше за то же время. А сколько строк кода каждый из них написал или удалил — это неважно.

Проблема же измерения эффективности в том, что у программистов нет эталонных задач, которые можно было бы давать периодически Васе и Пете и сравнивать их эффективность. Все задачи разные и сравнивать время, потраченное на разные фичи разными людьми — это занятие неблагодарное.

А дать двум программистам для сравнения реализовать одну и ту же фичу независимо друг от друга — на это менеджмент никогда не пойдет, “ибо неэффективно”. Может и зря…

Оставить комментарий