Отличная производительность программиста - учитываете разницу в 10 000 раз? [закрыто]

19

Великий оператор токарного станка командует в несколько раз больше, чем средний оператор токарного станка, но великий писатель программного кода стоит в 10000 раз дороже среднего писателя программного обеспечения. - Билл Гейтс

Скажем, в одной команде есть «отличный» инженер-программист и «средний» инженер-программист. Как можно объяснить, что один инженер работает в 10 000 раз эффективнее? Я не могу полностью понять это, учитывая, что они оба берут на себя свою долю функций, ошибок и исследований, и неизменно обеспечивают качество. Может ли мое описание оправдать их, чтобы они были выше «среднего»? "отличный"?

Влияние
источник
2
Я не уверен, подходит ли этот вопрос для stackoverflow, но я также заинтересован в ответах.
Остин Хенли
18
Цитата говорит, что великий стоит в 10 тысяч раз дороже среднего, и ничего о «производительности» там нет.
Отредактировано
4
На самом деле, великий программист может быть гораздо менее продуктивным, чем средний. Вместо того, чтобы выполнять свою «работу», он сделал что-то лучшее, что было за кадром, и, возможно, даже создал целую новую линейку продуктов, которая устарела работу продуктивного программиста.
hotpaw2
2
Единственное, в чем я уверен, так это то, что вам нужно и то, и другое, если вы хотите и вводить новшества, и добиваться! @ # $ Готово.
Эрик Реппен
6
Эйб Линкольн однажды сказал: «Если бы у меня было восемь часов, чтобы срубить дерево, я бы потратил шесть часов на то, чтобы заточить свой топор», это никогда более не относится к программированию, где выполнение «хорошей» работы намного перевешивает быструю. Хороший программист может показаться менее продуктивным, но он готовится ко всем предстоящим проблемам.
БородатыйO

Ответы:

57

Суть цитаты не в том, что один в 10 тысяч раз продуктивнее, а в том, что один в 10 тысяч раз дороже другого. У программного обеспечения есть уникальное условие, при котором дефектный дизайн или реализация могут бездействовать годами (неправильно обработанная деталь будет просто «не работать» и не попадать в поле), в течение всего жизненного цикла продукта до день он поднимает голову в неразрешимой ситуации.

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

Когда вы учитываете возможную ответственность, а также корпоративную репутацию, легко заключить, что разработчик, который знал достаточно, чтобы избежать проблемы, стоит в 10 000 раз больше того, кто по невежеству или наивности внедрил плохое решение.

Редактировать (весна 2014): «Сердцебиение»

Дэйв Най
источник
1
Незаметно, что отсутствие ответственности делает программиста в 10 000 раз дороже другого. Первоначально не думал об этом, спасибо. Кажется, что это невероятно сложно измерить.
TheImpact
2
@TheImpact: «Измерить» сложно, так как обычно это становится очевидным только после того, как кодирование завершено и проект вышел в свет. Производительность и надежность и, как правило, после мыслей о «среднем» программисте; в то время как они встроены в саму структуру дизайна великого программиста.
NotMe
10
+1. Если ценность хорошего разработчика программного обеспечения составляет 100, то во сколько раз это больше, чем -10?
Николь
3
Есть также проблема спроса и предложения. Рэймонд Чен: «Я доверяю только пяти людям в мире, которые пишут этот продвинутый код, и я не один из них. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Это особенно верно в отношении кодирования, связанного с безопасностью, поскольку проблемы могут оставаться незамеченными (или, по крайней мере, незамеченными белыми шляпами) в течение многих лет. Шнайер комментирует, что большинство программистов могут написать алгоритм шифрования, который сам программист не может взломать. Я отмечаю, что это не означает, что кто-то лучше не может сделать это ... если автор не лучший.
Брайан
1
Рассмотрим первый запуск ракеты Ariane V. Произошло непогашенное деление на ноль, в результате чего ракета была уничтожена. Не только это, но и рассматриваемый код перестал иметь какое-либо значение, как только ракета была зажжена. Подумайте о миллионах, которые они могли бы сэкономить с помощью лучшего программиста.
Лорен Печтел
44

Средний олимпийский пловец может плавать около 2,5 миль в час на расстоянии.

Средний человек (который умеет плавать) может плавать около 1,5 миль в час на расстоянии.

Это означает, что средний олимпийский пловец может плавать на английском канале примерно за 8 часов.

Тогда можно было бы предположить, что олимпийский пловец на 60% быстрее среднего и что среднестатистическому пловцу потребуется около 13 часов, чтобы пройти гонку ...

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

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

Морган Херлокер
источник
31

Скажем, в одной команде есть «отличный» инженер-программист и «средний» инженер-программист. Как можно объяснить, что один инженер работает в 10 000 раз эффективнее? Я не могу полностью понять это, учитывая, что они оба берут на себя свою долю функций, ошибок и исследований, и неизменно обеспечивают качество. Может ли мое описание оправдать их, чтобы они были выше «среднего»? "отличный"?

