J'ai beaucoup écrit à ce sujet sur SoftwareEngineering.SE dans le passé et j'ai moi-même été dans des situations similaires. Par conséquent, je vais essayer de donner quelques conseils et de souligner quelques problèmes que j'ai notés lors de la lecture de votre question.
Mais d'abord, parlons d'un aspect important: votre rôle dans l'entreprise.
Ton rôle
Vous pouvez avoir un mandat explicite de votre patron pour améliorer les choses, et aussi une place dans la hiérarchie où d'autres développeurs doivent écouter vos commandes . Ou vous pouvez être parmi des pairs, avoir le même rôle et la même autorité, votre option étant seulement ... eh bien ... une opinion .
Dans les deux cas, ce qui compte, c'est moins votre place dans la hiérarchie, et plus:
Ce que les autres développeurs pensent de vous. S'ils vous traitent comme un gars ennuyeux qui leur demande des choses stupides, vous n'irez pas loin. J'ai vu de nombreux cas où les chefs techniques et les chefs de projet n'avaient absolument aucune influence sur l'équipe, parce que l'équipe savait (ou pensait) que ces «chefs» n'avaient aucune formation technique requise pour prendre les décisions qu'ils prenaient. D'un autre côté, j'ai vu plusieurs développeurs qui ont été écoutés par leurs pairs, car ils savaient que ces développeurs étaient habiles et expérimentés.
Quelle est la solidité de votre équipe et ce qui la motive. Imaginez une entreprise où chaque développeur est payé pour KLOC / mois. Est-ce que vous diriez quelque chose sur le style à vos collègues? Probablement pas, car rares sont les personnes qui veulent être moins bien payées. En général, si ce n'est pas une équipe mais juste un groupe de personnes travaillant sur le même projet, vous ne pourrez rien améliorer.
En fonction de cela, vous pouvez décider si cela vaut la peine de faire des changements. Si vous n'avez pas de voix et qu'il n'y a pas de cohésion d'équipe, allez simplement chercher un autre emploi. Si vous êtes connu comme un développeur talentueux et respecté et qu'il y a un fort sentiment d'équipe, vous pourrez améliorer les choses relativement facilement, même si vous êtes confronté à l'hostilité de votre patron ou d'autres équipes.
Dans tous les cas, il est essentiel de ne pas faire pression sur votre équipe. Travaillez avec eux, pas contre eux. Ne leur donnez pas d'ordre, mais guidez-les vers l'objectif.
Maintenant, les indices.
Style
J'ai une fois demandé gentiment de suivre le style de codage et le formatage de la majorité du code existant (malheureusement, nous n'avons pas de document de style de codage formel). Mais ça n'a pas marché ...
Bien sûr que non, car ce n'est pas ainsi qu'il faut procéder.
Le style est ennuyeux .
Le style suivant est ennuyeux .
Écrire un document de style de codage est ennuyeux ( et sacrément difficile ; n'essayez même pas de le faire à moins d'avoir travaillé avec la langue pendant plus de dix ans).
Le document sur le style de lecture est ennuyeux .
Examiner le code pour les erreurs de style est ennuyeux .
Trolling que mon style est meilleur que le vôtre est passionnant , surtout quand il n'y a absolument aucun avantage objectif d'un style sur un autre. Sérieusement, chaque personne sensée sait que la bonne façon d'écrire if (x)
est la façon dont je l'ai écrit, pas if(x)
ou if ( x )
!
Donc:
Ne faites pas de revues de style. C'est le travail des vérificateurs de style. Ces applications mignonnes ont quelques avantages sur votre cerveau: elles vérifient l'ensemble du projet en quelques millisecondes, pas des heures ou des jours, et elles ne font pas d'erreurs et ne manquent pas les erreurs de style.
N'écrivez pas votre propre style. Vous vous tromperez de toute façon, et vos collègues vous diront que vous avez fait de mauvais choix.
Ne forcez pas les développeurs à corriger 2 000 erreurs de style.
Appliquez le style automatiquement lors de la validation. Le code qui comporte des erreurs de style n'a pas sa place dans le contrôle de version.
Faites-le depuis le début du projet. La configuration du contrôle de style dans un projet existant est difficile, voire impossible.
Pour en savoir plus à ce sujet , lire la première partie de cette autre réponse sur SE.SE .
Aussi:
- Ne soyez pas trop strict. Par exemple, écrire
jslint
du code compatible est assez ennuyeux, donc cela devrait être fait exclusivement lorsque cela est absolument nécessaire (ou si tous les membres de votre équipe sont satisfaits de l'utiliser). Il en va de même pour les outils de vérification statique; par exemple, l'analyse de code de .NET au niveau maximum pourrait être très oppressante et déprimante, tout en apportant peu d'avantages; le même ensemble d'outils à un niveau modéré, en revanche, s'avère très utile.
Revues de code
Maintenant que vous n'avez plus à vous soucier du style lors des révisions de code, vous pouvez vous concentrer sur des choses plus intéressantes: améliorer (ou corriger) le code source.
Différentes personnes réagissent différemment aux revues de code. Certains la considèrent comme une opportunité. D'autres détestent ça. Certains écoutent tout ce que vous leur dites, prennent des notes et ne discutent pas, même s'ils peuvent avoir raison. D'autres essaient de discuter sur tous les points. C'est à vous de trouver un moyen de traiter chaque développeur en fonction de sa personnalité. Il est généralement utile de:
Faites des révisions de code en privé, surtout lorsque le développeur est junior et écrit un très mauvais code.
Montrez qu'il n'y a rien de personnel: vous passez en revue le code, pas les compétences de la personne.
Afficher l'objectif réel d'une révision de code. Le but n'est pas de montrer à quel point un développeur est mauvais. L'objectif est de fournir des opportunités d'amélioration.
Ne discutez jamais. Vous n'êtes pas là pour convaincre, mais pour apporter votre expertise.
Ne présumez jamais que le candidat est le seul à pouvoir apprendre quelque chose d'un commentaire. Vous êtes ici aussi pour apprendre, à la fois en lisant le code et en demandant des explications sur les parties que vous ne comprenez pas.
Une fois la révision du code terminée, assurez-vous que la personne améliore réellement son code. J'ai eu quelques cas où les développeurs pensaient que la révision du code se terminait à la fin de la réunion. Ils partent et reviennent à leurs nouvelles fonctionnalités, essayant d'appliquer ce que vous avez partagé avec eux uniquement pour le nouveau code. Avoir un outil de suivi décent pour la révision du code aide.
Notez qu'indépendamment de votre rôle particulier dans l'entreprise et de votre expertise par rapport aux autres, votre code devrait également être soumis à révision. Vous ne devriez pas non plus être le seul à revoir le code des autres.
Dans un projet récent où je travaillais en tant que leader technique, j'ai eu du mal à expliquer à mes collègues que c'était leur rôle de réviser le code de chacun, y compris le mien. La peur d'un stagiaire qui s'apprête à revoir le code de son responsable technique disparaît dès qu'il trouve les premiers problèmes dans le code - et qui parmi nous écrit un code sans faille?
Formation
Les révisions de code sont une excellente occasion d'enseigner et d'apprendre certains aspects de la programmation et de la conception de logiciels, mais d'autres nécessitent une formation.
Si vous êtes en mesure de former vos collègues, faites-le. Si votre direction est hostile à l'idée de la formation, faites-le de manière informelle. J'ai fait de telles sessions de formation sous forme de réunions informelles, ou parfois même comme de simples discussions, parfois interrompues par la direction et poursuivies plus tard.
Outre la formation directe, assurez-vous de bien connaître les livres tels que McConnel's Code Complete , et parlez de ces livres à vos collègues. Proposez-leur de lire le code source des projets open source, donnez-leur des exemples spécifiques de code de haute qualité. Et, évidemment, écrivez vous-même du code de haute qualité.
Concentrez-vous sur le contexte, pas sur les personnes
Comment puis-je remédier à cette situation sans se concentrer uniquement sur la «mauvaise culture d'entreprise», les «diplômés inexpérimentés», etc.
Ces diplômés ont un objectif: acquérir de l'expérience, apprendre des choses, devenir plus habile. Si, année après année, ils écrivent du code merdique et ne connaissent rien à la programmation, c'est probablement parce que votre équipe ou votre entreprise ne leur donne pas cette opportunité.
Si vous vous concentrez sur le fait que votre équipe a des diplômés inexpérimentés, cela n'aidera pas. Concentrez-vous plutôt sur ce que vous pouvez faire pour eux et avec eux. Les révisions de code et la formation sont deux des techniques pour améliorer la situation.
La mauvaise culture d'entreprise est une bête différente. Parfois, cela peut être changé. Parfois, ce n'est pas possible. Dans tous les cas, rappelez -vous que vous êtes une partie de cette société, de sorte que vous faites partie de la culture de l' entreprise. Si vous ne pouvez pas le changer et le trouvez intrinsèquement mauvais, tôt ou tard, vous devrez partir.
Obtenez vos mesures à droite
Comment mesurez-vous exactement le code en ce moment? Mesurez-vous le nombre de validations par jour et par développeur? Ou le KLOC par mois et par programmeur? Ou peut-être la couverture du code? Ou le nombre de bugs trouvés et corrigés? Ou le nombre de bugs potentiels détectés par les tests de régression? Ou le nombre de restaurations effectuées par le serveur de déploiement continu?
Les choses que vous mesurez sont importantes, car les membres de l'équipe adaptent leur travail aux facteurs mesurés. Par exemple, dans une entreprise où je devais travailler il y a quelques années, la seule chose qui a été mesurée était le temps que l'on passe au bureau. Inutile de dire que ce n'était pas encourageant de fournir un meilleur code, ou de travailler plus intelligemment, ou ... enfin, de travailler du tout.
Déterminer le renforcement positif et négatif et ajuster les facteurs mesurés au fil du temps est essentiellement l'effet de levier que vous avez sur les membres de l'équipe. Lorsqu'il est fait correctement, il permet d'obtenir des résultats qui ne seront pas atteints par une simple hiérarchie.
Les choses qui vous dérangent les rendent mesurables. Mesurez-les et rendez les résultats publics. Ensuite, travaillez avec d'autres membres de l'équipe pour améliorer les résultats.
Par exemple, considérons que les membres de l'équipe font trop d'erreurs d'orthographe dans les noms des classes, des membres de la classe et des variables. C'est énervant. Comment pourriez-vous mesurer cela? Avec un analyseur, vous pouvez extraire tous les mots du code et, à l'aide d'un correcteur orthographique, déterminer le ratio de mots contenant des erreurs et des fautes de frappe, disons 16,7%.
Votre prochaine étape consiste à convenir avec votre équipe du ratio cible. Ce pourrait être 15% pour le prochain sprint, 10% pour le prochain, 5% en six semaines et 0% en deux mois. Ces mesures sont recalculées automatiquement à chaque validation et affichées sur un grand écran au bureau.
Si vous n'atteignez pas le ratio cible, votre équipe peut décider de passer plus de temps à corriger les fautes d'orthographe. Ou votre équipe peut juger préférable de calculer le ratio par développeur et d'afficher également ces informations sur grand écran. Ou votre équipe peut trouver que l'objectif était trop optimiste et que vous devriez le revoir.
Si vous atteignez le ratio cible, l'étape suivante consiste à vous assurer que le nombre d'erreurs et de fautes de frappe n'augmentera pas avec le temps. Pour cela, vous pouvez créer une tâche supplémentaire dans votre build qui vérifie les fautes d'orthographe et échoue la build si au moins une erreur est trouvée. Maintenant que vous vous êtes débarrassé de ce problème, votre grand écran peut être réutilisé pour afficher les nouvelles statistiques pertinentes.
Conclusion
Je crois que chaque aspect mentionné dans votre question peut être résolu grâce aux techniques que j'ai incluses dans ma réponse:
Lorsque d'autres développeurs ont rejoint le projet, j'ai remarqué qu'ils utilisent un style de codage différent (parfois un style complètement différent)
Vous deviez appliquer automatiquement le style lors de la validation.
et n'utilisent souvent pas de fonctionnalités de langage modernes comme les accesseurs de propriété (c'est relativement nouveau dans Objective-C).
Les révisions de code et la formation sont là pour transférer votre connaissance de la langue.
Parfois, ils inventaient leurs propres vélos au lieu d'utiliser des caractéristiques similaires du cadre
Les révisions de code et la formation sont là pour transférer votre connaissance du cadre.
ou transférer des concepts d'autres langages de programmation ou patters qu'ils ont appris dans notre base de code.
C’est une excellente chose. Semble être une occasion pour vous d'apprendre d'eux.
Souvent, ils ne peuvent pas nommer correctement les méthodes ou les variables à cause du mauvais anglais
Les révisions de code devraient également se concentrer sur une dénomination correcte. Certains IDE ont également des correcteurs orthographiques.
Parfois, je pense que sans l'IDE, je pense qu'ils écriraient tout le code sans indentation ni mise en forme.
Bien sûr qu'ils le feraient. Le style est ennuyeux et devrait être automatisé.
Fondamentalement, je déteste le code qu'ils écrivent.
Rappelez-vous de la partie des revues de code: «Le but n'est pas de montrer à quel point un développeur est mauvais. L'objectif est de fournir des opportunités d'amélioration. »
Il est mal formaté / organisé et est parfois radicalement différent du reste du projet.
Vérification de style automatisée .
Je me sens très contrarié quand ils ajoutent leurs spaghettis à mon œuvre d'art
Attends quoi?! Œuvre d'art?! Devine quoi? Certaines personnes (dont vous dans six mois) peuvent trouver votre code loin d'être une œuvre d'art. En attendant, comprenez que considérer votre travail comme une œuvre d'art et leur travail comme de la merde n'aidera personne. En t'incluant.
On a de plus en plus l'impression qu'ils ne peuvent pas se soucier d'apprendre ou s'en moquent: ils font juste ce qui leur est demandé et rentrent chez eux.
Bien sûr, ils feront ce qui leur est demandé. Rappelez-vous: le contexte, pas les personnes et obtenez vos mesures correctes . Si le contexte exige d'eux qu'ils deviennent meilleurs dans ce qu'ils font, ils le feront. Si le contexte nécessite de produire autant de KLOC par mois que possible et rien de plus, ils le feront aussi.