Великий оператор токарного станка командует в несколько раз больше, чем средний оператор токарного станка, но великий писатель программного кода стоит в 10000 раз дороже среднего писателя программного обеспечения. - Билл Гейтс
Скажем, в одной команде есть «отличный» инженер-программист и «средний» инженер-программист. Как можно объяснить, что один инженер работает в 10 000 раз эффективнее? Я не могу полностью понять это, учитывая, что они оба берут на себя свою долю функций, ошибок и исследований, и неизменно обеспечивают качество. Может ли мое описание оправдать их, чтобы они были выше «среднего»? "отличный"?
productivity
Влияние
источник
источник
Ответы:
Суть цитаты не в том, что один в 10 тысяч раз продуктивнее, а в том, что один в 10 тысяч раз дороже другого. У программного обеспечения есть уникальное условие, при котором дефектный дизайн или реализация могут бездействовать годами (неправильно обработанная деталь будет просто «не работать» и не попадать в поле), в течение всего жизненного цикла продукта до день он поднимает голову в неразрешимой ситуации.
Все должны быть знакомы с экспоненциальной стоимостью исправления дефекта при его переходе от проектирования, внедрения, тестирования, производства и обслуживания.
Когда вы учитываете возможную ответственность, а также корпоративную репутацию, легко заключить, что разработчик, который знал достаточно, чтобы избежать проблемы, стоит в 10 000 раз больше того, кто по невежеству или наивности внедрил плохое решение.
Редактировать (весна 2014): «Сердцебиение»
источник
Средний олимпийский пловец может плавать около 2,5 миль в час на расстоянии.
Средний человек (который умеет плавать) может плавать около 1,5 миль в час на расстоянии.
Это означает, что средний олимпийский пловец может плавать на английском канале примерно за 8 часов.
Тогда можно было бы предположить, что олимпийский пловец на 60% быстрее среднего и что среднестатистическому пловцу потребуется около 13 часов, чтобы пройти гонку ...
За исключением того, что если бы я, обычный пловец, попытался переплыть Ла-Манш, единственный способ, которым я собираюсь перебраться, - это промыть на берегу неделю спустя.
Многие аспекты программирования похожи на плавание на английском канале. Это раковина или плавать. Я даже не знаю, действительно ли 10000X лучше - даже точный способ описать различие между готовым программным обеспечением, которое работает, и неполным программным обеспечением, которое не работает.
источник
Это много «дается» для «среднего» инженера-программиста. На самом деле великий инженер-программист решает проблемы за часы, которые средний инженер никогда не решит правильно. Великий инженер-программист решает обычные проблемы за одну треть времени с помощью одной пятой кода и одной десятой ошибок. Код великого разработчика программного обеспечения выполняется за O (n), а код среднего программиста выполняется за O (n ^ 3) времени. Великий инженер-программист может адаптировать свое решение, пока вы ждете, в то время как обычный инженер-программист жалуется на поздние изменения в спецификации и говорит, что для удовлетворения новых требований сейчас потребуются недели. Это все реальные различия, которые я видел, когда великий инженер переделывает работу среднего инженера.
источник
Я попытаюсь решить это с точки зрения различий:
Великий инженер будет делать лучше, чем в среднем:
Взятые вместе, это сэкономит компании много денег во время разработки и сделает компанию большими деньгами в дополнительных возможностях.
источник
Хороший программист очень часто не просто «берет на себя свою долю возможностей, ошибок и исследований», чтобы заработать заработную плату. Иногда они уходят и создают свою собственную компанию, или присоединяются к стартапу, или запускают новый проект Skunkworks, или, может быть, в старые времена присоединились к всемирно известной лаборатории исследований и разработок Blue-Sky, и вводят новшества в какой-то продукт, который никто не считает нужным или мысли можно было сделать с помощью программного обеспечения, до того, как этот великий программист проницательность, мастерство и пот.
У многих программистов "ценность" - это пропорциональное вознаграждение за риск. Программиста, возможно, даже уволили за то, что он думал о таких сумасшедших программных продуктах, а не платили в 2 раза больше.
Что происходит со случайным запуском программного обеспечения: стать публичным за миллионы / миллиарды или получить Google или Facebook, et.al. для подобных количеств редко случается с операторами токарного станка (хотя по крайней мере один успешный основатель технологической компании Силиконовой долины имел токарный станок в своей мастерской).
источник
Есть некоторые решения, которые смогут решить только лучшие программисты. Бросать тысячи посредственных не получится. Также труднее координировать их усилия, даже если они могут объединить вместе свои знания.
Отвечая на вопросы по SO ничем не отличается. Есть много проблем, когда из группы средних разработчиков можно найти ответ. Эти сайты, вероятно, лучше координируют свои усилия, чем большинство команд разработчиков, что печально.
источник
Я думаю, что есть некоторые эмпирические доказательства, подтверждающие цитату Гейтса. Я помню, как читал (хотя я не помню источник), что при наборе пулов разница в выходных данных (легко измеримых для пула ввода) между данными в 5-м процентиле и 95-процентным была примерно 3: 1. после того, как стало доступно программное обеспечение для обработки текстов, соотношение возросло до 10 или 20 к 1, потому что те, кто мог использовать расширенные функции программного обеспечения, получили еще большее относительное преимущество.
Предположительно, для разработки программного обеспечения это соотношение было бы еще выше, так как стало бы еще больше свободы в использовании всех видов инструментов, методов и т. Д. Различия сложнее измерить, но в большинстве попыток получается не менее 10 к 1, и это, вероятно, недооценивает разницу, потому что это только измерение того, что легко измерить.
При наборе текста или работе на токарном станке люди в верхних 1%, вероятно, довольно близки к достижению физиологических границ того, что возможно. В случае программирования их явно нет (соотношение времени, которое требуется для написания кода, и времени, которое требуется для ввода кода, огромно), поэтому должно быть место для гораздо большего разнообразия.
источник