Grande productivité du programmeur - Vous comptez 10 000 fois la différence? [fermé]

19

Un grand opérateur de tour commande plusieurs fois le salaire d'un opérateur de tour moyen, mais un grand auteur de code logiciel vaut 10 000 fois le prix d'un auteur de logiciel moyen. - Bill Gates

Disons qu'il y a un «grand» ingénieur logiciel et un ingénieur logiciel «moyen» dans la même équipe. Comment expliquer qu'un ingénieur soit 10 000 fois plus productif? Je ne peux pas vraiment comprendre cela, étant donné qu'ils assument tous deux leur part de fonctionnalités, de bogues et d'enquêtes, et qu'ils fournissent constamment de la qualité. Ma description pourrait-elle justifier qu'ils soient supérieurs à la "moyenne"? "génial"?

L'impact
la source
2
Je ne sais pas si cette question convient au stackoverflow, mais je suis également intéressé par les réponses.
Austin Henley
18
La citation dit qu'un grand vaut 10k fois le prix d'un moyen, rien sur la "productivité" là-bas.
Oded du
4
En fait, un grand programmeur pourrait être beaucoup moins productif qu'un moyen. Au lieu de faire son «travail», il a fait quelque chose de mieux qui était hors du radar, et peut-être même créé une toute nouvelle gamme de produits qui a obsolète le travail du programmeur productif.
hotpaw2
2
La seule chose dont je suis certain, c'est que vous avez besoin des deux si vous voulez à la fois innover ET faire! @ # $.
Erik Reppen
6
Abe Lincoln a dit un jour: "Si j'avais huit heures pour abattre un arbre, je passerais six heures à affûter ma hache", ce n'est jamais plus vrai en programmation, où faire un "bon" travail l'emporte de loin sur un travail rapide. Le bon programmeur peut sembler moins productif, mais il se prépare à tous les problèmes à venir.
BeardedO

Réponses:

57

Le point de la citation n'est pas que l'un est 10 000 fois plus productif, c'est que l'un vaut 10 000 fois la valeur de l'autre. Le logiciel a la condition unique où une conception ou une mise en œuvre défectueuse peut rester inactive pendant des années (une pièce mal usinée ne fonctionnera généralement pas "et ne sera pas mise en place sur le terrain), bien dans le cycle de vie du produit jusqu'à ce qu'une jour, il lève la tête dans une situation insoluble.

Tout le monde devrait être familiarisé avec le coût exponentiel de la réparation d'un défaut au fur et à mesure qu'il passe de la conception à la mise en œuvre, aux tests, à la production et à la maintenance.

Lorsque vous tenez compte de la responsabilité possible ainsi que de la réputation de l'entreprise, il est facile de conclure que le développeur qui en savait assez pour éviter le problème vaut 10 000 fois celui qui a implémenté par ignorance ou naïvement une mauvaise solution.

Edit (printemps 2014): "Heartbleed"

Dave Nay
la source
1
Il est subtil que ce soit le manque de responsabilité qui fasse qu'un programmeur vaut 10 000 fois plus qu'un autre. Je n'y avais pas pensé à l'origine, merci. Cela semble être une chose incroyablement difficile à mesurer.
TheImpact
2
@TheImpact: Il est difficile de "mesurer" car il ne devient généralement apparent qu'après le codage et la sortie du projet dans le monde. Performance et fiabilité et généralement après avoir pensé à un programmeur "moyen"; alors qu'ils sont intégrés dans le tissu même de la conception qui vient d'un grand programmeur.
NotMe
10
+1. Si la valeur d'un bon développeur de logiciels est de 100, combien de fois est-ce plus que -10?
Nicole
3
Il y a aussi la question de l'offre et de la demande. Raymond Chen: "Je ne fais confiance qu'à environ cinq personnes dans le monde pour écrire du code aussi avancé, et je n'en fais pas partie. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Cela est particulièrement vrai pour le codage lié à la sécurité, car les problèmes peuvent passer inaperçus (ou du moins, ignorer les chapeaux blancs) pendant des années. Schneier commente que la plupart des programmeurs peuvent écrire un algorithme de chiffrement que le programmeur lui-même ne peut pas casser. Je note que cela n'implique pas que quelqu'un de mieux ne puisse pas le faire ... à moins que l'écrivain ne soit le meilleur.
Brian
1
Prenons le premier lancement de la fusée Ariane V. Il y avait une division par zéro non capturée qui a détruit la fusée. Non seulement cela, mais le code en question avait cessé d'avoir une valeur dès l'instant où la fusée était allumée. Pensez aux millions qu'ils auraient économisés avec un meilleur programmeur.
Loren Pechtel
44

