Python >> Tutoriel Python >  >> Python

Le principe 80/20 en programmation

Dans cet article, vous découvrirez l'impact profond du principe 80/20 sur votre vie de programmeur. Il est basé sur une première ébauche d'un chapitre de mon prochain livre "De 1 à 0 :une approche minimaliste de la programmation".

Le principe 80/20 a de nombreux noms, mais le deuxième plus célèbre est le principe de Pareto, du nom de son découvreur Vilfredo Pareto. Alors, comment fonctionne le principe et pourquoi devriez-vous vous en soucier ?

Principes de base du principe de Pareto

Le principe dit que la majorité des effets proviennent de la minorité des causes. Par exemple, la majorité des revenus est gagnée par une minorité de personnes, la majorité des innovations provient d'une minorité de chercheurs, la majorité des livres est écrite par une minorité d'auteurs, la majorité des ventes provient d'une minorité de clients. , et la majorité des buts sont tirés par une minorité de footballeurs.

Très probablement, vous avez déjà entendu parler du principe 80/20 - il est partout dans la littérature sur la productivité personnelle. La raison de sa popularité est double. Premièrement, le principe vous permet d'être paresseux et productif en même temps, si vous pouvez comprendre les choses qui comptent et vous concentrer sur celles-ci sans relâche. Deuxièmement, le principe est observable partout dans le monde réel. Il est même très difficile de trouver un phénomène où les effets proviennent également des causes. Allez-y et essayez de trouver des exemples de distributions 50/50 où 50 % des effets proviennent de 50 % des causes ! Bien sûr, la répartition n'est pas toujours 80/20. Les nombres concrets peuvent changer en 70/30, 90/10 ou même 95/5. Cependant, la distribution est toujours fortement biaisée vers la minorité des causes qui produisent la majorité des effets.

Voici un exemple de distribution de Pareto :

Figure :Exemple d'une distribution de Pareto :les causes sont ordonnées en fonction des résultats qu'elles produisent.

Vous pouvez voir le tracé mathématique d'une distribution de Pareto qui trace les résultats généralisés par rapport aux causes, en supposant que les causes sont classées en fonction des résultats qu'elles produisent.

Optimisation du logiciel d'application

La figure suivante montre l'application de la distribution Pareto à un projet logiciel :la minorité du code est responsable de la majorité du temps d'exécution. L'axe des x montre les fonctions de code triées par le temps d'exécution qu'elles nécessitent. L'axe des ordonnées montre le temps d'exécution de ces fonctions de code. Les unités n'ont pas vraiment d'importance ici, mais vous devez réaliser que la zone ombragée domine la zone globale sous la parcelle. La plupart des fonctions de code contribuent beaucoup moins à l'exécution globale que quelques fonctions de code sélectionnées. Passer beaucoup de temps à optimiser les "plusieurs triviaux" ne produit pratiquement aucune amélioration de la durée d'exécution globale.

Figure :Exemple d'une distribution de Pareto en génie logiciel :la plupart des fonctions contribuent peu à l'exécution globale, mais certaines fonctions contribuent fortement.

Bien que le principe soit facilement compréhensible, la plupart des gens ne comprennent pas intuitivement la pertinence du principe dans leur propre vie. Comment pouvez-vous appliquer le principe d'en faire plus en moins de temps ?

Peu de gens savent que le principe a été utilisé avec succès par de grandes sociétés informatiques telles qu'IBM, Microsoft et Apple pour construire des ordinateurs beaucoup plus rapides et créer une expérience utilisateur inédite. Comment ont-ils fait ça `? Ils se sont concentrés sur le « Top 20 % » en optimisant à plusieurs reprises les 20 % du code qui étaient exécutés le plus souvent par l'utilisateur moyen. Tous les codes ne sont pas créés égaux. Une minorité de code a un impact dominant sur l'expérience utilisateur alors qu'une grande partie du code a peu d'impact sur celle-ci. Par exemple, vous double-cliquez sur une icône plusieurs fois par jour - les programmes doivent se charger très rapidement pour une expérience utilisateur optimale - mais vous ne modifiez les droits d'accès d'un fichier que rarement, voire pas du tout. Le principe 80/20 vous indique où concentrer vos efforts d'optimisation !

