L'egoless programming, ou programmation sans ego, est un concept qui a émergé dans les années 1970 et qui continue de résonner aujourd'hui dans le monde du développement logiciel. Dans cet article, nous explorerons quatre principes fondamentaux de l'egoless programming : la collaboration, la revue de code, l'humilité et l'ouverture d'esprit. Des exemples concrets dépeindront des situations courantes dans le monde du développement logiciel.
L'élitisme, mis en avant dans certaines entreprises, ne nuit-il pas à l'egoless programming ?
Définition
Popularisé par Gerald Weinberg dans son livre The Psychology of Computer Programming, l'egoless programming préconise une approche collaborative et humble de la programmation. Il s'agit de bonnes pratiques visant à améliorer la qualité du code d'un produit, axées sur l'attitude à adopter quand on développe.
Principes
Collaboration
L'un des piliers de l'egoless programming est la collaboration ouverte et la revue de code entre pairs. Les développeurs sont encouragés à partager leur code et à accepter les critiques constructives. La collaboration en équipe est l'essence même de l'egoless programming. Elle repose sur l'idée que plusieurs cerveaux travaillant ensemble sont plus efficaces qu'un seul. Voici quelques aspects clés de la collaboration en équipe :
- Pair/Mob programming : Il existe différents modes de pair/mob programming. Quel que soit le mode choisi, il consiste toujours à ce qu'un ou plusieurs développeurs travaillent ensemble activement sur un même poste de travail. Cette approche permet de repérer immédiatement les erreurs et d'échanger des idées de manière continue, améliorant ainsi la qualité du code, la compréhension mutuelle et la capitalisation.
- Utilisation des outils de collaboration : Les outils comme Git, GitHub, GitLab, Bitbucket, et les systèmes de gestion de projets comme Jira et AzureDevOps facilitent le suivi des modifications de code, la gestion des tâches et la communication. Ils permettent à chaque membre de l'équipe de voir les changements apportés, de commenter et de contribuer aux discussions sur le code.
- Réunions de synchronisation (Stand-ups) : Des réunions courtes et régulières (souvent quotidiennes) où chaque membre de l'équipe partage ce sur quoi il travaille, les progrès réalisés et les obstacles rencontrés. Cela permet à l'équipe de rester alignée et d'identifier rapidement les problèmes nécessitant une attention collective.
Revue de code
La revue de code est un processus formel où le code écrit par un développeur est examiné par un ou plusieurs de ses pairs avant d'être intégré dans la base de code principale. Voici comment elle fonctionne et ses avantages :
- Processus de revue structurée : Lors d'une revue de code, les développeurs examinent divers aspects tels que la lisibilité, la conformité aux normes de codage, l'efficacité et la présence de bugs potentiels. Cette analyse approfondie permet de s'assurer que le code est robuste et maintenable. Assurez-vous donc d'avoir des normes de codage partagées par tous les membres de votre équipe pour éviter un processus de validation trop long.
- Feedback constructif : Le but d'une revue de code n'est pas de critiquer mais de fournir un feedback constructif. Les critiques doivent être orientées vers l'amélioration du code, et non vers la remise en question des compétences du développeur. Cela aide à créer un environnement de confiance et de respect. Si une remarque vous blesse, demandez plus d'informations à votre interlocuteur et essayez de trouver un terrain d'entente sur ce qui est attendu de vous.
Exemple | Etat |
"Ton code est pourri." | Ego |
"Si tu mets ça à la place de ça, tu suivras les normes qu'on s'était fixé." | Egoless |
- Formation et mentorat : Les revues de code sont également une opportunité d'apprentissage. Les développeurs moins expérimentés peuvent apprendre des pratiques exemplaires et des astuces des développeurs plus expérimentés. Ce processus renforce les compétences de toute l'équipe et encourage le partage des connaissances. En tant que senior, il faut savoir détecter quand un atelier technique semble pertinent pour synchroniser une équipe sur un sujet.
Exemple | Etat |
"J'ai appris ce sujet." | Ego |
"L'équipe a capitalisé sur ce sujet." | Egoless |
- Détection précoce des erreurs : En impliquant plusieurs paires d'yeux, les revues de code permettent de détecter et de corriger les erreurs plus tôt dans le cycle de développement, ce qui réduit les coûts de correction des bugs à un stade ultérieur.
- Responsabilité et qualité : Les revues de code encouragent une culture de responsabilité partagée. Chaque développeur sait que "son code" sera examiné par ses pairs, ce qui incite à produire un travail de haute qualité dès le départ.
Attention, je parenthèse "son code" car, même si c'est lui qui l'a tapé, c'est le code de l'équipe.
Exemple | Etat |
"C'est son code, c'est son problème." | Ego |
"Nous n'avons pas été assez vigilants dans le code review, il faut que l'on corrige ça." | Egoless |
Humilité
L'humilité dans le contexte de la programmation implique plusieurs attitudes et comportements clés :
- Reconnaissance de ses limites : Un développeur humble accepte qu'il ne peut pas tout savoir. Il reconnaît que ses compétences peuvent toujours être améliorées et qu'il peut apprendre des autres, quelles que soient leur expérience ou leur niveau d'expertise.
Exemple | Etat |
"<insert bullshit here #NePasPerdreLaFace >." | Ego |
"Je ne sais pas." | Egoless |
- Acceptation des critiques constructives : Être humble signifie accepter les feedbacks sans se sentir attaqué personnellement. Les critiques constructives sont vues comme des opportunités d'amélioration, non comme des jugements sur les compétences ou la valeur personnelle.
- Partage des succès : Un développeur humble attribue les succès à l'effort collectif plutôt qu'à ses réalisations individuelles. Il reconnaît l'importance de la collaboration et valorise les contributions de ses collègues.
Exemple | Etat |
"C'est moi qui ai mis en place cette super fonctionnalité." | Ego |
"Nous avons mis en place cette super fonctionnalité." | Egoless |
- Prise de responsabilité pour les erreurs : Lorsqu'une erreur se produit, un développeur humble l'admet ouvertement et prend des mesures pour la corriger. Cette attitude favorise un environnement où les erreurs sont vues comme des occasions d'apprentissage plutôt que des échecs personnels.
Exemple | Etat |
"ça marche pas! (faut pas que je me fasse griller #NePasPerdreLaFace)" | Ego |
"Je me suis trompé sur ça, je le corrige ASAP." | Egoless |
Ouverture d'esprit
L'ouverture d'esprit se manifeste par une disposition à considérer et à intégrer des idées nouvelles ou différentes. Voici comment elle se traduit dans la programmation :
- Curiosité et soif d'apprendre : Les développeurs ouverts d'esprit sont toujours en quête de nouvelles connaissances et de nouvelles compétences. Ils restent à jour avec les dernières technologies et pratiques, et cherchent constamment à s'améliorer.
Exemple | Etat |
"(je n'ose pas demander #NePasPerdreLaFace)" | Ego |
"Comment tu as mis ça en place? Tu as de la doc pour que j'apprenne?" | Egoless |
- Flexibilité et adaptabilité : L'ouverture d'esprit implique être prêt à changer d'avis ou de méthode si une meilleure solution est trouvée. Cela signifie être flexible face aux nouvelles informations ou aux situations changeantes.
Exemple | Etat |
"c'est pas possible!" | Ego |
"ça va prendre un peu plus de temps, mais c'est possible." | Egoless |
- Écoute active : Un développeur ouvert d'esprit écoute attentivement les idées et les opinions des autres. Il prend le temps de comprendre les perspectives différentes avant de formuler ses propres conclusions ou de prendre des décisions.
Exemple | Etat |
"Mon idée est meilleure, pas besoin de tester autre chose." | Ego |
"Je teste l'idée de Toto pour voir ce que ça vaut." | Egoless |
- Transparence et pédagogie : Une communication ouverte et transparente est essentielle pour une équipe de développement qui adopte l'egoless programming. Les développeurs doivent se sentir libres de poser des questions, de proposer des solutions et de discuter des problèmes sans crainte de jugement. Les plus expérimentés doivent également se montrer pédagogues, patients et ouverts au partage.
Exemple | Etat |
"blabla... (j'étale ma science) blabla (oh oui, j'en sais des choses) Tu as compris?" | Ego |
"(j'explique l'étape 1)Tu as compris? (j'explique l'étape 2) Des questions? Tu sais ce que c'est l'egoless programming?" | Egoless |
- Collaboration interdisciplinaire : L'ouverture d'esprit encourage la collaboration au-delà des frontières traditionnelles. Les développeurs travaillent avec des designers, des testeurs, des gestionnaires de projet et d'autres parties prenantes pour créer des solutions holistiques.
Exemple | Etat |
"je suis dev! pas PO! je n'exprime pas le besoin." | Ego |
"On s'est synchronisé avec le PO et on a trouvé une super idée." | Egoless |
Conclusion
L'egoless programming est plus qu'une simple méthode de travail; c'est une philosophie qui peut transformer la dynamique d'une équipe de développement. En adoptant une approche collaborative et humble, les équipes peuvent non seulement améliorer la qualité de leur code, mais aussi créer un environnement de travail plus agréable et productif. En fin de compte, l'egoless programming n'est pas seulement bénéfique pour le produit final, mais aussi pour le développement professionnel et personnel de chaque membre de l'équipe.
La culture de l'élitisme vise à encourager l'excellence et à pousser chacun à donner le meilleur de lui-même. Cela a souvent conduit à des innovations remarquables (IA) et à des performances exceptionnelles (conquête spatiale). Toutefois, comme pour toute approche, il est essentiel de trouver un équilibre. Parfois, une focalisation trop intense sur l'élitisme peut avoir des effets secondaires non désirés. Dans certains cas, une culture trop axée sur l'élitisme peut involontairement créer un environnement où certains individus développent des egos surdimensionnés. Cela peut mener à des situations où la collaboration et la communication deviennent plus difficiles, car certains peuvent être moins enclins à accepter des idées différentes ou des critiques constructives. En valorisant également l'inclusivité et l'humilité, nous pouvons créer un environnement où chacun se sent valorisé et respecté. Cela encourage une collaboration plus ouverte et une innovation partagée, où toutes les voix peuvent contribuer de manière significative. Une telle approche peut non seulement réduire les tensions liées aux ego, mais aussi renforcer la cohésion et l'efficacité de l'équipe.
Il existe des formations sur l'intelligence émotionnelle, des sessions de feedback constructif et des opportunités de mentorat croisé pour pallier à ces effets de bord. Ces initiatives peuvent aider à promouvoir une culture de respect mutuel et d'apprentissage continu, tout en maintenant nos standards élevés de performance.