Откуда берется эффективность программиста


В некоторых книгах пишут (жалко, что не во всех), что эффективность программистов и их производительность может различаться в десятки и сотни раз. Это достаточно распространенное мнение, однако же менеджеры, да и сами программисты, как игнорировали, так и продолжают его игнорировать, а некоторые его даже оспаривают.
Вот вы сами верите в это? Я - да, я уверен в этом. И попробую сейчас это вам доказать.
Как же получается, что производительность двух программистов может различаться в десятки и сотни раз?


Рассмотрим обычную ситуацию (как это себе представляют некоторые менеджеры):
в одной большой компании работают два программиста - Петя и Вася. Допустим, что Петя и Вася - программисты абсолютно одного уровня, то есть сколько их не тестируй - не выяснишь, кто лучше.
Любой неопытный менеджер вам скажет, что 2 одинаковых программиста приносят фирме одинаковую пользу. Так ли это? Давайте посчитаем.
Пусть Петя и Вася работают по 9 часов в день, включая обед. Но на что и как они тратят эти 8 часов?



Петя каждый день как минимум час проводит на совещаниях и обсуждениях, а также за чтением писем и отвечая на них.
Петя курит, поэтому раз в час он уходит покурить на 5 минут, где иногда задерживается и на полчаса, но про это мы забудем.
Петя активно читает интернет и профессиональные блоги на работе, на что тратит еще как минимум полчаса в день.
Петя, как и любой программист, любит кофе и чай, поэтому пьет их раз 5 в день на кухне, где ведет разговоры с другими любителями чая. Всего 5-6 минут на чаепитие, но за день это полчаса.
Петя любит покушать и любит делать это с толком и расстановкой, поэтому он ходит в кафе и проводит там весь час, отведенный на обед.
Наконец, Петя, как профессиональный программист, тратит всего около 5 минут на “вхождение в поток”, в рабочее состояние после отвлечения. Так что если проссуммировать все его отвлечения, то на вхождение в рабочее состояние он тратит еще около часа-полутора.
Если вы задумаетесь, то Петя с таким рабочим днем - вполне обычный программист, которых вокруг вас 50%, если не все 80%.
В итоге же Петя из 9 часов, проведенных на работе, занимается полезной работой меньше 4 часов.


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


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


Это мы рассмотрели гипотетическую ситуацию, когда 2 программиста имеют совершенно одинаковый уровень, чего в реальной жизни не случается. Но даже при этом я показал, что у них может быть разница в производительности в разы, хотя оба работают и не ленятся.
Это именно та ситуация, которую пытаются улучшить менеджеры-администраторы, которые вводят всякие методы слежения за рабочим временем сотрудника. Такие менеджеры запрещают курить, запрещают собираться на кухне поболтать, сокращают обеды, закрывают выход в интернет и т.п. - делают все, чтобы люди только и делали, что сидели за компьютерами и делали вид, что работают. Да, в определенных ситуациях это может дать свои плоды и принести аж до двухкратного улучшения производительности, что немало (но при этом сильно повышается шанс, что такой сотрудник просто уволится и перейдет работать туда, где условия лучше).
На деле же всё гораздо печальнее и одними административными мерами проблем с производительностью не решить.


Мало того, на самом деле все эти административные игры - это все мелочи. Задумайтесь - человек, пашущий без перерыва целый день не вставая всего в 1.5-2 раза эффективнее, чем тот, кто общается, пьет кофе, читает интернет и т.п.
Вы считаете, что “в 2 раза эффективнее” - это достаточно? Нет - вы ошибаетесь.
Программисты не бывают “Васей” или “Петей” постоянно. Они переключаются между этими режимами периодически и иногда даже очень часто. Сегодня я “Петя”, а завтра я “Вася”. И при этом все равно один из программистов может быть в десять раз эффективнее другого.
Так что же может быть важнее, чем сидеть 8 часов за компьютером, не разгибая спины?


