- PVSM.RU - https://www.pvsm.ru -

Две правды, одна ложь: популярные концепции о «выдающихся программистах»

Кент Бек (Kent Beck), легендарный разработчик ПО, создатель методологий экстремального программирования и test-driven development и автор многих книг по программированию, однажды сказал [1]: «Я не великий программист, я просто хороший программист с замечательными привычками». Какими привычками и способностями обладают «рок-звезды» программирования?

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

Две правды, одна ложь: популярные концепции о «выдающихся программистах» - 1 [2]
/ фото Connie [3] CC [4]

Thinking outside of the box

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

Одной из них делится резидент Quora и программист Питер Блэйн (Peter Blain). Он рассказывает [5], что в одной из сложных ситуаций работающее решение для «вставшего в тупик» проекта внезапно предложил новый разработчик, у которого был минимум времени на то, чтобы ознакомиться с задачей.

Его подход касался не столько реализации, сколько архитектуры: он позволил локализовать проблему и для ее решения объединить сразу несколько open-source продуктов. Разумеется, это предложение не было спонтанным — тем не менее, свою роль в решении проблемы сыграл не только опыт и исключительные способности, но и свежий взгляд нового в проекте человека. По словам Питера, умение выйти за рамки традиционных подходов позволяет разработчику выйти на новый уровень — и буквально превратиться из «просто хорошего программиста» в «гроссмейстера».

Кстати, теме Thinking outside of the box на Quora посвящено более 700 вопросов — и большинство из топик-стартеров хотят понять, как развить в себе эту способность. Ответы оказываются самыми разными — от советов делать регулярные перерывы и физические упражнения до предложений решать головоломки и читать книги по направлениям, смежным (или вообще не связанным) с вашей текущей деятельностью. Более системный подход к изучению этого явления применительно к программистам применили ученые из Вашингтонского университета совместно с представителями компании Microsoft.

Они провели исследование [6], пытаясь выяснить, что отличает выдающегося программиста от просто «хорошего». Оказалось, что опрошенные ими разработчики отметили характеристику, которая по описанию соответствует пресловутому «outside of the box». Они назвали ее умением «видеть и лес, и деревья» — то есть рассматривать ситуацию на четырех разных уровнях абстракции, включая технические нюансы, индустриальные тренды, видение компании и потребности клиента.

Разумеется, такой подход не даст внезапных гениальных озарений, но здравая оценка ситуации и ответы на вопросы: «Что действительно хочет получить клиент?», «Есть ли у этой технологии будущее, или она скоро уйдет с рынка?», «Соответствует ли это решение ценностям нашей компании?» могут дать лучший результат, нежели ежедневное разгадывание пазов.

Этот подход, как минимум, позволяет утверждать, что способность «видеть и лес, и деревья», можно развить — 59 интервью с представителями 13 подразделений Microsoft служат тому доказательством.

Коллективный разум

Еще одна важная черта выдающегося программиста, которую отметили исследователи из Вашингтона, — умение попросить помощи в нужный момент и помочь другим. Боб Мартин (Robert C. Martin) в своей книге [7] «Идеальный программист. Как стать профессионалом разработки ПО» делает в этом отношении еще более сильное заявление: он пишет [8], что программировать настолько сложно, что ни один человек не может сделать это хорошо в одиночку. Даже если вы очень опытный разработчик, мысли и идеи вашего коллеги наверняка принесут вам пользу.

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

Например, топик-стартер этого [9] треда на Reddit два с половиной месяца безуспешно пытался научиться программировать на Ruby. Пользователи платформы оставили 169 комментариев с конкретными советами, а некоторые из них даже лично связались с автором вопроса, чтобы помочь ему на деле. В первом посте в треде можно заметить, насколько благодарен был автор — коллеги-программисты не только помогли ему, но и мотивировали продолжить развиваться в этом направлении.

Некоторые программисты считают умение правильно задавать вопросы и давать грамотные ответы особым искусством. Еще один разработчик на Ruby Стивен Хирлстон (Steven Hirlston) отмечает [10], что одни из главных вещей, которые он вынес за время работы, заключаются в следующем: хороший программист знает как задавать вопросы, не раздражая окружающих, а выдающийся программист знает как отвечать на них без заносчивости.

Общение в целом — важный элемент командной работы. Возвращаясь к исследованию Вашингтонского университета и Microsoft: ученые выделили целых 17 характеристик «отличного программиста», связанных с общением и поведением в коллективе.

В том числе умение «находить положительные стороны в компромиссных решениях», вежливость, способность не принимать замечания по поводу кода или работы близко к сердцу и внимание к окружающему контексту в процессе общения.

Выходит, когда речь идет о больших командных проектах, образ замкнутого и нелюдимого разработчика в надвинутом на глаза капюшоне оказывается далек от истины. И эта идея не нова — американский ученый Джеральд Вайнберг писал об этом в своей книге [11] «Психология компьютерного программирования» еще в 1971 году.

А впоследствии Джефф Этвуд, один из создателей StackOverflow, так выразил [12] ее в своем блоге:

«Не будьте «тем парнем». Не будьте парнем, который пишет код в темном офисе и появляется на людях только когда ему надо купить колы. «Того парня» никто ни знает, никто не видит, и ему нет места в коллективе, где все открыты и готовы друг другу помочь».

10х programming

Одна из наиболее старых (и живучих) концепций [13] о «звездах» разработки ПО заключается в том, что супер-разработчики продуктивнее обычных не на какие-нибудь 10-15%, а в разы — точнее, в 10 раз. Попробуем разобраться, как появилась эта идея и что стоит и за этим утверждением.