Это много «дается» для «среднего» инженера-программиста. На самом деле великий инженер-программист решает проблемы за часы, которые средний инженер никогда не решит правильно. Великий инженер-программист решает обычные проблемы за одну треть времени с помощью одной пятой кода и одной десятой ошибок. Код великого разработчика программного обеспечения выполняется за O (n), а код среднего программиста выполняется за O (n ^ 3) времени. Великий инженер-программист может адаптировать свое решение, пока вы ждете, в то время как обычный инженер-программист жалуется на поздние изменения в спецификации и говорит, что для удовлетворения новых требований сейчас потребуются недели. Это все реальные различия, которые я видел, когда великий инженер переделывает работу среднего инженера.

Кевин Клайн
источник
6
+1: к сожалению, довольно часто проблемы не получают правильных решений. Это безумие, как часто есть обходные пути и сцепления, которые только «решают» непосредственную проблему, но почти наверняка вызовут еще больше проблем через несколько недель. «Но это через несколько недель, давайте позволим нашим будущим личностям справиться с этими проблемами!»
Иоахим Зауэр
Разница между рабочим и нерабочим решением почти невозможной проблемы приближается к бесконечности, например, организация выживает, а не банкротится, или что-то взрывается в лаборатории и убивает всех инженеров (сюжетная линия классической телевизионной драмы ...) и т. Д. .
hotpaw2
@ hotpaw2: Правда, я не думал ни о чем таком драматическом. Я думал о проблемах с небольшой математической сложностью, например, о вычислениях графа типа топологической сортировки. Обычные инженеры могут потратить недели на написание медленного и ошибочного решения. Великий инженер сопоставит бизнес-требования с известной проблемой, а затем найдет опубликованную библиотеку или алгоритм.
Кевин Клайн
9

Я попытаюсь решить это с точки зрения различий:

Великий инженер будет делать лучше, чем в среднем:

  • Дизайн - создавайте проекты, которые потребуют меньше модификаций и будут более гибкими. Это приводит к экономии в течение всего срока службы программного обеспечения.
  • Особенности - они будут реализованы постом и будут более чистыми реализациями.
  • Ошибки - будут найдены быстрее, будут исправлены и не будут содержать ошибок в будущем.
  • Расследования - будут завершаться быстрее с лучшими разрешениями и результатами.

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

Одед
источник
4

Хороший программист очень часто не просто «берет на себя свою долю возможностей, ошибок и исследований», чтобы заработать заработную плату. Иногда они уходят и создают свою собственную компанию, или присоединяются к стартапу, или запускают новый проект Skunkworks, или, может быть, в старые времена присоединились к всемирно известной лаборатории исследований и разработок Blue-Sky, и вводят новшества в какой-то продукт, который никто не считает нужным или мысли можно было сделать с помощью программного обеспечения, до того, как этот великий программист проницательность, мастерство и пот.

У многих программистов "ценность" - это пропорциональное вознаграждение за риск. Программиста, возможно, даже уволили за то, что он думал о таких сумасшедших программных продуктах, а не платили в 2 раза больше.

Что происходит со случайным запуском программного обеспечения: стать публичным за миллионы / миллиарды или получить Google или Facebook, et.al. для подобных количеств редко случается с операторами токарного станка (хотя по крайней мере один успешный основатель технологической компании Силиконовой долины имел токарный станок в своей мастерской).

hotpaw2
источник
4
«.... обнародование за миллионы / миллиарды, .....» Несмотря на риторику СМИ, это редко случается и с разработчиками программного обеспечения. На каждого, кто «делает это», тысячи впадают в безвестность и / или проходят через одно слишком много раундов ВК и возвращаются к 9–5-дневной работе без горького вкуса во рту…
mattnz
1
@mattnz: Вероятно, чуть лучше, чем шансы в 10 000 к 1, которые соответствуют предполагаемой ценности этого программиста в 10 000 раз.
hotpaw2
3

Есть некоторые решения, которые смогут решить только лучшие программисты. Бросать тысячи посредственных не получится. Также труднее координировать их усилия, даже если они могут объединить вместе свои знания.

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

JeffO
источник
3

Я думаю, что есть некоторые эмпирические доказательства, подтверждающие цитату Гейтса. Я помню, как читал (хотя я не помню источник), что при наборе пулов разница в выходных данных (легко измеримых для пула ввода) между данными в 5-м процентиле и 95-процентным была примерно 3: 1. после того, как стало доступно программное обеспечение для обработки текстов, соотношение возросло до 10 или 20 к 1, потому что те, кто мог использовать расширенные функции программного обеспечения, получили еще большее относительное преимущество.

Предположительно, для разработки программного обеспечения это соотношение было бы еще выше, так как стало бы еще больше свободы в использовании всех видов инструментов, методов и т. Д. Различия сложнее измерить, но в большинстве попыток получается не менее 10 к 1, и это, вероятно, недооценивает разницу, потому что это только измерение того, что легко измерить.

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

PSR
источник
1
Вау. Поговорим о том, что упустил смысл. Любая мера производительности программиста , который начинается с «набрав скорость» в качестве точки привязки обязан получить ослиный ответ.
riwalk