Вася может быть гораздо более опытным программистом, чем Петя. А значит он меньше “пробует”, а больше делает правильно с первой попытки. Он меньше думает, как что-то сделать, т.к. он это уже делал. Он знает, как избежать ловушек и кривого дизайна, так как это все уже было у него в прошлом. Это всё может дать ему просто огромный прирост производительности по сравнению с Петей - прирост в разы. А иногда и в 10 раз.
Например, я осознаю, что на то, что я сейчас могу сделать за день - на эту же задачу 10 лет назад я потратил бы неделю. При этом через неделю бы я получил нечто глючное и работающее с трудом только при правильной фазе луны. То есть, растет не только скорость работы, но еще и качество. И качество - гораздо более важный параметр в долговременной перспективе, так как если ты пишешь некачественно, то со временем все больше и больше твоего времени будет уходить на поддержку старого глючного кода. А на разработку нового будет оставаться все меньше и меньше времени.
Кроме опыта, Вася может любить находить простые решения, а Петя - сложные. Не всем дано уметь находить простые решения сложных задач. Но если такой человек у вас есть - можете быть уверены, что он будет работать в разы эффективнее чем те, кто везде ищет “наиболее общее” или технологичное решение. Принцип KISS (Keep It Simple, Stupid) проповедуется давно, но до сих пор слишком мало программистов ему следуют.
Вполне может оказаться, что Вася - очень фанатичный программист и даже дома и по дороге домой он обдумывает разные рабочие задачи. В итоге на следующий день он уже гораздо лучше подготовлен к их решению, чем Петя, который дома занимается другими делами. Это еще может дать Васе 50-100% прирост производительности по сравнению с Петей.
Также Вася может к тому же очень любить свою работу и делать что-то на выходных и по вечерам, что даст ему еще 1-2 дня в неделю, а значит еще 50% преимущества над Петей.


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

Это не конвеер - тут нет двух программистов с одинаковой производительностью.
И опять же - это не конвеер, так как 2 программиста могут отличаться в десятки раз по производительности, так что их не поставишь рядом крутить одинаковые гайки.


Как же менеджерам использовать это знание?
Во-первых, забыть про конвеер. Не надо считать всех программистов одинаковыми и годными на любую работу. Программисты с трудом взаимозаменяемы.
Во-вторых, надо видеть разницу между программистами и уметь ее использовать. Гораздо выгоднее иметь на проекте двух высокопроизводительных программистов, чем 50 низкопроизводительных. При этом эти двое могут выдать такой же результат, а то и лучше, чем те 50. Тот, кто думает, что это парадокс - тот плохой менеджер.
В-третьих, не брать на работу низкопроизводительных программистов. Зачем вам Петя, который делает в 10 раз меньше, чем Вася? Умейте их различать и не берите “Петю”.
Ну и самое главное - помогайте программистам развиваться и учиться. Именно знания и опыт дают им десятикратный прирост производительности.


Похожие записи:
Один день из жизни Программиста
10 заповедей для программистов
Shu-ha-ri для программистов
Непрограммирующие программисты
Книги + программисты = деньги
25 самых опасных программистских ошибок

