Оценка КПД программиста

Из школьного курса физики известно, что коэффициент полезного действия (КПД) — это отношение полезной работы к затраченной работе. Используя MSR Tools эту характеристику несложно вычислить для каждого отдельного программиста.

Пусть результатом работы программиста мы считаем набранные им строки кода. Тогда затраченная работа равна количеству строк кода, добавленных программистом. По мере развития проекта, часть этого кода будет удалена в результате рефакторинга и/или исправления ошибок. Оставшийся код — есть полезная работа. Далее используем стандартную формулу вычисления КПД. Что получается можно посмотреть на примере реальных проектов (метрика Efficiency для авторов).

Высокий КПД — это, естественно, хорошо. Это означает, что код оказался достаточно хорош, его не пришлось переписывать, его не пришлось выкинуть из проекта за ненадобностью. Написание кода требует времени. Время — деньги. Следовательно выкидывая код мы сознательно выкидываем деньги. Конечно это вовсе не означает, что нужно отказаться от рефакторинга. Наоборот. Рефакторинг позволяет решать дизайнерские проблемы на ранних стадиях их проявления. Однако нужно знать меру и стараться не переступать черту, за которой полезный рефакторинг превращается в «невротический» перфекционизм.

11 комментариев: Оценка КПД программиста

  1. В этой метрике больше зла, чем в любой другой. Ведь в неявном виде это просто количество строк кода. А к чему приводит измерение производительности программистов строками кода мы все прекрасно знаем и проходили. :) Ошибка в умозаключениях кроется в определении работы программиста. Он должен решить поставленную задачу, а не написать строчки кода. И не за строчки кода ему платят. Строчки кода, которые не решают задачу или решают ее плохо стоят мало. Тот программист, который меньшим количеством кода может решить задачу, и является более полезным для проекта. Ведь код потом надо поддерживать.

    • Semyon Kirnosenko говорит:

      Всё верно. И речь ведь идёт не об измерении производительности в строках кода, а об интерпретации отношения объёма добавленного кода к объёму полезного. Я повторяюсь — рефакторинг жив и будет жить. Но в ситуации когда все требования известны сразу и не меняются в ходе процесса низкий «КПД» говорит об ущербности или отсутствии этапа проектирования. В методологиях типа XP это в принципе нормально, но всему же должны быть разумные пределы. Если вдруг требуется переписать половину кода проекта это уже не рефакторинг это называется «Мы профукали Ваши деньги. Дайте ещё!»

  2. Natalya Rukol говорит:

    Привет, копипаст!

    Прощай, оптимизация!

    • Semyon Kirnosenko говорит:

      Если код сразу пишется качественно, то и вероятность того, что в дальнейшем он потребует рефакторинга значительно ниже.

      • Alexei Barantsev говорит:

        «Знал бы прикуп — жил бы в Сочи» :)

        Хотел бы я научиться писать код сразу качественно, без проб и ошибок. Так получается только если пишешь его в надцатый раз. Тогда, конечно, КПД в строчках фантастический, зато КПД мозга нулевой.

        • Semyon Kirnosenko говорит:

          А я и не утверждал, что высокого КПД легко добиться :). Но теоретически и 100-процентный КПД возможен. Конечно метрики — такая вещь, которую несложно обмануть. Можно просто не удалять ненужный код! Но вредительство и лень — тема для отдельного разговора.

  3. Alexei Barantsev говорит:

    Если я правильно понял, прототипирование — это деятельность с нулевым КПД?

    • Semyon Kirnosenko говорит:

      Если брать код в целом, то нулевым КПД быть не может. Точнее может, но только если Вы в какой-то момент удалите вообще весь код. А код полученный в результате прототипирования он ведь хотя бы частично наверняка останется. И даже если он будет удалён то на его месте появится другой код основанный на предыдущем. Поэтому ответ на Ваш вопрос — нет.

      • Alexei Barantsev говорит:

        Код прототипа зачастую выкидывается полностью, да. Иногда делается несколько прототипов, чтобы сравнить архитектурные идеи. Иногда даже на разных языках. Это всё деятельность с нулевым КПД, то есть бесполезная?

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

        • Semyon Kirnosenko говорит:

          Всё проще чем кажется. Вот напрототипировали Вы 100 строк кода и поняли как надо сделать. Удалили 100 строк и написали вместо них 50. Итого 50/150 КПД = 30%

        • Natalya Rukol говорит:

          Круто. Чем более лаконичным будет решение, тем меньше КПД :)

          А если серьёзно, то в моей практике после введения метрики по строкам кода в одной известной компании объём коммитов одномоментно увеличился в среднем почти в 2 раза. Чую я, что «не к добру» :)))