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"?
productivity
L'impact
la source
la source
Réponses:
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"
la source
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.
la source
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.
la source
Je vais essayer de résoudre ce problème en fonction des différences:
Un grand ingénieur fera mieux que la moyenne:
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.
la source
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).
la source
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.
la source
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.
la source