Супергерой или миф: как возникло понятие 10х-программист и что за ним стоит
Все, кто так или иначе связан с IT-сферой, знакомы с понятием 10х-программист. Так называют самых крутых и эффективных разработчиков. Термин встречается буквально везде: от кликбейтных статей “Как стать программистом за месяц” до книг уважаемых экспертов вроде Стива Макконнелла или Мартина Фаулера. Даже в сериале «Кремниевая долина» в первых же сериях упоминается, что главный герой – как раз один из тех самых 10х-программистов.
Все статьи по теме ссылаются на некие исследования ученых. Я разобрался, как появились 10х-программисты и что на самом деле стоит за этим термином.
Очередной заказ военных
В 1966 году научная группа из двух сотрудников System Development Corporation Евгения Гранта и Гарольда Сэкмана по заказу армии США сравнивала эффективность работы опытных программистов (тогда еще не придумали Сеньоров) при прямом доступе к компьютеру и работе через оператора.
В те времена для того, чтобы запустить программу, надо было принести ее в вычислительный центр. Помещение, размером с современный дата центр, мог занимать всего один компьютер с единой точкой ввода/вывода. Программисты отдавали свой код в распечатанном виде или на перфокартах оператору и вставали в очередь на его исполнение. Ждать результата иногда приходилось до двух дней.
Альтернативой была новая на тот момент концепция разделения времени вычислительных ресурсов компьютера между несколькими рабочими местами. С помощью телетайпа программист самостоятельно вводил свою программу в компьютер и почти тут же получал результат. Но на все это уходило много накладных расходов: было необходимо более дорогое и сложное оборудование, а на переключение контекста между пользователями требовалось дополнительное машинное время. Критики этой концепции опасались, что программисты будут лениться самостоятельно проверять свой код, часто запускать нерабочие и неэффективные программы и впустую тратить машинное время.
Чтобы узнать, как каждый из этих двух подходов влияет на производительность, ученым поручили провести эксперимент. Для него отобрали 12 человек, которых произвольно разделили на две группы. У каждой было по две задачи.
-
Лабиринт – надо было написать программу для выхода из представленного в виде таблицы 20х20 лабиринта.
-
Алгебра – надо было написать программу, которая сможет интерпретировать введенное через телетайп алгебраическое выражение и решить его. Также требовалось обработать ошибки ввода, если они есть.
|
|
Прямой доступ к компьютеру |
Непрямой доступ к компьютеру |
|
Группа 1 |
Алгебра (6 человек) |
Лабиринт (6 человек) |
|
Группа 2 |
Лабиринт (6 человек) |
Алгебра (6 человек) |
Обе задачи группы должны были решить с прямым и непрямым доступом к компьютеру. Чтобы сэмулировать работу через оператора, организаторы эксперимента наняли двух студентов и задали ряд правил. По ним участникам эксперимента можно было:
-
отдавать код только с 8:00 до 17:00
-
проинструктировать оператора, что и как вводить
-
попросить распечатать отладочную информацию
-
одновременно отдавать в работу не больше 2 программ в час
-
получить результат через 2 часа, при условии его передачи до 15:00, в ином случае он мог быть готов лишь на следующий день
Для написания кода в эксперименте использовался 60-ти тонный транзисторный компьютер IBM AN/FSQ-32, который изначально создавался для ядерных бункеров. Он поддерживал концепцию разделения времени между пользователями и имел несколько телетайпов для работы. В качестве языка программирования подопытные могли выбрать между JTS (процедурно-ориентированный язык «JOVIAL Time-Sharing») и SCAMP.
На чем держится миф
В ходе эксперимента ученые замерили время, потраченное участниками на написание рабочей программы, и машинное время, потребовавшееся на тестовые запуски. Также они сопоставили размер получившихся программ и скорость их исполнения.
В результате ученые сделали несколько выводов:
-
При прямом доступе к набору и исполнению кода результат можно получить гораздо быстрее. В основном, из-за отсутствия задержки между вводом кода и получением результатов.
-
Если позволить программистам самостоятельно запускать программы, то они начинают расходовать в среднем на 30% больше машинного времени.
Ученые также заметили значительный разрыв в производительности программистов. Несмотря высокую квалификацию всех участников эксперимента, разница между лучшими и худшими результатами была очень велика: от 5-тикратной до 28-кратной. При этом, ученые не обнаружили прямой корреляции ни с опытом работы, ни с оценками в стандартных тестах для программистов.
|
Оценка производительности |
Худший результат |
Лучший результат |
Коэффициент |
|
Время отладки Алгебры |
170 |
6 |
28 : 1 |
|
Время отладки Лабиринта |
26 |
1 |
26 : 1 |
|
Затраченное время CPU Алгебры |
3075 |
370 |
8 : 1 |
|
Затраченное время CPU Лабиринта |
541 |
50 |
11 : 1 |
|
Время разработки Лабиринта |
111 |
7 |
16 : 1 |
|
Время разработки Алгебры |
50 |
2 |
25 : 1 |
|
Размер программы Алгебра |
6137 |
1050 |
6 : 1 |
|
Размер программы Лабиринт |
3287 |
651 |
5 : 1 |
|
Время работы Алгебра |
7,9 |
1,6 |
5 : 1 |
|
Время работы Лабиринт |
8 |
0,6 |
13 : 1 |
Полученные результаты передали военным, а также опубликовали в журнале IEEE Transactions on human factors in electronics с пометкой, что это первое известное исследование продуктивности программистов. Интересно, что в том же номере вышла статья, критикующая выводы ученых. Ее авторы указывали на ограниченность исследования, а также критиковали его параметры и методы.
Тем не менее, в семидесятых на сделанные в ходе упомянутого эксперимента выводы в книге «Мифический человеко-месяц или Как создаются программные системы» сослался Фредерик Брукс. Он обобщил их:
Короче, программист, зарабатывающий 20 тысяч долларов в год, может быть в десять раз продуктивнее программиста, зарабатывающего 10 тысяч долларов. Правда, возможно и обратное. Полученные данные не выявили какой‑либо корреляции между стажем работы и производительностью. (Я не уверен, что это всегда справедливо.)
После выхода книги о существовании 10x-программистов начали говорить как о факте. С тех пор некоторые компании ищут именно таких специалистов, ведь считается, что каждый из них способен один работать за целую команду. Начинающие программисты ищут способы стать “десятикратными” и часто выгорают по пути.
Хотя, если разобраться, за самим понятием не стоит ничего фундаментального.
ссылка на оригинал статьи https://habr.com/ru/articles/729600/
Добавить комментарий