Comment persuader les programmeurs de suivre les règles de base

20

Il y a plusieurs règles que je dois continuer à demander aux programmeurs de suivre très souvent. Ils écrivent du code et, si cela fonctionne, le travail est fait pour eux. La plupart des règles de base peuvent être:

  • Valider les changements
  • Ne pas écrire les problèmes de modèle dans la vue ou les contrôleurs
  • Évitez le codage en dur

Pouvez-vous me parler de votre expérience? Comment gérez-vous cela?

Llistes Sugra
la source
2
Vous devriez demander sur programmers.stackexchange.com. Faites-vous des revues de code? Avez-vous un outil de révision de code comme Crucible? Je recommanderais de faire des révisions approfondies du code et d'insister pour que tous les problèmes soient résolus avant tout autre travail.
15
Vous pouvez essayer de laisser la tête de cheval sur leur lit qui a fonctionné en parrain.
Gaurav
4
J'ai eu beaucoup de succès avec la haute tension. Votre kilométrage peut varier.
Tim Post
2
@Tim: un journal enroulé est plus respectueux de l'environnement
Steven A. Lowe
@Steven, je suppose que ça le serait. D'abord, vous redéfinissez le journal, puis le recyclez. Je suppose qu'il y a un art à l'intimidation verte.
Tim Post

Réponses:

6

Tous les travailleurs du savoir doivent être mis au défi de faire un travail de qualité. La qualité en souffrira s'ils sentent que des contraintes de temps arbitraires leur sont imposées. Pourquoi ne pas simplement faire des choses «assez bonnes» quand tout le monde est soucieux de respecter les spécifications et de respecter les délais?

Votre liste de plaintes est le symptôme d'une entreprise qui ne récompense que l'atteinte d'objectifs à court terme et ne souhaite pas privilégier la qualité. Vous dirigez un hôtel cinq étoiles ou un arrêt de camion?

JeffO
la source
1
+1 pour avoir signalé qu'il s'agit d'un problème culturel qui doit être traité du point de vue de la motivation.
Alex Feinman
c'est à la fois un enjeu culturel d'entreprise comme le mentionne JeffO. mais parfois, cette culture est préparée de bas en haut lorsque les codeurs et les développeurs n'ont aucune vision du code de qualité ou de ses besoins. lorsqu'ils étaient à l'école d'informatique, leurs professeurs auraient dû les gifler sur les côtés de leur tête à quelques reprises.
robert bristow-johnson
@ robertbristow-johnson - Bon point.
JeffO
14

Pour pouvoir suivre les règles de base, ils doivent connaître les règles et être d'accord avec eux.

La façon de gérer cela est de créer conjointement un document de directives de codage avec lequel tout le monde peut être d'accord. N'essayez pas de leur imposer cela, cela se retournera si vous le faites.

Alors réunissez l'équipe et commencez à travailler sur une définition commune de vos règles de base!