Productivité

En fait, le principe 80/20 est un principe de concentration. En vous concentrant sur les quelques éléments vitaux plutôt que sur les plus insignifiants, vous pouvez multiplier par 10, voire 100 votre productivité au travail. Vous ne me croyez pas ? Calculons d'où viennent ces chiffres, en supposant une distribution sous-jacente de 80/20.

Figure :La production moyenne des 20 % d'employés les plus performants est 16 fois supérieure à la production moyenne des 80 % d'employés les moins performants.

Le monde réel nous dit qu'une minorité de personnes produit la majorité des résultats. Ce principe fondamental est observable dans une grande variété d'applications différentes. Ajoutons quelques chiffres pour avoir une idée de l'ampleur de la différence de performances. Par exemple, utilisons les paramètres conservateurs 80/20 :80 % des résultats proviennent de 20 % des personnes. Dans certains domaines (comme la programmation), la distribution est probablement beaucoup plus biaisée.

La figure précédente montre que dans une entreprise de 10 personnes, seules deux personnes produisent 80 % des résultats alors que huit produisent 20 % des résultats, conséquence directe du principe du 80/20. Si vous divisez 80 % par deux, vous obtenez un rendement moyen de 40 % par personne la plus performante de l'entreprise. Dans le même temps, si vous divisez les 20 % de résultats générés par les huit personnes, vous obtenez en moyenne 2,5 % par personne la moins performante. La différence de performances est de 16 x !

Et notez qu'il ne s'agit pas d'une différence théorique qui pourrait être obtenue dans certains contextes peu pratiques :cette différence de 16 fois dans les performances moyennes est déjà un fait dans des millions d'organisations à travers le monde.

La différence de performance existe :il y a deux personnes dans votre organisation qui créent un rendement plus de 10 fois plus élevé qu'un employé « normal ». La question est:comment pouvez-vous devenir l'un de ces deux? Ou, pour le formuler plus généralement :comment pouvez-vous "déplacer vers la gauche" sur la courbe de distribution de Pareto dans votre organisation (voir figure) ?

Figure :Pour créer plus de sortie, vous devez constamment vous déplacer vers la gauche de la courbe.

Sur l'axe des y dans notre monde 80/20, j'ai utilisé l'étiquette "Sortie" pour la garder générale. Vous voudrez peut-être optimiser vos revenus (20 % des personnes gagnent 80 % des revenus). Vous voudrez peut-être optimiser le bonheur (20 % des gens profitent de 80 % du bonheur au travail). Vous voudrez peut-être optimiser les utilisateurs actifs mensuels (20 % des sites Web comptent 80 % des utilisateurs actifs mensuels). Vous voudrez peut-être optimiser les ventes de livres (20 % des livres reçoivent 80 % des ventes). Ou vous pouvez optimiser les citations (20 % des chercheurs reçoivent 80 % des citations).

Cela montre une conclusion essentielle qui découle du principe 80/20 :soyez clair sur ce que vous souhaitez optimiser.

Métriques de réussite

Disons que nous voulons optimiser le revenu comme indicateur du bonheur. Comment pouvez-vous vous déplacer vers la gauche dans la courbe de Pareto ?

Maintenant, vous quittez la science exacte parce que vous avez besoin de trouver les raisons pour lesquelles certaines personnes réussissent :laquelle de leurs expertises génère le plus de succès ? Vous devez trouver un argument plausible et simplificateur dans votre secteur spécifique et développer des mesures de réussite exploitables que vous pouvez contrôler. Si vous en faites plus, vous aurez plus de succès. Si vous en faites moins, vous aurez moins de succès. La difficulté est que les mesures de réussite sont différentes dans la plupart des domaines. En fait, le principe 80/20 s'applique également aux mesures de réussite :certaines mesures de réussite ont un impact prédominant sur vos performances dans un domaine, tandis que d'autres importent à peine.

