10X – и всё же они существуют
Некоторые люди просили больше информации о том, откуда взялось название этого блога «10x». Суть названия в том, что исследователи обнаружили 10-кратную разницу в производительности и качестве между разными программистами с одинаковым уровнем опыта, а также между разными командами, работающими в одних и тех же отраслях.
Первоначальное исследование, которое обнаружило огромные различия в индивидуальной производительности программирования, было проведено в конце 1960-х годов Сэкманом, Эриксоном и Грантом (1968). Они изучали профессиональных программистов со средним опытом 7 лет и обнаружили, что соотношение начального времени кодирования между лучшими и худшими программистами было примерно 20 к 1; соотношение времени отладки более 25 к 1; размера программы 5 к 1; и скорости выполнения программы около 10 к 1. Они не обнаружили никакой связи между количеством опыта программиста и качеством кода или производительностью.
Детальное изучение результатов Сэкмана, Эриксона и Гранта показывает некоторые недостатки в их методологии (включая объединение результатов программистов, работающих на языках программирования низкого уровня, с результатами программистов, работающих на языках программирования высокого уровня). Однако даже после учета недостатков их данные все еще показывают более чем 10-кратную разницу между лучшими программистами и худшими.
За годы, прошедшие с момента проведения первоначального исследования, общий вывод о том, что «среди программистов существуют различия по порядку величины», был подтвержден многими другими исследованиями профессиональных программистов (Кертис, 1981 г., Миллс, 1983 г., ДеМарко и Листер, 1985 г., Кертис и др., 1986 г., Кард, 1987 г., Бём и Папаччио, 1988 г., Валетт и МакГарри, 1989 г., Бём и др., 2000 г.).
Также есть много анекдотических подтверждений большой разницы между программистами. Во время моей работы в Boeing в середине 1980-х годов был проект, над которым работало около 80 программистов, и который рисковал пропустить критический срок. Проект был критически важен для Boeing, поэтому они перевели большую часть из 80 человек с этого проекта и наняли одного парня , который закончил все кодирование и поставил программное обеспечение вовремя. Я не работал над этим проектом и не знал этого парня, поэтому я не уверен на 100%, что эта история правдива. Но я услышал эту историю от человека, которому доверял, и в то время она казалась правдой.
Такая степень вариативности свойственна не только программному обеспечению. Исследование Норма Августина показало, что в различных профессиях — писательстве, футболе, изобретательстве, работе в полиции и других — 20 процентов лучших людей производят около 50 процентов продукции, будь то тачдауны, патенты, раскрытые дела или программное обеспечение (Augustine 1979). Если задуматься, это просто имеет смысл. Мы все знаем людей, которые являются исключительными студентами, исключительными спортсменами, исключительными художниками, исключительными родителями — эти различия являются лишь частью человеческого опыта; почему мы должны ожидать, что разработка программного обеспечения будет отличаться?
Учёт крайних случаев в статистике
Исследование Августина показало, что, поскольку некоторые люди не вносят никакого ощутимого вклада (квотербеки, которые не делают тачдаунов, изобретатели, не владеющие патентами, детективы, которые не закрывают дела, и т. д.), данные, вероятно, занижают фактическую разницу в производительности.
Похоже, это верно для программного обеспечения. В нескольких опубликованных исследованиях производительности программного обеспечения около 10% субъектов экспериментов не смогли выполнить экспериментальное задание. В исследованиях в записях говорится: «Поэтому результаты этих экспериментальных субъектов были исключены из нашего набора данных». Но в реальной жизни, если кто-то «не выполнил задание», вы не можете просто «исключить его результаты из набора данных». Вам нужно дождаться, пока он закончит, назначить кого-то другого для выполнения его работы и так далее. Интересный (и пугающий) вывод из этого заключается в том, что около 10% людей, работающих в сфере программного обеспечения, на самом деле могут вносить *негативный& вклад в производительность своих проектов. Опять же, это хорошо согласуется с реальным опытом. Я думаю, многие из нас могут вспомнить конкретных людей, с которыми мы работали, которые подходят под это описание.
Изменение производительности команды при разработке программного обеспечения
Эксперты по программному обеспечению давно заметили, что производительность команды варьируется примерно так же, как и производительность отдельного человека — на порядок (Mills 1983). Частично это объясняется тем, что хорошие программисты, как правило, группируются в одних организациях, а плохие программисты — в других, и это наблюдение было подтверждено исследованием 166 профессиональных программистов из 18 организаций (Demarco and Lister 1999).
В одном исследовании семи идентичных проектов затраченные усилия различались в 3,4 раза, а размеры программ — в 3 раза (Boehm, Gray и Seewaldt 1984). Несмотря на диапазон производительности, программисты в этом исследовании не были разнообразной группой. Все они были профессиональными программистами с несколькими годами опыта, которые были зачислены в аспирантуру по компьютерным наукам. Разумно предположить, что исследование менее однородной группы выявило бы еще большие различия.
Более раннее исследование команд программистов выявило разницу в размере программы в 5 раз и разницу во времени, необходимом команде для завершения одного и того же проекта, в 2,6 раза (Вайнберг и Шульман, 1974).
После анализа данных за более чем 20 лет при построении модели оценки Cocomo II Барри Бём и другие исследователи пришли к выводу, что разработка программы с командой, находящейся в 15-м процентиле программистов, ранжированных по способностям, обычно требует примерно в 3,5 раза больше человеко-месяцев, чем разработка программы с командой, находящейся в 90-м процентиле (Бём и др., 2000). Разница будет намного больше, если одна команда более опытна, чем другая, в языке программирования или в прикладной области, или в обоих.
Конкретные случаи
Одной из конкретных точек данных является разница в производительности между Lotus 123 версии 3 и Microsoft Excel 3.0. Оба были настольными приложениями для работы с электронными таблицами, завершенными в период с 1989 по 1990 год. Случаи, когда две компании публикуют данные по таким похожим проектам, встречаются редко, что делает это прямое сравнение особенно интересным. Результаты этих двух проектов были следующими: Excel потребовалось 50 человеко-лет для создания 649 000 строк кода. Lotus 123 потребовалось 260 человеко-лет для создания 400 000 строк кода. Команда Excel создала около 13 000 строк кода за год работы персонала. Команда Lotus создала 1500 строк кода за год работы персонала. Разница в производительности между двумя командами составила более 8 раз, что подтверждает общее утверждение о различиях в порядке величины не только между разными людьми, но и между разными проектными командами.
Что вы видели?
Видели ли вы разницу в возможностях 10:1 между разными людьми? Между разными командами? Насколько лучший программист, с которым вы работали, был лучше худшего? Охватывает ли диапазон 10:1?
Автор: Dhwtj