Faites-le comme un atelier où toutes les voix sont entendues. Timebox it pour éviter les discussions sans fin. Vous essayez de rassembler plusieurs esprits, vous pouvez donc vouloir préparer le terrain avec une note positive que vous devez tous être respectueux et garder un esprit ouvert (l'écriture de code est personnelle ...).

Ces directives doivent être modifiées à chaque fois que l'équipe estime qu'il y a quelque chose à ajouter ou à clarifier.

Martin Wickman
la source
2
Bien que je sois d'accord, je suis également en désaccord avec "N'essayez pas de leur imposer cela, cela se retournera si vous le faites." - Quand tout est dit et fait, que quelqu'un soit d'accord ou non sur les règles de base est sans importance. Le patron établit les règles, les suit ou trouve un autre emploi. Nous ne sommes pas si spéciaux que la relation employeur-employé ne s'applique pas.
Steven Evers
12

Quel est ton rôle? Si vous êtes juste un autre développeur avec un intérêt particulièrement fort pour la qualité du code, vous n'avez probablement pas le pouvoir de les amener à vous écouter, et peut-être devriez-vous propager ces idées à la direction pour établir des normes de code qui devraient / doivent être suivi. Si vous êtes un gestionnaire / chef d'équipe / architecte et que vous avez une certaine autorité, vous pouvez établir ces pratiques vous-même. Instituer un document de normes et un processus de révision du code pour éliminer ces éléments.

Ce ne sera pas un interrupteur magique que vous pouvez activer; ce sera un processus lent et ne sera jamais à 100%. C'est mon expérience de toute façon.

RationalGeek
la source
1
Se mettre d'accord. C'est une question politique, pas technique.
Et toutes les normes de code devraient être convenues au moins partiellement par le groupe. Des outils comme StyleCop aident beaucoup.
Job
Mon patron essaie de pousser sa «qualité de code», mais ça ne décolle tout simplement pas, parce que les gens n'y croient pas. avoir le pouvoir n'est pas toujours la réponse.
IAdapter
@ 0101 Très vrai. Le pouvoir aide à faire passer le message. Le message doit être conçu de manière à être accepté et suivi.
RationalGeek
7

Il doit s'agir d'une combinaison judicieuse de toutes les réponses jusqu'à présent. En fin de compte, lorsque vous parlez d'un groupe de personnes intelligentes (développeurs), vous devez leur donner les raisons pour lesquelles le comportement est important et leur donner suffisamment de contrôle sur la façon dont ce comportement est mis en œuvre pour qu'ils soient investis à bien le faire. Les mandats ci-dessus sont généralement lâches avec les gens intelligents, car s'ils n'ont pas convenu que le problème est un problème, ils passeront probablement plus de temps à contourner le mandat qu'à suivre la règle.

Voici quelques-unes de mes tactiques:

Validation des modifications:

Tout d'abord, l'équipe doit se mettre d'accord sur le moment de s'engager et sur quoi s'engager. Une configuration de construction qui a du sens est absolument essentielle, de sorte que les gens ne se retiennent pas simplement parce qu'ils ne savent pas où mettre quelque chose. Et un consensus sur le moment / la fréquence d'enregistrement. "Ne pas casser la version" est une bonne règle évidente, mais comment est-ce vérifié et qui en est informé? Une autre référence est "ce n'est pas fait s'il n'est pas enregistré".

La plupart des développeurs que je connais sont plus qu'heureux de vérifier le code IF:

  • Le processus d'enregistrement est facile
  • Le processus de synchronisation est facile (prise en compte des modifications d'autres développeurs)
  • Voir les changements et passer d'une version à l'autre est facile

Une chose que j'ai remarquée récemment est que les enregistrements sont devenus plus fréquents et moins douloureux lorsque nous nous sommes dirigés vers un nouvel outil CM. Notre équipe est un pionnier de Rational Team Concert ayant auparavant utilisé Clearcase. Je ne veux pas annoncer d'outils, mais la nouvelle vague (pour moi) de connexions en streaming avec beaucoup de petites fusions rapides rend beaucoup plus attrayant l'enregistrement tôt et souvent.

Laisser les développeurs être en charge d'éliminer la douleur CM augmente généralement la quantité de checkin qui se produit.

Adhésion à l'architecture - pas d'écriture des problèmes de modèle dans les vues et les contrôleurs

Je mets cela dans le bloc général de "faire l'architecture correctement". Je suis d'accord avec celui qui a dit les évaluations par les pairs - la pression des pairs est excellente pour cela. L'une des façons dont je vois généralement les gens entrer dans le giron des meilleures pratiques dans ce domaine est lorsque leurs pairs leur demandent pourquoi ils l'ont fait dans l'autre sens (la manière pas si correcte). Généralement, la question du «pourquoi» amènera les gens à comprendre par eux-mêmes pourquoi ils auraient dû procéder différemment. Lorsque les gens ont une raison bien comprise de la meilleure pratique, il est beaucoup plus facile de s'y conformer.

De plus, s'il existe une formalité reliant une personne à une décision, il peut être plus facile d'attribuer des bogues dans ce domaine ... donc si une personne est responsable de la correction des bogues dans une zone de conception défectueuse, la nécessité de corriger quelque chose avant ils peuvent passer à quelque chose de nouveau et d'excitant peut être une grande motivation.

Évitez le codage en dur

Je commencerais par des normes de codage claires et en intégrant un examen des normes de codage dans les examens par les pairs. Le codage en dur est l'une de ces choses qui peut facilement être une case à cocher dans un programme d'examen par les pairs.

J'ai peur que ce genre de chose soit la seule chose où je l'ai vu devenir le rôle du chef d'équipe pour faire respecter la règle. Dans les équipes que j'ai dirigées, nous ne laissons généralement pas quelqu'un avancer tant qu'il n'a pas corrigé les commentaires d'un examen par les pairs de son code. Et "pas de codage en dur" est un commentaire fréquemment revu par les pairs.

En général

Avec presque toutes les meilleures pratiques, je pense que vous devez choisir vos batailles. Aucune équipe ne deviendra absolument parfaite. Mais vous pouvez garder un œil sur vos principaux points douloureux et commencer à les résoudre en grappes. Je pense que cela devient le rôle du leader de vraiment savoir ce qui est un point douloureux pour l'équipe contre une bizarrerie ennuyeuse d'un individu particulier.

Si votre équipe manque de faire une meilleure pratique particulière, je pense que la première question doit être "combien de dégâts cela cause-t-il?" si la réponse est "minimale", cela ne vaut probablement pas le temps. Certaines meilleures pratiques sont plus pertinentes pour des types spécifiques de systèmes - bien qu'elles soient globalement bonnes, elles ne valent peut-être pas la bataille pour des systèmes où la pratique n'est pas fréquente ou une partie importante du système.

Si la réponse à "combien de damange?" est "BEAUCOUP !!!", alors vous pouvez commencer à construire un dossier pour montrer à l'équipe que toutes ces douleurs et souffrances pourraient être éliminées en corrigeant ce point de relâchement dans les meilleures pratiques. La plupart des gens sont heureux d'éviter la douleur et la souffrance et cela change le dialogue de "fais ça parce que je te l'ai dit", à "on a décidé de faire ça parce que c'est mieux".

Bethlakshmi
la source
Long commentaire, mais votre approche est géniale. Afin d'amener les gens à adhérer à ces directives, ils doivent croire que c'est un avantage. Je serais intéressé d'entendre quelques exemples de la façon dont cela a fonctionné pour votre équipe.
jmort253
Mon exemple préféré est la configuration d'un environnement de test cohérent. Je n'ai pas eu à appliquer une bonne voie. J'avais un gars en charge du document d'installation. J'ai dit - "c'est tout ce que vous - vous pouvez faire tout ce qu'il faut pour créer un mécanisme d'installation qui assure une installation cohérente - tout le monde est autorisé à vous boguez si l'installation est foirée". En moins d'un mois, nous avions un outil solide et un document très court. Et l'outil a été installé en tant que raccourci sur chaque bureau. Je n'avais pas besoin d'application, une installation correcte était déjà la voie de la moindre résistance. Maintenant, notre objectif est de supprimer le raccourci, en le rendant automatisé.
bethlakshmi
6

Révision du code. N'acceptez que du code bien écrit et sans erreur.

Sorantis
la source
3
Ce n'est pas une solution au problème sous-jacent. Ne perdez pas de temps avec les révisions de code, lorsque vous pouvez résoudre le problème de la cause racine à la place.
Martin Wickman
Si vous pouvez les forcer à retravailler des choses encore et encore, leur paresse inhérente les amènera à se conformer au fil du temps.
David Thornley
D'accord, les gens doivent juste être responsables et faire leur travail sans qu'on le leur dise. La révision du code après chaque changement est une énorme perte de temps.
jmort253
5

Au moins :

  • Aidez-les à suivre les codes (outils comme resharper, StyleCop). Si c'est facile, ils sont plus susceptibles d'adopter.

En plus de cela, choisissez ce qui fonctionne en fonction de votre organisation, des développeurs et de votre rôle au sein de l'équipe.

  • Laissez-les faire des corrections de bugs et changer régulièrement les demandes
  • Programme de jumelage avec un développeur expérimenté
  • Revues de code de manière constructive
  • Procédures pas à pas de code
  • Commencez la formation, utilisez des livres comme Code Complete et The pragmatic programmer.
KeesDijk
la source
5

Mon rôle est Manager, mais en tant que petite équipe, je me développe et je préfère plutôt gérer en tant que coach.

Des électrodes dans le fauteuil connectées à un analyseur de code ont déjà été signalées, mais les programmeurs ne semblent pas avoir peur. Le tir ne semble pas être une bonne approche, car cela signifie perdre des actifs dignes.

Je vais jeter un œil à tous ces outils et je reste ouvert à tout autre que vous me direz.

Llistes Sugra
la source
3
Si vos actifs sont si dignes, peut-être que ces problèmes ne sont pas si importants? Vous devez choisir vos batailles à certains moments.
JeffO
Ma question concerne l'amélioration de ce que j'ai, c'est plus difficile mais efficace que la recherche et le remplacement
Llistes Sugra
Virer des gens qui ne suivront pas les règles de codage ne perd PAS de bons atouts, c'est se débarrasser du bois mort.
HLGEM
@HLGEM - À moins que la personne qui ne respecte pas les règles se trouve être un ninja de code qui peut résoudre n'importe quel problème dans l'organisation. Le Dr House ne suit pas les règles, mais si l'hôpital le renvoyait, il y aurait beaucoup de gens fictifs qui mourraient. en.wikipedia.org/wiki/Gregory_House
jmort253
4

Nous pouvons résoudre ce problème de trois manières:

  1. Analyse statique du code source pour vérifier les problèmes de convention de codage. Utilisez des outils comme cppcheck et ceux de grammatech . Wikipedia a une bonne liste: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis . En règle générale, la plupart des systèmes de contrôle de source ont des crochets par lesquels vous pouvez vérifier ces problèmes directement lors de l'enregistrement. Pour les crochets CVS, consultez ce lien: http://goo.gl/F1gd2 . Le non-respect signifie un échec d'enregistrement, et plus de 3 échecs signifient que le développeur doit s'expliquer à l'équipe.

  2. Au cours du processus de codage, signalez les problèmes au développeur. Avoir des scripts personnalisés qui sont intégrés à l'EDI de votre choix est une bonne façon de le faire. Consultez ce lien: http://goo.gl/MM6c4

  3. Suivez les processus agiles et assurez-vous que la révision du code fait partie du sprint

Fanatic23
la source
1
+1, j'ai des crochets de validation qui exécutent tout ce qui a été modifié via l'attelle (et plusieurs autres lints) ainsi que des outils pour m'assurer que je n'inclut pas les en-têtes inutilement, ainsi que pour m'assurer que l'indentation est des tabulations et non des espaces, etc.
Tim Post
Les solutions techniques ne vont pas aider si les développeurs ne sont pas obligés de les utiliser.
Robert Harvey
2

Voici mon plan en 3 étapes:

  1. Tire les programmeurs
  2. Embaucher des ingénieurs logiciels
  3. ...
  4. Profit!

:RÉ

Sérieusement, s'ils ne croient à rien d'autre qu'à écrire du code, vous avez besoin d'une équipe plus complète. Un programmeur où je travaillais utilisait différents répertoires sur l'ordinateur comme son CM. Nous nous sommes battus avec leur programmeur pendant près d'un an (car les changements introduiraient des bogues alors qu'ils copiaient et collaient l'ancien code). Nous les avons finalement licenciés.

Stephen Furlani
la source
2
  1. Faites-leur remarquer quand ils violent les règles de base.
  2. Attendez qu'ils produisent des bogues qu'ils ne peuvent tout simplement pas localiser ou qu'ils soient confrontés à une demande de fonctionnalité qu'ils ne peuvent tout simplement pas implémenter en raison de leur code inflexible.
  3. Rappelez-leur ce que vous avez dit plus tôt.
  4. Laissez-les se noyer dans leur propre merde pendant un moment.
  5. Prenez le temps de refactoriser le code en question, d'isoler les bugs / fournir des infrasturcutre pour brancher de nouvelles fonctionnalités. Prenez le temps d'expliquer ce que vous avez fait.

Alternativement, la chose la plus cruelle mais très persuasive à faire est de les laisser maintenir une base de code extrêmement mal écrite, étant donné un calendrier serré. : D
Et puis, pour un changement, laissez-les maintenir une base de code bien écrite, étant donné un calendrier serré.

Généralement, la réticence à adapter certaines normes signifie un manque d'expérience dans le travail d'équipe.

En fin de compte, les gens apprennent seulement des erreurs. Ne réglez JAMAIS des problèmes qui sont basés sur l'entêtement de quelqu'un d'autre. Si c'est vraiment vital pour le projet (c'est-à-dire que votre entreprise sera poursuivie si vous ne livrez pas dans les N jours), mettez-les d'abord hors du projet.

back2dos
la source
J'aime cela. Grande recette pour que quelqu'un vous déteste. ;)
Roman Zenka
@Roman Zenka: Peut-être, oui. Mais si le choix est entre être détesté et frustré, parce que vous avez un NNPP dans l'équipe, je préfère la première option;)
back2dos
À ce stade, ils doivent être retirés de la liste de paie.
JeffO
J'ai vraiment travaillé dessus! Et ils ne me détestent pas. La conclusion est que tout le monde est confortable dans sa propre merde. Et cela rend cette tâche si difficile.
Llistes Sugra
1

Je pense que votre programmeur ne changera pas d'attitude vis-à-vis de ces problèmes que vous avez mentionnés jusqu'à ce qu'il se rende compte que ces choses leur apporteront un avantage ou un avantage. Essayez de leur expliquer pourquoi vous voulez qu'ils fassent ces choses. Encore mieux, laissez-les découvrir les avantages.

Flo
la source
1

Embaucher un ingénieur logiciel professionnel. Et puis tirez le plus faible. Remplacez ensuite lentement ceux qui ne peuvent pas adopter. Avoir de telles personnes fait parfois plus de mal que de profit à long terme.

L'idée principale ici, que le professionnel commencera à faire la plupart des tâches, et licencier d'autres ne réduira pas les précieuses ressources humaines.

Konstantin Petrukhnov
la source
1
C'est un excellent moyen de compenser un manque de compétences en leadership et de capacité à encadrer des personnes moins expérimentées. Si vos compétences de persuasion sont nulles, commencez à licencier toutes les personnes en désaccord avec vous.
jmort253
@ jmort253, si j'ai une chance, je licencierais tous les programmeurs qui ne s'engagent pas régulièrement dans le contrôle de version. D'après les mots des auteurs, je comprends que TOUS les programmeurs sont très inexpérimentés et ne veulent pas apprendre et s'améliorer.
Konstantin Petrukhnov
1

C'est un peu dégoûtant, mais j'ai laissé Code Complete dans la salle de bain pendant quelques mois. Pas sûr que ce soit efficace, mais cela semblait être une bonne idée à l'époque.

Peter Turner
la source
0

Alors, quelles sont les conséquences pour ne pas suivre les règles et les récompenses pour suivre les règles? Si la réponse est la même - rien - bonne chance pour obtenir une traction. Je suggère une approche à plusieurs niveaux. Rassemblez-les d'abord et discutez s'ils adhèrent aux règles. L'étape suivante consiste à les inclure dans les revues de code. Vous pouvez également essayer des carottes et des bâtons. Quelque chose comme quiconque laisse un fichier extrait du jour au lendemain doit apporter des beignets à la prochaine réunion hebdomadaire. Une carotte pourrait être toute personne qui suit les règles pendant un mois entier obtient un week-end à Vegas. Pour deux.

Ou renvoyez le pire des délinquants et laissez le reste transpirer.

SnoopDougieDoug
la source
Eeep! Vous avez un type de VCS à caisse unique? Obtenez avec le siècle, l'homme!
David Thornley
0

Faites-leur subir les conséquences que vous voulez éviter en utilisant ces règles, c'est la seule façon qu'ils vont vraiment comprendre pourquoi vous demandez, par exemple: faire un petit gâchis contrôlé qu'ils doivent corriger.

dukeofgaming
la source
0

Si cette équipe a vraiment du mal à vérifier les changements, à respecter la séparation des préoccupations et non les constantes magiques à coder en dur, je licencierais toute l'équipe et les remplacerais par de vrais programmeurs 1 qui se soucient réellement de leur métier dès que possible. Que ce soit à la fois ou en masse, je ne pourrais pas le dire, mais ces jokers doivent partir.

Le type de codage que vous décrivez convient aux scripts jetables à usage unique. Ce n'est pas comme ça qu'on construit une vraie application. S'ils sont payés en tant que programmeurs professionnels, alors c'est leur travail de savoir ce genre de chose.


1 Ceci est souvent utilisé comme un terme de plaisanterie pour les personnes imaginaires qui écrivent leur code directement en binaire ou quelque chose de tout aussi ridicule. Ici, je ne plaisante pas. Je suis un programmeur assez novice et je n'aurais pas besoin qu'on me dise ces choses parce que je me soucie de mon métier. Ce ne sont pas de vrais programmeurs avec qui vous avez affaire.

aaronasterling
la source
Je suis d'accord avec tout sauf la partie de tir. Bonne chance en abandonnant toutes les autres tâches critiques sur lesquelles vous travaillez en tant que gestionnaire, y compris le respect des délais et des jalons client, pour remplacer tout votre personnel expérimenté par des personnes qui peuvent commenter le code mais qui n'ont aucune connaissance du domaine.
jmort253
0

Le travail d'un manager n'est pas d'être l'ami de l'employé, il faut parfois être le méchant. L'application des normes de codage et des commits, le refus de suivre l'architecture prédéfinie, le non-recours aux outils prescrits, etc. sont les moments où vous devez être impopulaire.

Exprimez clairement les politiques. Faites des révisions de code formelles et vérifiez si les politiques sont suivies. Ne leur permettez pas de passer à une autre tâche tant que tous les problèmes de la révision du code n'ont pas été résolus.

Si la politique concerne la non-validation du code, cela appelle un avertissement écrit s'ils ne peuvent pas le faire quand on leur demande de le faire. S'ils ne commettent pas de code, en ce qui vous concerne, ils n'en ont pas écrit.

S'ils ne s'améliorent pas après avoir eu une chance raisonnable de s'améliorer, tirez-les. Les développeurs non professionnels sont un frein à votre équipe, quel que soit le type de code qu'ils écrivent. Ils affectent les autres par leur manque de professionnalisme et cela ne doit pas être toléré. Ce ne sont pas de bonnes personnes à retenir de toute façon. Les bons développeurs engagent leur code, les bons développeurs suivent les décisions architecturales même s'ils ne sont pas d'accord avec eux et les bons développeurs ne codent pas en dur. Vous ne manquerez de rien sauf des maux de tête en vous débarrassant des codeurs de cow-boy.

HLGEM
la source