Par exemple, lorsque je travaillais comme doctorante, je me suis vite rendu compte que tout était une question de citations. Plus vous avez de citations en tant que chercheur, plus vous aurez de crédibilité, de visibilité et d'opportunités en science. Comment pouvons-nous influencer les citations ("aujourd'hui, j'augmenterai le nombre de citations" n'est guère une mesure de succès exploitable) ? Les citations proviennent d'articles de grande classe. Si vous publiez plus d'articles de haut niveau, vous recevrez plus de citations. Ainsi, la rédaction d'articles de haut niveau est l'activité la plus importante pour la plupart des scientifiques. Cependant, de nombreux chercheurs sont distraits par des activités secondaires telles que la préparation de présentations, l'organisation, l'enseignement, la consommation de café, les chercheurs les plus performants se concentrent fortement sur la génération d'un nombre maximal d'articles de haute qualité. Pour les chercheurs, la distribution de Pareto de la mesure de réussite des chercheurs peut ressembler à ceci :

Figure :Indicateur de réussite dans la recherche :nombre de mots écrits pour un article de grande qualité.

En remplaçant le « résultat » généralisé par la nouvelle métrique de succès « nombre de mots écrits vers un article de grande qualité », vous avez obtenu un aperçu clair de ce que vous devez faire chaque jour pour pousser vers la gauche dans la recherche. Si vous écrivez plus de mots aujourd'hui, vous publierez votre prochain article de grande qualité plus tôt, recevrez plus de citations plus rapidement, développerez votre empreinte scientifique et deviendrez ainsi un scientifique plus performant. La beauté de cette approche 80/20 est qu'elle vous permet de vous concentrer. Tout le reste n'a pas d'importance. Vous pouvez vous détendre, vous allonger et vous concentrer sur les choses qui sont très importantes. Vous pouvez passer moins de temps sur toutes les différentes tâches. Vous n'avez pas à mourir de la mort de mille coupures. Vous pouvez être paresseux avec toutes les activités sauf une :écrire des papiers. Vous pouvez mélanger la plupart des choses, ignorer les e-mails, ne pas aller à des réunions qui ne vous poussent pas à plus de papiers, être paresseux dans toutes les autres activités. Disons que vous travaillez 8h par jour et que vous répartissez votre journée en huit activités d'une heure. Après avoir terminé l'exercice de métrique de réussite, vous vous rendez compte que vous pouvez sauter deux activités d'1h par jour et en réduire quatre de moitié pour les terminer en une demi-heure au lieu d'une heure (en étant moins perfectionniste). Vous avez économisé 4h par jour mais vous accomplissez quand même, disons, 80% de vos résultats. Maintenant, vous investissez 2h dans l'écriture de plus de mots vers des articles de grande classe par jour. En quelques mois, vous aurez soumis un article supplémentaire et au fil du temps, vous soumettrez beaucoup plus d'articles que n'importe quel autre de vos collègues. Vous ne travaillez que 6h par jour et vous générez une qualité imparfaite dans la plupart de vos tâches de travail. Mais vous brillez là où ça compte :vous soumettez plus d'articles de recherche que n'importe qui d'autre dans votre environnement. En conséquence, vous ferez bientôt partie des 20 % des meilleurs chercheurs. Vous générez plus avec moins.

C'est le pouvoir de la pensée 80/20 :vous investissez des ressources là où elles ont le plus d'effet de levier. Vous créez plus de résultats en investissant moins de temps, d'efforts et d'argent. Vous devenez paresseux dans la plupart des choses de la vie. Mais vous concentrez une partie du temps, de l'énergie et de l'argent économisés sur ceux qui sont extrêmement importants. Au lieu de devenir un « Jack of all trades, master of none », vous devenez un poney à un tour. Vous vous concentrez fortement sur les quelques éléments vitaux et ignorez les nombreux insignifiants. Vous menez une vie moins stressante, mais vous profitez davantage de votre travail, de vos efforts, de votre temps et de votre argent.

Implications de Pareto pour les codeurs

