Відмінна продуктивність програміста - враховуючи різницю в 10 000 разів? [зачинено]


19

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

Скажіть, у цій же команді є "чудовий" програмний інженер і "середній" програмний інженер. Як ви можете пояснити, що один інженер в 10 000 разів продуктивніший? Я не можу цього зрозуміти, враховуючи, що вони обидва беруть на себе частку функцій, помилок та розслідувань, і постійно забезпечують якість. Чи мій опис, можливо, виправдовує їх, що вони вище "середнього"? "чудово"?


2
Я не впевнений, чи підходить це питання для stackoverflow, але я також зацікавлений у відповідях.
Остін Генлі

18
Цитата говорить великий один коштує 10k раз ціна середнього одного, нічого про «продуктивності» там.
Одід

4
Насправді, великий програміст може бути набагато менш продуктивним, ніж середній. Замість того, щоб виконувати свою "роботу", він зробив щось краще, що не було з радарів, і, можливо, навіть створив цілу нову лінійку продуктів, яка заставила роботу продуктивного програміста.
hotpaw2

2
Я впевнений у тому, що вам потрібно обоє, якщо ви хочете і інновації, і отримати! @ # $ Зроблено.
Ерік Реппен

6
Еб Лінкольн одного разу сказав: "Якби у мене було вісім годин, щоб зрубати дерево, я витратив би шість годин на заточування сокири", це ніколи більше не відповідає дійсності в програмуванні, де виконання "хорошої" роботи значно перевершує швидку роботу. Хороший програміст може виявитись менш продуктивним, але він готується до всіх проблем, які стоять перед ним.
BeardedO

Відповіді:


57

Сенс цитати полягає не в тому, що один в 10К разів більш продуктивний, це те, що один в 10К разів більший за інший. Програмне забезпечення має унікальну умову, коли дефектна конструкція або реалізація може спати роками (частина, яка неправильно піддається обробці, як правило, просто "не працює" і не встигне в поле), а також в життєвий цикл продукту до тих пір, поки в день він виводить голову в нерозбірливій ситуації.

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

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

Редагувати (весна 2014 р.): "Серцебіє"


1
Тонко, що саме брак відповідальності робить програміста вартістю в 10000 разів більше, ніж іншого. Не думав про це спочатку, дякую. Це здається неймовірно складною мірою виміряти.
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 годин, щоб завершити гонку ...

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

Багато аспектів програмування схожі на плавання Англійським каналом. Це раковина або плавання. Я навіть не знаю, чи краще 10,000X - це навіть навіть точний спосіб описати різницю між завершеним програмним забезпеченням, яке працює, і неповним програмним забезпеченням, яке не працює.


31

Скажіть, у цій же команді є "чудовий" програмний інженер і "середній" програмний інженер. Як ви можете пояснити, що один інженер в 10 000 разів продуктивніший? Я не можу цього зрозуміти, враховуючи, що вони обидва беруть на себе частку функцій, помилок та розслідувань, і постійно забезпечують якість. Чи мій опис, можливо, виправдовує їх, що вони вище "середнього"? "чудово"?

Це дуже багато "дарів" для "середнього" програмного інженера. Насправді великий інженер-програміст вирішує проблеми за години, які середній інженер ніколи не вирішить правильно. Великий інженер-програміст вирішує звичайні проблеми в третину часу, на одну п’ятірку коду та на одну десяту - більше помилок. Код великого інженера-програмного забезпечення працює в O (n), тоді як середній код інженера-програмного забезпечення працює в O (n ^ 3). Великий інженер-програміст може адаптувати своє рішення, поки ви чекаєте, тоді як середній інженер програмного забезпечення скаржиться на несвоєчасні зміни в специфікації і каже, що зараз будуть потрібні тижні, щоб відповідати новим вимогам. Це все реальні відмінності, які я бачив, коли великий інженер переробляє роботу середнього інженера.


6
+1: на жаль, досить часто трапляється, що проблеми не отримують правильних рішень. Це божевільно, як часто трапляються обхідні шляхи та зчеплення, які лише "виправляють" безпосередню проблему, але майже впевнені, що можуть створити ще більше проблем за кілька тижнів. "Але це за кілька тижнів, давайте давайте нашим майбутнім власноруч вирішувати ці проблеми!"
Йоахім Зауер

