Hohe Programmiererproduktivität - 10.000-fache Differenz? [geschlossen]

19

Ein großer Drehmaschinenbediener verdient das Mehrfache eines durchschnittlichen Drehmaschinenbedieners, aber ein großer Schreiber von Software-Code ist das 10.000-fache des Preises eines durchschnittlichen Software-Schreibers wert. - Bill Gates

Angenommen, es gibt einen "großartigen" Software-Ingenieur und einen "durchschnittlichen" Software-Ingenieur im selben Team. Wie kann ein Ingenieur 10.000-mal produktiver sein? Ich kann mir das nicht so recht vorstellen, da sie beide ihren Anteil an Funktionen, Fehlern und Nachforschungen übernehmen und durchweg mit Qualität liefern. Würde meine Beschreibung möglicherweise rechtfertigen, dass sie über dem Durchschnitt liegen? "toll"?

Der Aufprall
quelle
2
Ich bin mir nicht sicher, ob diese Frage für Stackoverflow geeignet ist, aber ich bin auch an den Antworten interessiert.
Austin Henley
18
Das Zitat sagt ein großes ist wert 10k mal der Preis eines durchschnittlich man nichts über „Produktivität“ gibt.
Oded
4
Tatsächlich ist ein guter Programmierer möglicherweise weitaus weniger produktiv als ein durchschnittlicher. Anstatt seine "Arbeit" zu erledigen, hat er etwas Besseres gemacht, das vom Radar nicht zu sehen war, und vielleicht sogar eine ganze neue Produktlinie geschaffen, die die Arbeit des produktiven Programmierers überflüssig machte.
hotpaw2
2
Die eine Sache, bei der ich mir sicher bin, ist, dass Sie beide brauchen, wenn Sie sowohl innovativ als auch erfolgreich sein wollen! @ # $ Done.
Erik Reppen
6
Abe Lincoln sagte einmal: "Wenn ich acht Stunden Zeit hätte, um einen Baum zu fällen, würde ich sechs Stunden damit verbringen, meine Axt zu schärfen." Der gute Programmierer scheint weniger produktiv zu sein, bereitet sich aber auf alle Probleme vor, die vor ihm liegen.
BeardedO

Antworten:

57

Der Sinn des Zitats ist nicht, dass einer 10K-mal produktiver ist, sondern dass einer 10K-mal so viel wert ist wie der andere. Software hat den einzigartigen Zustand, in dem ein fehlerhaftes Design oder eine fehlerhafte Implementierung jahrelang inaktiv bleiben kann (ein Teil, das falsch bearbeitet wurde, funktioniert normalerweise nur "nicht" und schafft es nicht ins Feld), und zwar bis zu einem bestimmten Zeitpunkt im Lebenszyklus des Produkts Tag räkelt es sich in einer unüberwindlichen Situation.

Jeder sollte mit den exponentiellen Kosten für die Behebung eines Fehlers vertraut sein, wenn er vom Entwurf über die Implementierung, das Testen, die Produktion bis zur Wartung reicht.

Wenn Sie die mögliche Haftung sowie die Reputation des Unternehmens berücksichtigen, können Sie leicht den Schluss ziehen, dass der Entwickler, der genug wusste, um das Problem zu vermeiden, das 10.000-fache derjenigen wert ist, die eine schlechte Lösung ignorant oder naiv implementiert haben.

Edit (Frühjahr 2014): "Heartbleed"

Dave Nay
quelle
1
Subtil, dass es die mangelnde Haftung wäre, die einen Programmierer 10.000 Mal mehr wert macht als einen anderen. Ich habe ursprünglich nicht daran gedacht, danke. Es scheint eine unglaublich schwierige Sache zu sein, sie zu messen.
TheImpact
2
@TheImpact: Es ist schwierig zu "messen", da dies normalerweise erst deutlich wird, wenn die Codierung abgeschlossen ist und das Projekt in der Welt ist. Leistung und Zuverlässigkeit und allgemein nach den Gedanken eines "durchschnittlichen" Programmierers; Während sie genau in die Struktur des Designs eingebaut sind, das von einem großartigen Programmierer stammt.
NotMe
10
+1. Wenn der Wert eines guten Softwareentwicklers 100 ist, wie oft ist das mehr als -10?
Nicole
3
Es gibt auch das Problem von Angebot und Nachfrage. Raymond Chen: "Ich vertraue nur ungefähr fünf Leuten auf der Welt, die so fortschrittlichen Code schreiben, und ich bin keiner von ihnen. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Dies gilt insbesondere für die sicherheitsbezogene Codierung, da die Probleme möglicherweise jahrelang unbemerkt bleiben (oder zumindest von den weißen Hüten unbemerkt bleiben). Schneier bemerkt, dass die meisten Programmierer einen Verschlüsselungsalgorithmus schreiben können, den der Programmierer selbst nicht brechen kann. Ich stelle fest, dass dies nicht bedeutet, dass jemand Besseres dies nicht tun kann ... es sei denn, der Autor ist der Beste.
Brian
1
Betrachten Sie den ersten Start der Ariane V-Rakete. Es gab eine nicht erfasste Division durch Null, die zur Zerstörung der Rakete führte. Nicht nur das, sondern der fragliche Code hatte in dem Moment, in dem die Rakete gezündet wurde, aufgehört, irgendeinen Wert zu haben. Denken Sie an die Millionen, die sie mit einem besseren Programmierer gespart hätten.
Loren Pechtel
44