Prenons un autre exemple :si vous lisez ce livre, vous êtes un programmeur. En programmation, les résultats sont beaucoup plus biaisés vers le haut que dans la plupart des autres domaines. Au lieu de 80/20, la distribution ressemble souvent plus à 90/10. Bill Gates a déclaré qu'un "grand opérateur de tour commande plusieurs fois le salaire d'un opérateur de tour moyen, mais un grand écrivain de code logiciel vaut 10 000 fois le prix d'un écrivain de logiciel moyen". Bill Gates a supervisé des centaines de milliers de programmeurs et de développeurs de logiciels et s'il fait cette déclaration, elle doit avoir un certain mérite. Fait intéressant, la différence n'est pas 16x comme vous l'avez vu précédemment. La différence entre un grand et un écrivain de logiciel moyen est de 10 000x ! Comment se peut-il? Eh bien, voici un certain nombre de raisons pour lesquelles cette distribution de Pareto extrême est particulièrement valable dans le monde du logiciel :

  • Un excellent programmeur peut résoudre certains problèmes que le programmeur moyen ne peut tout simplement pas résoudre. Dans certains cas, cela le rend infiniment plus productif.
  • Un excellent programmeur peut écrire du code 10 000 fois plus rapidement que le code d'un programmeur moyen. Cela peut faire ou défaire la viabilité de toute une gamme de produits d'une entreprise d'un milliard de dollars.
  • Un bon programmeur écrira du code contenant moins de bogues. Pensez à l'effet d'un seul bogue de sécurité sur la réputation et la marque de Microsoft !
  • Un bon programmeur écrira un code plus facile à étendre, ce qui peut améliorer la productivité de milliers de développeurs qui travaillent sur son code à un stade ultérieur du processus de développement logiciel.
  • Un bon programmeur sortira des sentiers battus et trouvera des solutions créatives pour contourner les efforts de développement coûteux et aider à se concentrer sur les choses les plus importantes.

Chacun des arguments énoncés précédemment montre pourquoi un grand développeur de logiciels peut être 10 000 fois plus productif. En pratique, une combinaison de ces facteurs est en jeu, de sorte que la différence peut être encore plus grande.

La question clé est :comment devient-on un grand programmeur ? Parce que si vous pouvez devenir un excellent programmeur, vous aurez toujours beaucoup plus de travail que vous ne pouvez en gérer, et les entreprises les plus prospères au monde - Google, Facebook, Amazon, Apple et Microsoft - seront ravies de vous payer de grosses primes. pour vos services.

Une mesure de réussite pour les programmeurs

Malheureusement, l'énoncé « devenir un excellent programmeur » n'est pas une mesure de réussite que vous pouvez optimiser directement, c'est un problème multidimensionnel. Un grand programmeur peut signifier beaucoup de choses. Il ou elle comprend rapidement le code, connaît les algorithmes et les structures de données, connaît différentes technologies et leurs forces et faiblesses, peut collaborer avec d'autres personnes, est communicatif et créatif, reste éduqué et connaît les moyens d'organiser le processus de développement logiciel, et possède des centaines de soft-skills et hard-skills. Mais vous ne pouvez pas maîtriser tout cela ! Si vous ne vous concentrez pas sur les quelques éléments vitaux, vous deviendrez esclave du plus petit nombre. Pour devenir un grand programmeur, vous devez vous concentrer sur les quelques éléments vitaux. L'une de ces quelques activités vitales qui vous permettront de devenir un meilleur codeur au fil du temps est la métrique de réussite "écrire plus de lignes de code". Si vous écrivez plus de lignes de code que vos pairs, vous deviendrez un meilleur codeur que la plupart de vos pairs. Il s'agit d'une simplification du problème multidimensionnel, mais nous avons simplifié vers les quelques éléments vitaux :en optimisant la métrique proxy "écrire plus de lignes de code", nous avons augmenté nos chances de réussir à la métrique cible "devenir un grand écrivain de code logiciel" ( voir figure).

Figure :Indicateur de réussite en programmation :nombre de lignes de code écrites.