Стив Макконнелл (Steve McConnell), генеральный директор и ведущий разработчик компании Construx Software и автор многих известных книг [14], в своей статье [15] об истоках 10x рассказывает о следующем. В конце шестидесятых исследователи Сэкмен, Эриксон и Грант (Sackman, Erikson, Grant) провели первую попытку анализа производительности профессиональных программистов (в исследовании приняли участие разработчики, средний стаж работы которых составлял порядка 7 лет).

Результаты показали, что разница во времени написания кода между лучшими и худшими результатами составила 20 к 1, разница времени отладки — 25 к 1, разница в длине кода между «худшими» и «лучшими» составляла 5 к 1, а скорость выполнения программ — 10 к 1. При этом они не обнаружили связи между опытностью программиста и качеством его кода.

Выглядит внушительно. С другой стороны, как справедливо отмечает [16] разработчик из Autodesk Ашрафул Алам (Ashraful Alam), софт, создававшийся в те годы, был гораздо проще тех продуктов, которые создают сейчас.

Поэтому бессмысленно сравнивать разработчиков «из разных веков». С другой стороны, у программистов того времени не было богатого выбора библиотек, инструментов и фреймворков, которые есть сейчас. Это значит, что те разработчики больше внимания и сил уделяли непосредственно написанию кода. Против этой теории выступает также тот факт, что эксперимент, поставленный в 60-е, судя по всему, так никто и не повторил [17].

В октябре этого года компания Belitsoft PHP development опросила [18] «рок-звезд» программирования (то есть, потенциальных 10х-программистов) — в компании хотели узнать, что позволяет им работать в 10 раз лучше остальных. Оказалось, что далеко не все из опрошенных суперразработчиков считают свои способности настолько выдающимися.

Например, Виктор Фолькман (Victor Volkman [19]), ведущий разработчик компании ProQuest, считает, что десятикратная разница между продуктивностью двух программистов — большое преувеличение: в конце концов, объем программы далеко не всегда коррелирует с ее качеством. Поэтому успех проекта гораздо чаще зависит не от скорости написания кода, а от умения находить простые и элегантные решения проблем — а это отследить и замерить гораздо сложнее.

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

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


P.S. О чем еще мы пишем в Первом блоге о корпоративном IaaS:

Автор: it_man

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/271401

Ссылки в тексте:

[1] сказал: https://www.goodreads.com/author/quotes/25211.Kent_Beck

[2] Image: https://habrahabr.ru/company/it-grad/blog/344592/

[3] Connie: https://www.flickr.com/photos/ironypoisoning/15472928944/

[4] CC: https://creativecommons.org/licenses/by-sa/2.0/

[5] рассказывает: https://www.quora.com/What-is-the-truth-of-10x-programmers-do-they-really-exist-have-you-met-any-and-do-they-tend-to-have-their-own-startups-or-work-for-others/answer/Peter-Blain?srid=3RVN9

[6] исследование: https://faculty.washington.edu/ajko/papers/Li2015GreatEngineers.pdf

[7] книге: https://www.ozon.ru/context/detail/id/7360633/

[8] пишет: http://docs.ludost.net/Programming%20and%20Software%20Development/Programming/The_Clean_Coder__A_Code_of_Conduct_for_Professional_Programmers.pdf

[9] этого: https://www.reddit.com/r/learnprogramming/comments/5buasc/am_i_not_cut_out_to_be_a_programmer_months/

[10] отмечает: https://www.quora.com/What-is-the-difference-between-a-programmer-a-good-programmer-and-a-great-programmer-What-is-the-path-of-becoming-a-great-programmer/answer/Steven-Hirlston?srid=3RVN9

[11] книге: https://www.amazon.com/exec/obidos/ASIN/0932633420/codihorr-20

[12] выразил: https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/

[13] концепций: http://www.tempobook.com/2011/10/25/thrust-drag-and-the-10x-effect/

[14] книг: https://www.amazon.com/Steve-McConnell/e/B000APETRK

[15] статье: http://www.construx.com/10x_Software_Development/Productivity_Variations_Among_Software_Developers_and_Teams__The_Origin_of_10x/

[16] отмечает: https://www.quora.com/What-is-the-truth-of-10x-programmers-do-they-really-exist-have-you-met-any-and-do-they-tend-to-have-their-own-startups-or-work-for-others/answer/Ashraful-Alam-4?srid=3RVN9

[17] так никто и не повторил: http://morendil.github.io/folklore.html

[18] опросила: https://belitsoft.com/php-development-services/10x-programmers

[19] Victor Volkman: https://www.linkedin.com/in/volkman

[20] IaaS: Первые шаги после аренды облачной инфраструктуры: http://iaas-blog.it-grad.ru/funkcionalnost/iaas-pervye-shagi-posle-arendy-oblachnoj-infrastruktury/

[21] Развертывание инфраструктуры в облаке IaaS: лучшие практики миграции: http://iaas-blog.it-grad.ru/tendencii/luchshie-praktiki-migracii-i-razvertyvaniya-infrastruktury-v-oblake-iaas/

[22] Миграция между облаками c использованием инструментов VMware: http://iaas-blog.it-grad.ru/resheniya/migraciya-mezhdu-oblakami-c-ispolzovaniem-instrumentov-vmware/

[23] Источник: https://habrahabr.ru/post/344592/?utm_campaign=344592