Ce n'est pas une blague, je ne pourrais pas supporter que cela se produise une quatrième fois, cela m'affecte mentalement.
Cette ligne est importante, car elle montre que vous pensez qu'il est temps de changer. Elle montre que vous reconnaissez qu'il s'agit d'un schéma et que vous aimeriez que ce schéma s'arrête. Ce désir est probablement la partie la plus importante de la solution. Régler ce genre de situation implique souvent de changer votre façon de penser. Il est impossible pour quelqu'un de faire cela à votre place, donc votre désir de changer sera la seule chose qui fera que le changement se produira.
Pour un certain contexte, j'ai déjà été dans des situations similaires de “trop bon codage pour mon travail”, mais jamais au degré que vous décrivez. Je pourrais guérir le cancer grâce à la métaprogrammation de modèles en C++, mais beaucoup de ceux avec qui je travaille sont à peine versés dans les bases de la conception orientée objet. J'ai écrit un code qui abusait de SFINAE et qui allait à l'encontre de la formulation exacte des spécifications du C++, alors que de nombreux projets sur lesquels je travaillais utilisaient encore des versions obsolètes et boguées de gcc. Mon approche consistait simplement à leur montrer à quel point ces outils sont étonnants, et tous les problèmes qu'ils pouvaient résoudre. J'aimais expliquer aux gens des petits trucs de programmation, et ils ont beaucoup apprécié.
Est-ce que cela vous semble familier ?
“Oui, mais il faut avoir un bon niveau pour comprendre [le code de Mik] car les composants sont intelligemment découplés”
Considérez cette déclaration d'un point de vue basé sur le risque. Votre patron doit continuer à faire avancer les choses, quoi qu'il arrive. Si vous partez à la recherche d'une opportunité de travail géniale, votre patron doit quand même s'assurer que le code est maintenu. Ce que votre collègue vient de dire, c'est que, s'il doit vous remplacer, il doit trouver un codeur très compétent, car toute personne qui n'est pas aussi bonne ne sera pas en mesure de le maintenir. C'est un risque. Et s'ils ne peuvent pas trouver un développeur suffisamment bon, ou s'ils n'ont pas les moyens de les payer suffisamment ?
Vous avez peut-être produit ce que vous appelleriez un “bon code”, mais la définition d'un “bon code” dépend très beaucoup du contexte. Ce qu'est un “bon code” chez Google, avec ses modes de pensée avant-gardistes, peut être un très mauvais code pour quelqu'un travaillant à la FAA, qui se préoccupe principalement de la fiabilité plutôt que de rester à la pointe du progrès. La définition de “bon code” donnée par votre patron inclut la capacité à le maintenir dans toutes sortes de situations, y compris sans vous. Si vos collègues ne sont pas à l'aise pour maintenir votre code, alors vous êtes soudainement une responsabilité envers l'entreprise, car vous fabriquez un produit qu'ils ne peuvent pas maintenir si vous décidez d'aller ailleurs.
De ce point de vue, on peut dire que vous les forcez à accepter votre définition d'un “bon code”. Instinctivement, cela peut sembler être une bonne chose, mais c'est lourd de difficultés, comme cette façon de penser basée sur le risque à laquelle vous n'avez peut-être pas pensé.
Nous avons une phrase, “mettre la charrue avant les bœufs”. L'une des nombreuses significations qui lui sont associées est de mettre le contenu qui vous tient le plus à cœur (pouvoir utiliser vos techniques avancées) au-dessus des forces qui devraient le faire avancer (la compréhension de ces techniques par votre collègue). Vous avez écrit le code dans ce style avancé, puis vous avez encouragé les autres développeurs à “rattraper” ce style. Cela peut être efficace, mais si quelque chose vous arrive avant qu'ils ne “rattrapent”, l'entreprise est soudainement en danger parce que personne ne peut maintenir le code.
Comment puis-je éviter cela à l'avenir ?
Corriger cela peut être une chose terriblement difficile à faire parce que cela implique d'aborder le problème d'une manière différente de celle qui vous convient habituellement. Au lieu de commencer par écrire du code dans ce style avancé, puis d'apprendre à vos collègues comment penser de cette façon, vous devriez le retourner. Apprenez à vos collègues à aimer ce style de codage, puis commencez à écrire le code dans ce style. Cela peut sembler à l'envers, mais c'est beaucoup plus stable. Du point de vue du patron, il y a peu ou pas de risque que l'équipe apprenne à mieux coder. Une fois qu'ils ont mieux codé, le style dans lequel vous voulez développer est soudainement moins risqué.
En attendant, vous devrez écrire du code qui, selon vos normes, est “moins bon”, mais c'est correct. Votre code n'est pas votre seul produit ici. Votre autre produit aide à enseigner aux autres développeurs, et sa valeur peut facilement dépasser celle de l'écriture d'un “code parfait”
Bien sûr, il peut être difficile de dire quand il est sûr d'écrire du code dans le style que vous voulez. Si c'était facile à dire, vous l'auriez certainement déjà compris ! Une technique puissante que vous pouvez utiliser est de laisser les autres pousser pour les styles de codage avancés, plutôt que de pousser vous-même. C'est une chose d'apprendre à quelqu'un la différence entre héritage et composition. C'est une toute autre chose de lui enseigner suffisamment bien pour qu'il préconise de modifier votre base de code existante afin d'être plus clair dans son utilisation. Ce dernier cas vous permet de savoir que non seulement ils comprennent le concept, mais l'embrasser vraiment.
Un idéal pour enseigner de tels concepts est de ne rien enseigner. Laissez les étudiants découvrir quelque chose, et ensuite vous leur indiquez la direction que peut prendre la découverte. Peut-être que l'un d'entre eux découvre quelque chose d'intéressant sur l'héritage et que vous pouvez l'orienter vers le modèle de conception Visitor en fonction de ce qu'il a découvert. Ne vous contentez pas de leur donner Visitor, mais donnez-leur une direction pour qu'ils puissent aller chercher Visitor eux-mêmes.
C'est une approche beaucoup plus difficile, et vous voudrez certainement trouver un juste milieu entre cela et votre approche actuelle, mais elle peut être très enrichissante. Plus important encore pour votre réponse, elle peut apporter de la valeur à l'entreprise sans risque. Si vous apportez de la valeur à une entreprise, sans la mettre en danger, vous ne serez pratiquement jamais licencié. Et dans les rares cas où vous pouvez encore être licencié, la direction vous en donnera la raison (comme un ralentissement de l'économie ou un changement d'orientation de l'entreprise). Si vous le faites très bien, vous constaterez que la direction commencera à façonner votre parcours, tout comme vous façonnez vos collègues, et vous constaterez une curieuse tendance à avoir appris juste la bonne compétence juste au moment où ils en ont le plus besoin.