Різниця між робочим і неробочим рішенням майже неможливої ​​проблеми підходить нескінченно, наприклад, організація виживає, проти збанкрутує, або щось вибухає в лабораторії і вбиває всіх інженерів (класична сюжетна лінія драматичного телебачення ...) тощо .
hotpaw2

@ hotpaw2: Правда, я не думав про щось таке драматичне. Я думав про проблеми з трохи математичною складністю, наприклад, обчислення графів, як топологічні сортування. Середньостатистичні інженери можуть витрачати тижні, пишучи повільні та гнучкі рішення. Чудовий інженер буде складати бізнес-вимоги до відомої проблеми, а потім шукати опубліковану бібліотеку чи алгоритм.
кевін клайн

9

Я спробую вирішити це з точки зору відмінностей:

Чудовий інженер зробить наступне краще, ніж середній:

  • Дизайн - виготовляйте конструкції, які потребують менших модифікацій та більш гнучкі. Це означає економію протягом усього часу використання програмного забезпечення.
  • Особливості - вони будуть реалізовані швидше та будуть більш чистими реалізаціями.
  • Помилки - вони знайдуться швидше, добре виправляться та не вводять менше майбутніх помилок.
  • Дослідження - будуть завершені швидше з кращими резолюціями та результатами.

У сукупності це дозволить заощадити компанії багато грошей на час розробки та зробить компанію багато грошей у додаткових можливостях.


4

Прекрасний програміст дуже часто не просто «бере на себе частку функцій, помилок і розслідувань», щоб заробити заробітну плату. Іноді вони кидають і запускають власну компанію, або приєднуються до стартапу, або починають новий проект скункс-роботи, або, за старих часів, можливо, приєдналися до всесвітньо відомої лабораторії науково-дослідної роботи «блакитного неба» та впроваджують інноваційний продукт, який ніхто не вважає, що їм навіть потрібен або думали, що можна зробити з програмним забезпеченням, перш ніж прозріння, майстерність та потужність цього великого програміста.

Дуже багато цього програвача "коштує" - це приблизно пропорційна винагорода за ризик. Програміст, можливо, навіть був би звільнений за роздуми над такими шаленими програмними продуктами, замість того, щоб отримувати зарплату в 2 рази або більше.

Що трапляється з випадковим запуском програмного забезпечення: публічне відвідування мільйонів / мільярдів або придбання Google або Facebook, et.al. за подібні суми рідко трапляється операторів верстатів (хоча принаймні один засновник технічної компанії «Силіконова долина» мав токарний верстат у своїй майстерні).


4
".... стає публічним мільйони / мільярди, ....." Незважаючи на медіа-риторику, це рідко трапляється і для інженерів-программістів. Для кожного, хто "встигає", тисячі потрапляють у невідомість і / або йдуть, хоч один занадто великий об'єм ВК і повертаються до роботи на 9-5 днів, не маючи нічого
гіршого

1
@mattnz: Мабуть, трохи краще, ніж шанси 10 000 на 1, які йдуть на 10000X передбачуваної вартості програміста.
hotpaw2

3

Є деякі рішення, які зможуть вирішити лише найкращі програмісти. Кинути тисячі посередніх не вдасться. Також складніше координувати свої зусилля, навіть якщо вони могли б об'єднати частину своїх знань.

Відповіді на запитання щодо SO не відрізняються. Існує багато проблем, коли з групи середніх розробників кожен може придумати відповідь. Ці веб-сайти, ймовірно, роблять набагато кращу роботу з координації зусиль, ніж більшість команд розвитку, що сумно.


3

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

Імовірно, для розробки програмного забезпечення цей коефіцієнт буде ще більшим, оскільки є ще більше свободи скористатися всіма видами інструментів, методів тощо. Виміряти відмінності важче, але більшість спроб виходить принаймні від 10 до 1, і це, мабуть, недооцінка різниці, тому що це лише вимірювання того, що легко виміряти.

Щось на кшталт того, як набирати або керувати токарним верстатом, люди на вершині 1%, ймовірно, досить близькі до того, щоб потрапити на фізіологічні межі можливого. Що стосується програмування, то їх явно немає (співвідношення того, скільки часу потрібно писати код, порівняно з тим, скільки часу потрібно набрати код, величезне), тому має бути місце для значно більшої зміни.


1
Ого. Поговоріть про те, щоб пропустити суть. Будь-який показник продуктивності програміста, який починається з "швидкості набору тексту" як точки прив'язки, повинен отримати відповідь асиніну.
riwalk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.