En écrivant plus de code, vous créez une boucle de rétroaction auto-renforcée. En écrivant plus de code, vous commencez à mieux comprendre le code. Vous parlez et vous comportez plus comme un codeur expert. Vous attirez de meilleurs codeurs et des tâches de programmation plus difficiles, vous écrivez donc plus de code et devenez encore meilleur. Vous êtes de plus en plus payé par ligne de code que vous écrivez, il est donc économiquement logique d'écrire plus de code au lieu de faire le ménage ou d'effectuer des tâches fastidieuses sans programmation au travail. Vous ou votre entreprise sous-traitez tout le reste. Plus vous codez, plus vous réussirez. Vous avez ici l'activité 80/20 que vous pouvez suivre au quotidien :suivez le nombre de lignes que vous codez chaque jour et optimisez-le. Faites-en un jeu qui corresponde au moins à votre moyenne quotidienne. Si vous codez plus, vous rejoindrez finalement les 10 % des meilleurs codeurs avec des niveaux de revenus bien supérieurs à six chiffres.

Relation entre le focus et la distribution de Pareto

Un sujet étroitement lié dont je veux discuter est la concentration. Le principe 80/20 explique pourquoi la concentration est si puissante. Plongeons dans l'argument !

Considérez la distribution de Pareto dans la figure suivante qui montre le pourcentage d'amélioration du déplacement vers le haut de la distribution. Alice est la cinquième personne la plus productive de l'organisation. Si elle dépasse juste une personne dans l'organisation, devenant ainsi la quatrième personne la plus productive, elle augmenterait sa production (par exemple, son salaire) de 10 %. Si elle avance d'un pas, sa production augmente de 20 % supplémentaires. Pensez-y :même si elle pouvait continuer à augmenter ses revenus de 10 % à plusieurs reprises, ce serait formidable car elle connaîtrait une croissance super linéaire. Mais dans une distribution de Pareto, la croissance par rang explose. C'est pourquoi même de petites augmentations de productivité peuvent entraîner de fortes augmentations de revenus. Si vous pouvez atteindre les 10 % les plus performants de n'importe quelle distribution Pareto, vous serez une personne extrêmement prospère avec des résultats massifs dans votre vie. Peu importe que vous soyez golfeur, joueur de poker, programmeur ou ingénieur en apprentissage automatique. L'augmentation de votre productivité entraîne des améliorations super linéaires de vos revenus, de votre bonheur et de votre joie au travail. Certains appellent ce phénomène :le gagnant remporte tout.

Figure :avantage disproportionné de l'amélioration de votre classement dans une distribution de Pareto.

C'est pourquoi il n'est pas payant de ne pas se concentrer :si vous ne vous concentrez pas, vous participez à de nombreuses distributions de Pareto. Considérons le graphique suivant de deux personnes :Alice et Bob. Les deux ont trois unités d'efforts d'apprentissage chaque jour. Alice se concentre sur une chose :la programmation. Elle n'est ni une bonne joueuse d'échecs, ni une bonne golfeuse, ni douée en politique. Elle dépense juste trois unités d'efforts pour apprendre à coder. Bob se concentre sur plusieurs disciplines. Il passe une unité de temps à perfectionner ses compétences aux échecs, une unité à former ses compétences en programmation et une unité à former ses compétences en politique. En conséquence, il a atteint des compétences et une production moyennes dans chacun des trois domaines. Cependant, en raison de la nature de la distribution de Pareto qui récompense de manière disproportionnée les gagnants de toute distribution de Pareto, Alice collecte plus de production totale (par exemple, revenu ou bonheur) que Bob grâce à sa stratégie de focalisation.

Figure :Non-linéarité de la sortie de classement – Une tentative d'explication stratégique du pouvoir de concentration.

Notez que cela est vrai non seulement dans des domaines larges et indépendants tels que la programmation, les échecs et la politique. Cela s'applique également dans des domaines restreints tels que la programmation. Par exemple, Bob peut passer son temps à lire trois livres généraux (appelons-les :Introduction à Python, Introduction à C++ et Introduction à Java) tandis qu'Alice lit trois livres approfondissant Python (appelons-les :Introduction à Python, Introduction à Machine Learning avec Python et Machine Learning pour les experts). Par conséquent, Alice se concentrera sur le fait de devenir une experte en apprentissage automatique et pourra exiger un salaire plus élevé pour ses compétences spécialisées.