Le nageur olympique moyen peut nager à environ 2,5 miles par heure à distance.

La personne moyenne (qui sait nager) peut nager à environ 1,5 miles par heure à distance.

Cela signifie que le nageur olympique moyen peut nager dans la Manche en environ 8 heures.

Il serait donc logique que le nageur olymique soit 60% plus rapide que la moyenne et que le nageur moyen mettrait environ 13 heures pour terminer la course ...

Sauf que si moi, un nageur moyen, tentais de nager dans la Manche, la seule façon de traverser est de m'échouer sur le rivage une semaine plus tard.

De nombreux aspects de la programmation sont comme nager dans la Manche. C'est couler ou nager. Je ne sais même pas si 10 000 X mieux est vraiment un moyen vraiment précis de décrire la distinction entre un logiciel terminé qui fonctionne et un logiciel incomplet qui ne fonctionne pas.

Morgan Herlocker
la source
31

Disons qu'il y a un «grand» ingénieur logiciel et un ingénieur logiciel «moyen» dans la même équipe. Comment expliquer qu'un ingénieur soit 10 000 fois plus productif? Je ne peux pas vraiment comprendre cela, étant donné qu'ils assument tous deux leur part de fonctionnalités, de bogues et d'enquêtes, et qu'ils fournissent constamment de la qualité. Ma description pourrait-elle justifier qu'ils soient supérieurs à la "moyenne"? "génial"?

C'est beaucoup de "données" pour un ingénieur logiciel "moyen". En réalité, le grand ingénieur logiciel résout des problèmes en quelques heures que l'ingénieur moyen ne résoudra jamais correctement. Le grand ingénieur logiciel résout les problèmes ordinaires en un tiers du temps avec un cinquième de code et un dixième de bogues. Le code d'un grand ingénieur logiciel s'exécute en O (n) tandis que le code d'un ingénieur logiciel moyen s'exécute en O (n ^ 3). Le grand ingénieur logiciel peut adapter sa solution pendant que vous attendez, tandis que l'ingénieur logiciel moyen se plaint de modifications tardives des spécifications et dit qu'il faudra maintenant des semaines pour répondre aux nouvelles exigences. Ce sont toutes de réelles différences que j'ai vues lorsqu'un grand ingénieur refait le travail de l'ingénieur moyen.

Kevin Cline
la source
6
+1: malheureusement, il est assez courant que les problèmes n'obtiennent pas de solutions correctes. Il est fou de voir à quelle fréquence il existe des solutions de contournement et des embrayages qui ne "résolvent" que le problème immédiat, mais qui sont presque certains de produire encore plus de problèmes en quelques semaines. "Mais c'est dans quelques semaines, laissons nos futurs selfs faire face à ces problèmes!"
Joachim Sauer
La différence entre une solution fonctionnelle et non fonctionnelle à un problème presque impossible approche à l'infini, par exemple, l'organisation survit, fait faillite, ou quelque chose explose dans le laboratoire et tue tous les ingénieurs (scénario de série télévisée classique ...), etc. .
hotpaw2
@ hotpaw2: C'est vrai, je ne pensais à rien de si dramatique. Je pensais à des problèmes avec un peu de complexité mathématique, par exemple des calculs de graphes comme le tri topologique. Un ingénieur moyen peut passer des semaines à écrire une solution lente et boguée. Un grand ingénieur cartographiera les besoins de l'entreprise à un problème bien connu, puis recherchera une bibliothèque ou un algorithme publié.
kevin cline
9

Je vais essayer de résoudre ce problème en fonction des différences:

Un grand ingénieur fera mieux que la moyenne:

  • Conception - produisez des conceptions qui nécessiteront moins de modifications et seront plus flexibles. Cela se traduit par des économies tout au long de la durée de vie du logiciel.
  • Caractéristiques - celles-ci seront mises en œuvre à jeun et seront des implémentations plus propres.
  • Bogues - seront trouvés plus rapidement, bien corrigés et n'introduiront pas moins de futurs bogues.
  • Enquêtes - seront conclues plus rapidement avec de meilleures résolutions et résultats.