22 комментариев к Откуда берется эффективность программиста

  • Знаю я таких “Вась”, они правда “болеют” очень часто (~неделю в месяц).

  • Да, а я как Петя - читаю ваш блог на работе… :) А еще я курить бросил недавно и пью чай/кофе за рабочим местом.
    Так что я приближаюсь к Васе. Потом тоже измотаюсь 8 часовым нервотрепом и тоже буду болеть неделю в месяц.

  • Порадовала статья. :) С какого бодуна Вася продуктивнее чем Петя, почему у него получается всё с первой попытки и он меньше “пробует”? Вася больше за компьютером просидел? Какой же это показатель? Мы же не летчики :) количество часов за штурвалом вообщем-то не важно, самолет каждые пол-года полностью меняется. Знания актуальные 10 лет назад сейчас никому даром не нужны, тем более решения для задач, которые были актуальны 10 лет назад.
    Не понял почему у Васи получаются простые решения, а у Пети сложные? Из чего это следует?

    Не убедительно.

    Про кофе и сигареты - вспомнил преподавателя математики на втором курсе:- “Как?! Вы курите?! У Вас же 5 (пять) по математике?!” Какая связь между курением, кофе и производительностью и опытом?

    Что хорошо:

    Конвейер - в программировании он не применим. Если программист не состоянии автоматизировать рутину, то грош ему цена.

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

    • С какого бодуна Вася продуктивнее чем Петя, почему у него получается всё с первой попытки и он меньше “пробует”?

      Просто потому, что у него все получается. Есть программисты, у которых получается, а есть у которых нет. Разве не так?

      Вася больше за компьютером просидел? Какой же это показатель? Мы же не летчики :) количество часов за штурвалом вообщем-то не важно, самолет каждые пол-года полностью меняется. Знания актуальные 10 лет назад сейчас никому даром не нужны, тем более решения для задач, которые были актуальны 10 лет назад.

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

      Какая связь между курением, кофе и производительностью и опытом?

      С производительностью - прямая. С опытом - никакой. Про это в статье написано.

      Испытательный срок лучше чем тесты на собеседовании и резюме, отсекали так людей, а потом опять звали, и оказывалось что в деле они гораздно лучше. Пока не поработаешь вместе - не поймешь.

      Естественно. Но опять же - если есть Вася с 10 годами опыта, то у него можно на собеседовании узнать что и как он делал эти 10 лет. Этой инфы уже может быть достаточно, чтобы понять его производительность. А вот у Васи, у которого опыта нет - про него не узнаешь, пока не поработаешь с ним.

  • Станислав

    Петя блогами еще и знания качает.

  • terr0rist

    Эффективность и производительность труда - вещи совершенно разные и никак не взаимосвязанные. Пример: в городе N выпало много снега (актуальная проблема, не так ли?). Производительность труда дворника Васи - скажем за час он может очистить 10 кв.м. А дворник Петя - скажем, 20кв.м. Однако дворник Вася может сесть на трактор и ничего не делая (низкопроизводительный труд) очистить 1000кв.м.
    То же и программист, Вася может производить 1000 строк кода в день, но при этом Петя возьмёт готовую библиотеку и напишет 10 строк, и в итоге получит ту же эффективность. Принцип KISS.
    Производительность труда программиста никогда не должна быть критерием. Могут быть такие критерии:
    1. умение верно определять срок решения задачи
    2. умение решать задачи в срок
    3. умение быстро находить решения (для определённых задач)
    4. чистота работы (отсутствие багов)
    5. объём производимого рефакторинга: улучшения алгоритмов и т.д. (чем меньше, тем лучше)
    6. взаимодействие в команде
    Кстати, по ТК РФ, *эффективный* рабочий день программиста - около 6 часов. И в реальности если человек работает больше - он уже работает неэффективно. Хотя может по-прежнему генерировать сотни строк кода, но эффективного ли?

    • Эффективность и производительность труда для программиста - это одно и тоже, если не считать производительность строками кода. Для меня “производительность” - это умение сделать задачу за срок Х. Если один программист делает задачу за Х, а второй за Х*2, то первый в 2 раза производительнее. И все равно сколько он строк написал или удалил - это неважно.
      И эффективность - это тоже самое - умение решать задачи наиболее быстро.
      Я разве где-то написал, что производительность - это число строк кода?

  • ganjubas

    Автор статьи сравнивает несравнимые понятия: эффективность и производительность. Это как сравнивать сколько вырастет апельсинов на плантации если на на ней посадить хорошие деревья и если посадить плохие. Производительность СЛЕДУЕТ из эффективности, а не является равной характеристикой. Ведь посадка хороших деревьев не зависит от того, какой урожай будет собран.

    Если без аллегорий, то: программер может быть эффективным, но плохо расходовать свое время (вариант “Петя”), либо он может быть ТАКИМ ЖЕ эффективным, но хорошо расходовать свое время (вариант “Вася”). В случае “Петя” продуктивность труда - плохая, в случае “Вася” - хорошая. Но НЕЛЬЗЯ сравнивать эффективность и продуктивность (аллегория приведена выше).

    Если рассматривать статью, как анализ производительности на основе эффективности - интересная, но ничего нового не раскрыла. Все эти проблемы известны давно и решаются стандартными (более или менее успешными) способами.

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

    • Я уже выше ответил, скопирую и сюда:
      “Эффективность и производительность труда для программиста - это одно и тоже, если не считать производительность строками кода. Для меня “производительность” - это умение сделать задачу за срок Х. Если один программист делает задачу за Х, а второй за Х*2, то первый в 2 раза производительнее. И все равно сколько он строк написал или удалил - это неважно.
      И эффективность - это тоже самое - умение решать задачи наиболее быстро.
      Я разве где-то написал, что производительность - это число строк кода?”

      Что такое для менеджера эффективность в отвязке от продуктивности? Нужен ли вам, как менеджеру программист, который “эффективен, но непроизводителен”? Такого не бывает - либо ты эффективен и производителен, либо ты неэффективен и непроизводителен. Это 2 совершенно равнозначных понятия.

      • Aku-Aku

        \\ Такого не бывает - либо ты эффективен и производителен, либо ты неэффективен и непроизводителен.

        А как в рамках такого понимания тогда учитываются например такие моменты как разработка архитектуры, разрешение проблем дизайна?
        Как вы будете для них мерять “производительность” и определять “эффективность”??

        А ведь Джоель вон правильно сказал: “дизайн — это та область, где ценность растет намного быстрее чем затраты на её получение”.

        А теперь подумайте и ответьте (себе) — нам что, не важна, не нужна эта неизмеримая ценность?

        • >>А теперь подумайте и ответьте (себе) — нам что, не важна, не нужна эта неизмеримая ценность?

          Я разве где-то писал про то, что она не нужна?
          И разве в разработке архитектуры нет “производительности”? Да как раз наоборот - в разработке архитектуры разница между двумя программистами может быть просто огромна. Кто-то будет пыхтеть месяц и сделает какашку, а не архитектуру. А второй за полдня набросает то, что 10 лет будет потом работать.
          Так что неважно где и над чем ты работаешь - эффективность везде важна.

          • Aku-Aku

            В том что все должно быть “хорошо и задешево” как бы никто и не сомневался.
            Черт как всегда в деталях.
            Например.
            Кто и как будет оценивать что вот эта вот архитектура цаца, а это кака? ;)
            Особенно если в конторе несколько новонанятых программистов, а менеджер над ними поставленные вообще из гуманитариев и только в ворде что-то одним пальцем умеет?
            Это я конечно усугубил… но ведь и в более регулярных ситуациях все ведь то же самое.

            Ведь никто не может слетать на 10 лет в будущее и оттуда принести знание какая архитектура, какой дизайн оказался успешным.
            А даже если бы и смог кто, откуда уверенность что это действительно ТТОТ, ЛУЧШИЙ дизайн, а не просто кусок унаследованого окаменевшего дерьма мамонта, которое просто никто не захотел трогать???

            • >>Кто и как будет оценивать что вот эта вот архитектура цаца, а это кака? ;)

              А никак! И в этом и есть главная проблема программирования сейчас :) Невозможно объективно оценить качество кода или архитектуры - только годы использования покажут.
              Отсюда все эти “код с душком”, “рефакторинги”, “юнит тесты” и т.п. - они хоть какую-то визибилити дают. Но и они все субъективны. А объективности в этом нет :(

  • что эффективность программистов и их производительность может различаться в десятки и сотни раз

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

  • Юра

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

    На мой взгляд, рассматривать вопрос эффективной работы нельзя без отрыва от контекста: мотивации, типа проекта, окружающей обстановки, офиса.

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

    • Я разве говорю, что замкнутость и работа по 8 часов - это главное?
      Я как раз говорю, что это не главное, а главное - это эффективность программиста в целом - его опыт и знания, умение программировать и т.д. - только это может дать 10х прирост производительности. Но никак не сидение за компом без вставания.

  • Alexander

    Работать по вечерам и выходные это чит. Хотя у меня иногда бывает :) Отдыхаешь-отдыхаешь и вдруг бац! Муза, чтоб ее.

  • lzcount

    В-четвертых, помните правило 80/20…

  • Serg

    Юра
    Март 12th, 2010 в 9:28 · Ответить

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

    На мой взгляд, рассматривать вопрос эффективной работы нельзя без отрыва от контекста: мотивации, типа проекта, окружающей обстановки, офиса.

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

    Согласен, от себя добавлю ситуацию из жизни.
    Заказчик просит реализовать очередную бредовую гениальную идею,
    Вася, которому все пох и который не ходит на совещаня и обсуждения, пишет, пусть и довольно быстро. Через пару дней\неделю\месяц, когда разработка уже закончена, выясняется, что это нафиг никому не нужно. Заказчик просит реализовать очередную бредовую гениальную идею и т.д.

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

    Так что тут с эффективностью и производительностью?
    Правильно, все зависит от формы оплаты Заказчиком работы, почасовая или за результат :)

Ответить

 

 

 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>