Contributions Github

Un autre exemple d'une distribution Pareto devenue extrême peut être vu dans les contributions aux référentiels Github. Il existe des preuves scientifiques que les contributions aux projets open source sont distribuées par Pareto.[1] Considérons un référentiel sauvage pour les calculs d'apprentissage automatique en Python :TensorFlow. Voici les sept principaux contributeurs au dépôt Github :

Figure :Distribution des "commits" du référentiel TensorFlow Github.[2]

Voici le tableau montrant les mêmes données numériquement :

Contributeur Engagements
tensorflower-garden 21426
yongtang 1251
monsieur 1120
gunan 1091
Rivière707 868
benoitsteiner 838
sanjoy 795

L'utilisateur tensorflow-garder a contribué à plus de 20 % des 93 000 commits de ce référentiel. Étant donné qu'il y a des milliers de contributeurs, la distribution est beaucoup plus extrême que la distribution 80/20. La raison de cette asymétrie extrême est que le contributeur tensorflow-garder se compose d'une équipe de codeurs chez Google qui créent et maintiennent ce référentiel. L'observation intéressante, cependant, est que les principaux contributeurs sont des programmeurs extrêmement performants avec des antécédents impressionnants travaillant pour certaines des entreprises les plus prospères au monde. Vous pouvez les consulter publiquement sur la page Github. Qu'ils aient réussi avant ou après avoir généré une grande quantité de validations dans le référentiel open source n'est qu'une simple discussion théorique. Pour toutes les questions pratiques, vous devriez commencer votre habitude de réussite en écrivant plus de lignes de code chaque jour maintenant. Rien ne vous empêche de devenir le numéro 2 du référentiel TensorFlow - en engageant du code précieux dans le référentiel TensorFlow 2 à 3 fois par jour pendant les 2 à 3 prochaines années. Si vous persistez, vous pouvez rejoindre les rangs des codeurs les plus performants au monde - en choisissant une habitude puissante et en vous y tenant pendant trois ans !

Le moteur sous-jacent de l'excellence est de tirer parti du principe 80/20 sur plusieurs fronts :Premièrement, vous vous concentrez sur la minorité d'activités qui sont les plus à même de vous pousser vers le succès dans votre profession. Deuxièmement, vous pratiquez plus de ces activités que 80 % des professionnels de votre secteur, de sorte que vous faites partie des 20 % des meilleurs professionnels concernant ces activités sélectionnées. En enchaînant ces deux distributions de Pareto (sélectionnez les 20 % d'activités les plus performantes et rejoignez les 20 % les plus performants en termes de quantité d'activités exécutées), vous exploitez au maximum vos ressources et vous deviendrez une force invincible dans votre secteur. Êtes-vous prêt à faire un tour sur la lune ?

Valeur nette du programmeur

Effectivement, la valeur nette des programmeurs est également distribuée par Pareto. Pour des raisons de confidentialité, il est difficile d'obtenir des données sur la valeur nette d'un individu, mais une page[3] montre la valeur nette autodéclarée des programmeurs informatiques. Bien que les données puissent être bruitées, elles montrent l'asymétrie caractéristique des distributions de Pareto du monde réel :

Figure :valeur nette auto-déclarée de 60 programmeurs.

En fait, la courbe est susceptible d'être encore plus asymétrique dans le monde réel, car de nombreux programmeurs milliardaires ont lancé des services logiciels utilisés par des milliards de personnes -

Mark Zuckerberg, Bill Gates, Elon Musk, Steve Wozniak me viennent à l'esprit. Chacun de ces génies de la technologie a créé lui-même les prototypes de ses services en s'appuyant sur le code source. Le nombre de millionnaires du logiciel est important.


[1] https://www.researchgate.net/publication/228728263_Evidence_for_the_Pareto_principle_in_Open_Source_Software_Activity

[2] https://github.com/tensorflow/tensorflow/graphs/contributors

[3] https://www.networthshare.com/publicprofiles/Occupation/11