Pris ensemble, ceux-ci permettraient à l'entreprise d' économiser beaucoup d'argent en temps de développement et de faire beaucoup d'argent à l'entreprise dans des opportunités supplémentaires.

Oded
la source
4

Un grand programmeur ne se contente pas souvent de "prendre sa part de fonctionnalités, de bugs et d'enquêtes" pour gagner un salaire. Parfois, ils quittent et créent leur propre entreprise, ou rejoignent une start-up, ou démarrent un nouveau projet de skunkworks, ou, dans les temps anciens peut-être, ont rejoint un laboratoire de recherche et développement de renommée nationale et ont innové un produit dont personne ne pense qu'ils avaient même besoin. , ou la pensée était possible de faire avec le logiciel, avant la perspicacité, la compétence et la sueur de ce grand programmeur.

Une grande partie de ce «mérite» du programmeur est une récompense proportionnelle au risque. Le programmeur a peut-être même été licencié pour avoir pensé à des produits logiciels aussi fous, plutôt que d'être payé 2 fois plus.

Que se passe-t-il avec un démarrage occasionnel de logiciels: devenir public pour des millions / milliards de dollars, ou se faire acquérir par Google ou Facebook, et al. pour des montants similaires, il arrive rarement aux opérateurs de tours (bien qu'au moins un fondateur de la société technologique de la Silicon Valley ait eu un tour dans son atelier).

hotpaw2
la source
4
".... rendu public pour des millions / milliards, ....." Malgré la rhétorique médiatique, cela se produit rarement pour les ingénieurs logiciels non plus. Pour tous ceux qui "réussissent", des milliers de personnes tombent dans l'obscurité et / ou passent par un trop grand nombre de tours VC et retournent à un travail de 9 à 5 jours avec rien de plus qu'un goût amer dans la bouche ...
mattnz
1
@mattnz: Avec probablement un peu mieux que les 10000 contre 1 qui vont avec la valeur présumée de 10000X de ce programmeur.
hotpaw2
3

Il existe des solutions que seuls les meilleurs programmeurs pourront résoudre. Jeter des milliers de médiocres ne fonctionnera pas. Il est également plus difficile de coordonner leurs efforts même s'ils pouvaient combiner collectivement les éléments de leurs connaissances.

Répondre aux questions sur SO n'est pas différent. Il existe de nombreux problèmes lorsque, sur un groupe de développeurs moyens, on est en mesure de trouver la réponse. Ces sites Web font probablement un bien meilleur travail de coordination des efforts que la plupart des équipes de développement, ce qui est triste.

JeffO
la source
3

Je pense qu'il y a des preuves empiriques qui soutiennent la citation de Gates. Je me souviens avoir lu (bien que je ne me souvienne pas de la source) que dans les pools de typage, la différence de sortie (facilement mesurable pour un pool de typage) entre ceux du 5e centile et ceux du 95% était de 3 à 1. Mais une fois que le logiciel de traitement de texte est devenu disponible, le ratio est passé à quelque chose comme 10 ou 20 à 1, car ceux qui pouvaient utiliser les fonctionnalités avancées du logiciel ont gagné un avantage encore plus relatif.

Vraisemblablement pour le développement de logiciels, le ratio serait encore plus élevé, car il y a encore plus de liberté pour tirer parti de toutes sortes d'outils, de techniques, etc. c'est probablement sous-estimer la différence, car il ne mesure que ce qui est facile à mesurer.

Dans quelque chose comme taper ou utiliser un tour, les personnes dans le top 1% sont probablement assez près d'atteindre les limites physiologiques de ce qui est possible. Dans le cas de la programmation, ce n'est clairement pas le cas (le rapport entre le temps qu'il faut pour écrire du code et le temps qu'il faut pour taper du code est énorme), donc il devrait y avoir beaucoup plus de variation.

psr
la source
1
Sensationnel. Parlez de manquer le point. Toute mesure de la productivité d'un programmeur qui commence par une "vitesse de frappe" comme point d'ancrage est susceptible d'obtenir une réponse stupide.
riwalk