Der durchschnittliche olympische Schwimmer kann in einiger Entfernung ungefähr 4 km / h schwimmen.

Die durchschnittliche Person (die schwimmen kann) kann in einiger Entfernung ungefähr 1,5 Meilen pro Stunde schwimmen.

Dies bedeutet, dass ein durchschnittlicher olympischer Schwimmer in ca. 8 Stunden den Ärmelkanal schwimmen kann.

Es liegt also nahe, dass der olympische Schwimmer 60% schneller als der Durchschnitt ist und dass der durchschnittliche Schwimmer ungefähr 13 Stunden braucht, um das Rennen zu beenden ...

Nur wenn ich als Durchschnittsschwimmer versuche , den Ärmelkanal zu durchschwimmen, werde ich nur eine Woche später an der Küste angeschwemmt.

Viele Aspekte der Programmierung ähneln dem Schwimmen im Ärmelkanal. Es ist sinken oder schwimmen. Ich weiß nicht einmal, ob 10.000X besser ist, um die Unterscheidung zwischen fertiger Software, die funktioniert, und unvollständiger Software, die nicht funktioniert, wirklich noch genauer zu beschreiben.

Morgan Herlocker
quelle
31

Angenommen, es gibt einen "großartigen" Software-Ingenieur und einen "durchschnittlichen" Software-Ingenieur im selben Team. Wie kann ein Ingenieur 10.000-mal produktiver sein? Ich kann mir das nicht so recht vorstellen, da sie beide ihren Anteil an Funktionen, Fehlern und Nachforschungen übernehmen und durchweg mit Qualität liefern. Würde meine Beschreibung möglicherweise rechtfertigen, dass sie über dem Durchschnitt liegen? "toll"?

Das ist eine Menge "Givens" für einen "durchschnittlichen" Softwareentwickler. In Wirklichkeit löst der großartige Softwareentwickler Probleme in Stunden, die der durchschnittliche Entwickler niemals richtig lösen wird. Der großartige Softwareentwickler löst gewöhnliche Probleme in einem Drittel der Zeit mit einem Fünftel so viel Code und einem Zehntel so vielen Fehlern. Der Code des großen Software-Ingenieurs wird in O (n) ausgeführt, während der Code des durchschnittlichen Software-Ingenieurs in O (n ^ 3) ausgeführt wird. Der großartige Softwareentwickler kann seine Lösung anpassen, während Sie warten, während der durchschnittliche Softwareentwickler sich über späte Änderungen an der Spezifikation beschwert und angibt, dass es Wochen dauern wird, bis neue Anforderungen erfüllt sind. Das sind alles echte Unterschiede, die ich gesehen habe, als ein großartiger Ingenieur die Arbeit eines durchschnittlichen Ingenieurs wiederholt.

Kevin Cline
quelle
6
+1: Leider kommt es häufig vor, dass Probleme nicht richtig gelöst werden. Es ist verrückt, wie oft es Workarounds und Kupplungen gibt, die nur das unmittelbare Problem "beheben", aber mit ziemlicher Sicherheit in ein paar Wochen noch mehr Probleme verursachen. "Aber das ist in ein paar Wochen, lasst uns unsere zukünftigen Selbst mit diesen Problemen befassen!"
Joachim Sauer
Der Unterschied zwischen einer funktionierenden und einer nicht funktionierenden Lösung für ein nahezu unmögliches Problem ist unendlich, z. B., dass die Organisation überlebt oder bankrott geht oder dass im Labor etwas explodiert, das alle Ingenieure umbringt (klassische TV - Drama - Handlung ...) usw .
hotpaw2
@ hotpaw2: Stimmt, mir fiel nichts so Dramatisches ein. Ich dachte an Probleme mit ein bisschen mathematischer Komplexität, z. B. Graphberechnungen wie topologische Sortierung. Ein durchschnittlicher Ingenieur kann Wochen damit verbringen, eine langsame und fehlerbehaftete Lösung zu schreiben. Ein guter Ingenieur ordnet die Geschäftsanforderungen einem bekannten Problem zu und sucht dann nach einer veröffentlichten Bibliothek oder einem Algorithmus.
Kevin Cline
9

Ich werde versuchen, dies in Bezug auf die Unterschiede anzugehen:

Ein großartiger Ingenieur kann Folgendes besser als ein Durchschnittsingenieur:

  • Design - Erstellen Sie Designs, die weniger Änderungen erfordern und flexibler sind. Dies führt zu Einsparungen über die gesamte Lebensdauer der Software.
  • Features - Diese werden schnell implementiert und sind sauberer.
  • Bugs - werden schneller gefunden, werden gut behoben und bringen nicht weniger zukünftige Bugs mit sich.
  • Untersuchungen - werden schneller mit besseren Auflösungen und Ergebnissen abgeschlossen.

Zusammengenommen würden diese speichern die Unternehmen viel Geld in die Entwicklungszeit und machen das Unternehmen viel Geld in zusätzliche Möglichkeiten.

Oded
quelle
4

Ein großartiger Programmierer "nimmt nicht oft nur seinen Anteil an Funktionen, Fehlern und Nachforschungen an", um einen Lohn zu verdienen. Manchmal verlassen sie ihre Firma und gründen ein eigenes Unternehmen oder treten einem Startup bei oder gründen ein neues Skunkworks-Projekt oder treten in den alten Tagen einem landesweit bekannten Forschungs- und Entwicklungslabor bei und entwickeln ein Produkt, von dem niemand glaubt, dass es überhaupt benötigt wird , oder man dachte, es könnte mit Software zu tun haben, bevor dieser großartige Programmierer Einsicht, Geschick und Schweiß hatte.

Ein Großteil dieses Programmierers, der "wert" ist, handelt von einer angemessenen Belohnung für das Risiko. Der Programmierer könnte sogar gefeuert worden sein, weil er über solche verrückten Softwareprodukte nachgedacht hat, anstatt doppelt oder mehr bezahlt zu werden.

Was passiert mit einem gelegentlichen Softwarestart? Gehen Sie an die Börse für eine Million / Milliarde oder lassen Sie sich von Google, Facebook und anderen akquirieren. Ähnliches passiert nur selten Drehmaschinenführern (obwohl mindestens ein erfolgreicher Tech-Firmengründer aus dem Silicon Valley eine Drehmaschine in seiner Werkstatt hatte).

hotpaw2
quelle
4
".... für Millionen / Milliarden an die Börse gehen, ....." Trotz der Medienrhetorik passiert dies auch bei Softwareentwicklern selten. Für jeden, der es "schafft", geraten Tausende in Vergessenheit und / oder durchlaufen eine zu viele VC-Runden und
kehren
1
@mattnz: Mit wahrscheinlich etwas besser als den 10.000 zu 1 Gewinnchancen, die mit dem 10.000-fachen des Programmierers verbunden sind.
hotpaw2
3

Es gibt einige Lösungen, die nur die besten Programmierer lösen können. Tausende von mittelmäßigen zu werfen, wird nicht funktionieren. Es ist auch schwieriger, ihre Bemühungen zu koordinieren, selbst wenn sie die Teile ihres Wissens gemeinsam kombinieren könnten.

Das Beantworten von Fragen zu SO ist nicht anders. Es gibt viele Probleme, bei denen eine Gruppe von durchschnittlichen Entwicklern die Antwort finden kann. Diese Websites leisten wahrscheinlich eine viel bessere Koordinierungsarbeit als die meisten Entwicklungsteams, was traurig ist.

JeffO
quelle
3

Ich denke, es gibt einige empirische Beweise, die das Zitat von Gates stützen. Ich erinnere mich, dass ich gelesen habe (obwohl ich mich nicht an die Quelle erinnere), dass bei Eingabe-Pools der Unterschied in der Ausgabe (für einen Eingabe-Pool leicht messbar) zwischen denen im 5. Perzentil und denen im 95% -Perzentil etwa 3 zu 1 betrug. Aber Nachdem die Textverarbeitungssoftware verfügbar wurde, stieg das Verhältnis auf etwa 10 oder 20 zu 1, da diejenigen, die die erweiterten Funktionen der Software nutzen konnten, einen noch größeren relativen Vorteil erzielten.

Vermutlich für die Softwareentwicklung wäre das Verhältnis sogar noch höher, da es noch mehr Freiheit gibt, alle Arten von Werkzeugen, Techniken usw. zu nutzen. Es ist schwieriger, die Unterschiede zu messen, aber die meisten Versuche kommen mit mindestens 10 zu 1 und Das ist vermutlich eine Unterschätzung des Unterschieds, weil nur gemessen wird, was leicht zu messen ist.

Beim Tippen oder Bedienen einer Drehmaschine stoßen die Menschen in den oberen 1% wahrscheinlich fast an die physiologischen Grenzen des Möglichen. Bei der Programmierung ist dies eindeutig nicht der Fall (das Verhältnis zwischen dem Zeitaufwand für das Schreiben von Code und dem Zeitaufwand für das Eingeben von Code ist enorm), sodass viel mehr Variationsspielraum bestehen sollte.

bA
quelle
1
Wow. Sprechen Sie über das Verpassen des Punktes. Jedes Maß für die Produktivität eines Programmierers, das mit "Tippgeschwindigkeit" als Ankerpunkt beginnt, wird mit Sicherheit eine bloße Antwort erhalten.
Riwalk