Traitement des normes de codage au travail (je ne suis pas le patron)

40

Je travaille sur une petite équipe, environ 10 développeurs. Nous n'avons aucune norme de codage. Certaines choses sont devenues la norme, mais certaines façons de faire sont complètement disparates. Mon plus gros problème est l'indentation. Certains utilisent des tabulations, d'autres des espaces, d'autres utilisent un nombre différent d'espaces, ce qui crée un énorme problème. Lorsque je fusionne, je suis souvent confronté à des conflits parce que quelqu'un utilisait son IDE pour se formater automatiquement et utilisait un caractère différent du mien pour l'indentation. Je me fiche de savoir qui nous utilisons, je veux juste que nous utilisions tous le même.

Ou bien je vais ouvrir un fichier et certaines lignes ont des accolades sur la même ligne que la condition alors que d'autres les ont sur la ligne suivante. Encore une fois, je ne me soucie pas de savoir lequel, pourvu qu'ils soient tous identiques.

J'ai abordé la question des normes avec mon supérieur hiérarchique direct, individuellement et lors de réunions de groupe, et il ne s'en préoccupe pas excessivement (plusieurs autres partagent le même point de vue que moi). J'ai évoqué ma préoccupation spécifique concernant les caractères d'indentation et il a pensé qu'une meilleure solution consisterait à "créer une sorte de script capable de convertir tout cela lorsque nous poussons / retirons du repo". Je soupçonne qu'il ne veut pas changer et que cette solution semble trop compliquée et sujette à des problèmes de maintenance à l'avenir (cela ne concerne également qu'une manifestation d'un problème plus vaste).

L'un de vous a-t-il rencontré une situation similaire au travail? Si oui, comment l'avez-vous géré? Quels seraient les bons points pour aider à vendre mon patron sur des normes? Lancer un mouvement populaire pour créer des normes de codage, parmi ceux d’entre nous qui sommes intéressés, serait une bonne idée? Suis-je trop particulier, devrais-je le laisser aller?

Merci à tous pour votre temps.

Remarque: Merci à tous pour les bons commentaires reçus jusqu'à présent! Pour être clair, je ne veux pas dicter Un style pour les gouverner tous. Je suis prêt à concéder ma manière préférée de faire quelque chose en faveur de ce qui convient le mieux à tout le monde. Je veux de la cohérence et je veux que cela soit une démocratie. Je veux que ce soit une décision de groupe sur laquelle tout le monde s’accorde. Certes, tout le monde ne réussira pas, mais j'espère que tout le monde sera suffisamment mûr pour faire des compromis en vue de l'amélioration du groupe.

Note 2: Certaines personnes sont prises dans les deux exemples que j'ai donnés ci-dessus. Je suis plus après le coeur de la matière. Il se manifeste par de nombreux exemples: conventions de dénomination, fonctions énormes qui doivent être décomposées, si quelque chose devait arriver dans un util ou service, si quelque chose devait être constant ou injecté, si nous utilisions tous des versions différentes d’une dépendance ou du même, si interface soit utilisé dans ce cas, comment les tests unitaires doivent-ils être configurés, ce qui doit être testé, (spécifique à Java) doit-on utiliser des annotations ou une configuration externe? Je pourrais continuer.

Josh Johnson
la source
3
Certains outils de fusion permettent d’ignorer les différences d’espace. Cela ne résoudrait pas le problème, mais pourrait atténuer la douleur intermédiaire ...
FrustratedWithFormsDesigner
5
Pourquoi n'aimez-vous pas la solution de votre responsable consistant à formater le code lorsqu'il est transféré au contrôle de source?
Larry Coleman
5
Je pense que c'est un problème social, pas un problème technique. Si l'équipe ne parvient pas à se mettre d'accord sur les normes, aucune technologie ne sera utile, selon l'OMI.
Bryan Oakley
11
TOUT LE MONDE devrait utiliser le format automatique IDE avec les mêmes paramètres. Simplement fais-le.
1
@ Thorbjørn - D'accord. Nous venons de publier les paramètres globaux de l'EDI hier.
Adrian J. Moreno

Réponses:

73

Un collègue de travail et moi avons eu un problème similaire au sein de notre équipe lorsque nous nous sommes joints pour la première fois (j'ai d'abord rejoint l'équipe, il l'a rejoint environ un an plus tard). Il n'y avait pas de véritables normes de code. Nous sommes un magasin MS et même les normes de codage MS n'ont pas été utilisées. Nous avons décidé de donner l'exemple. Nous nous sommes assis ensemble et avons rédigé un document contenant toutes nos normes: normes IDE, normes de nommage, tout ce à quoi nous pouvions penser. Ensuite, lui et moi avons accepté de suivre la norme de manière explicite. J'ai envoyé un courrier électronique à l'équipe (de nous deux), et les ai informés que nous avions trouvé un manque et que nous allions le corriger avec notre document. Nous avons invité des critiques, des idées, des commentaires, des opinions. Nous avons reçu très peu de commentaires et n’avons que peu de répulsion. Lui et moi avons immédiatement commencé à utiliser les normes, et lorsque nous avons invité des développeurs débutants dans nos projets, nous leur avons présenté la norme et ils ont commencé à l'utiliser. Nous avons quelques pistes qui étaient réticentes au début mais qui ont lentement commencé à utiliser le standard pour de très nombreuses choses.

Nous avons constaté que de nombreux développeurs débutants avaient reconnu le même problème mais attendaient que quelqu'un d'autre prenne la décision. Une fois qu’il y avait un plan à suivre, beaucoup étaient impatients de l’adopter. Ce qui est difficile à casser, ce sont ceux qui refusent de coder par tout autre moyen, et ils se codent généralement eux-mêmes à la longue.

Si vous voulez des standards, tracez le chemin. Dressez une liste de normes suggérées qui, selon vous, bénéficieraient à votre équipe. Soumettez-le à des pairs et des pistes de commentaires. Je suis sûr que d'autres membres de votre équipe ont des idées similaires, mais ils n'ont probablement pas le courage de faire quoi que ce soit à ce sujet. Comme Gandhi l'a dit: "Vous devez être le changement que vous souhaitez voir dans le monde."

Joel Etherton
la source
4
J'aime l'idée de partir parmi ceux qui sont d'accord! J'ajouterais que plus il est facile de trouver et de suivre les normes, plus il est probable que les gens le feront - assurez-vous que si vous avez des outils de formatage IDE, les instructions d'installation ainsi que tous les fichiers de configuration sont faciles à trouver et l'installation est bien documentée.
Bethlakshmi
1
En bref, tenez-vous au standard avant de vous attendre à ce que les autres soient tenus au même standard. Commencez par identifier ce que la plupart de vos équipes utilisent, puis configurez votre environnement pour le faire.
Freiheit
2
+1 C’est exactement comme cela que nous avons géré la même situation. J'ai constaté que donner l'exemple en résolvant le plus souvent de nombreux problèmes dans un atelier de développement - mais vous devez être obligé de gagner l'adhésion des autres. Si vous êtes le seul à tracer le chemin, vous devriez probablement réévaluer le chemin en premier lieu.
Jduv
1
Joel, cette histoire a inspiré mes collègues et moi. Nous prenons le flambeau en utilisant votre histoire comme modèle.
Josh Johnson le
Je suis partiellement d'accord avec vous. Commencez par celui qui est d'accord, mais je ne suis pas d'accord avec "Nous nous sommes assis ensemble et avons rédigé un document". Le développeur ne devrait pas faire cette merde à la place d'utiliser un outil. Vous pouvez utiliser resharper ou un code alternatif gratuit, vous pouvez le forcer à reformater votre code à chaque fois que vous enregistrez un fichier. Quoi qu'il en soit, j'ai un travail pour une entreprise qui force la norme de codage à atteindre un niveau insensé, comme une méthode de tri par alphabet, un groupe de champs par type et une région. cela me faisait perdre le sentiment de perdre la moitié de mon temps.
kirie
6

Les normes ne doivent pas être définies et appliquées par un responsable. L’équipe dans son ensemble devrait accepter les normes. S'ils n'arrivent pas à s'entendre sur un ensemble de normes communes, le fait de leur imposer des normes échouera.

Vous et les autres qui êtes d'accord avec vous devriez donner l'exemple. Commencez à utiliser les mêmes normes de codage, publiez-les, faites-en la promotion auprès du reste de l'équipe et demandez-leur de vous donner leur avis sur la façon de les améliorer.

Voici l'essentiel lorsque vous essayez de promouvoir les normes: assurez-vous que l'objectif n'est pas de trouver la meilleure façon de faire les choses, mais plutôt de trouver une manière cohérente de faire les choses. Bien que certaines personnes puissent ne pas être d’accord, il n’existe pas de style unique, de style de commentaire, etc. Ce qui rend le code plus facile à lire (et donc plus facile à gérer) est un style cohérent, quel qu’il soit.

Bryan Oakley
la source
4
Je conviens que l'équipe doit définir les normes, mais idéalement, le responsable doit être le responsable de l'application. Si vous n'avez pas l'adhésion du responsable à l'idée de normes de codage, vous devriez envisager d'assumer vous-même ce rôle de leader (voir la réponse de Joel Etherton).
semaj
3
Bien techniquement, il existe un One True Brace Style: fr.wikipedia.org/wiki/Indent_style#Variant:_1TBS
Rétablir Monica
@semaj: Je suis totalement en désaccord. Cela ne devrait pas incomber au gestionnaire. Pas même un peu.
Bryan Oakley
D'autre part, vous êtes une équipe de programmation, des employés de quelqu'un, pas une commune hippie. Qui a la tête qui roule si le projet échoue? Je garantis que quelqu'un fait. Si tout le monde est responsable, personne ne l' est. Voir ceci , ceci , cela , etc.
Craig,
"Qui est la tête roule", je voulais dire. Evidemment ...
Craig
5

Pouvez-vous montrer quelques preuves du temps que vous avez perdu à cause des problèmes que cela cause?

Si vous passez beaucoup de temps à résoudre ces problèmes ou que vous créez des bogues qui prennent du temps à corriger, il est possible de réduire considérablement ce coût en adoptant des normes de codage.

Alors, gardez un journal des problèmes que vous rencontrez et du temps qu'il faut pour les résoudre - à la fois pour vous et (lorsque vous en avez connaissance) avec vos collègues.

Ensuite, lorsque vous avez une quantité raisonnable de données, présentez-les à vos collègues. Ils devraient voir l'avantage d'adopter une norme. Si ce n'est pas le cas, montrez les données à votre chef et à son chef. Montrez qu'en établissant des normes de codage, vous pouvez économiser de l'argent à votre entreprise et elle devrait vous aider à les faire adopter.

ChrisF
la source
3

Sur votre situation particulière, je pense que la solution de votre patron est une bonne solution. Personne ne doit changer ce qu’il a fait pendant toute sa carrière, et c’est normal parce que le style de code ignoré par le compilateur n’a aucune importance tant que le code est lisible. Si tout le monde modifiait automatiquement son style lors de la vérification et formait automatiquement un style standard lors de l'enregistrement, tout irait bien. (Malheureusement, j’ai suggéré que c’est là où je travaille que les choses se sont opposées, au motif que le codeur n’écrirait plus le même code exact que le serveur d’intégration continue voit.)

Je pense que les normes de codage sont bonnes lorsqu'elles sont appliquées à des endroits où la qualité du code est réellement différente: par exemple, méthodes réduites, classes ayant une responsabilité clairement définie, commentaires utiles et précis pour les bits les plus difficiles, etc. Malheureusement, ces aspects sont plus difficiles à vérifier automatiquement, mais c’est fondamental pour le développement logiciel. Tout ce que vous pouvez réellement faire, c'est enseigner aux autres de bonnes pratiques et à vous-même à lire le code avec le support sur la mauvaise ligne.

jete
la source
3
Je vais bien avec le corset sur n'importe quelle ligne. Je suis éjecté lorsque les deux styles sont dans le même fichier. Le rend plus difficile à numériser.
Josh Johnson
Cela me rend fou, moi-même. Mais comme je ne peux pas reformater la base de code dans son intégralité, j’essaie juste de le gérer jusqu’à ce que je puisse faire pression pour une solution automatisée.
jprete
2

En ce qui concerne les normes de codage: je vais me joindre à presque tout le monde pour dire que les normes de codage sont une "bonne chose" (par rapport à l'absence de normes).

Cependant, ne vous laissez pas emporter. J'ai travaillé sur des projets qui dictaient un style d'indentation spécifique, jusqu'au nombre de caractères (et quand les projets vont aussi loin, ils choisissent inévitablement quelque chose de stupide comme l'indentation de 8 espaces). Ne pas transpirer les petites choses.

Une solution simple: donnez aux développeurs un choix limité d'options d'accolade et d'indentation, mais indiquez que le style d'accolade et l'indentation doivent être cohérents dans l'ensemble du module. (Vous voulez que foo.h et foo.cpp suivent le même style, n'est-ce pas?) Les mainteneurs doivent s'adapter au style existant; ils ne peuvent pas réécrire un module en fonction de leur style fantaisiste. Plusieurs styles dans un module sont source de confusion et sont un signe de négligence. Quand je vois ce non-sens, je me demande ce qui ne va pas.

Vous pouvez également envisager d’interdire les tabulations d’indentation dans le contenu enregistré d’un fichier . La plupart des IDE / éditeurs font un travail raisonnable en traduisant des onglets de saisie utilisateur en espaces, et la plupart ont des options pour rendre cette traduction automatique. Beaucoup font un travail de merde quand le fichier contient déjà des onglets, en particulier un sac mélangé d'onglets et d'espaces.

Cela dit, je pense que votre projet pose peut-être un problème plus grave. Vous avez mentionné des problèmes de fusion. Si vous avez besoin de beaucoup fusionner, cela peut indiquer un mauvais partitionnement du projet. Tout comme trop de cuisiniers gâchent le bouillon, trop de programmeurs opérant sur le même fichier gâchent le projet. Pourquoi Joe, Susie et vous touchez-vous à foo.cpp?

David Hammen
la source
3
Ou vous pouvez simplement utiliser des onglets et des développeurs individuels peuvent les fabriquer quelle que soit leur taille ..
Réintégrer Monica le
1
@Brendan: En m expérience qui ne fonctionne pas. Les programmeurs mélangent inévitablement des onglets et des espaces pour obtenir leur code pour aligner tellement , lignes continues particulièrement. Cet espace en mode mixte et cette corbeille d'onglets peuvent paraître carrément laids avec un paramètre différent pour les onglets que celui utilisé par le développeur.
David Hammen
2
Je n'ai jamais dit de les mélanger. Utilisez seulement des onglets. Désormais, l'indentation est comme chaque développeur le souhaite. Si vous avez vraiment besoin que votre code s'aligne "parfaitement bien", utilisez quand même des tabulations pour l'indentation, puis des espaces pour l'aligner (je considère cela comme une perte de temps).
Rétablir Monica
2
Ce sont les espaces par la suite qui tuent cette idée. La règle "Aucun onglet dans les fichiers source" est commune à de nombreuses normes de codage. Il y a une raison pour cela.
David Hammen
1

C'est l'un des domaines dans lesquels des recherches sont effectuées. Fondamentalement, la question principale est de savoir si vous faites des révisions de code. Les revues de code sont sans aucun doute le moyen le plus efficace d’améliorer la qualité du code. (Source: Institut de génie logiciel, CMU). C'est certainement plus efficace qu'un testeur supplémentaire.

Désormais, les critiques de code bénéficient d'une norme de codage commune, car cela facilite la lecture du code des autres peuples. Cela vous fournit un argument en deux étapes pour introduire des normes de codage: en fin de compte, il est moins coûteux de produire un bon code.

MSalters
la source
1

Puisqu'il y a déjà "plusieurs autres" qui sont avec vous à ce sujet, je suggérerais une réunion impromptue. Inviter tous les devs, prendre un peu de temps et de comprendre ce que les choses sont vous dérangent et vos collègues au jour le jour. N'essayez pas de trouver des solutions spécifiques au début, mais déterminez simplement ce qui doit changer dans la manière dont vous écrivez tous le code à l'heure actuelle.

Ensuite, voyez si vous pouvez tous vous mettre d’accord sur certains concepts de base. La suggestion d'utiliser le même style dans chaque module évoqué par @David Hammen est un bon début, et je pense que la plupart des développeurs pourraient facilement accepter.

Si, une fois que vous avez compris, vous sentez que vous pouvez être d’accord sur un style de base pour écrire du nouveau code, c’est un bon ajout. Concentrez-vous sur des choses qui ont réellement un impact sur la maintenabilité; Les problèmes de nommage seraient en haut de ma liste personnelle, car si vous avez une demi-douzaine de styles de nommage différents dans un même produit d'une complexité notable, cela va vite devenir un casse-tête, mais encore une fois, concentrez-vous sur ce que vous estimez important pour vous et votre équipe . Rédigez un court document que tout le monde peut au moins accepter de suivre (même s'ils ont eux-mêmes un style de familier différent) et envoyez-le à tous les membres de l'équipe. Faites-en un document "vivant", assurez-vous de le mettre à jour avec le temps, mais veillez à ne pas le rendre trop rigide et spécifique.

À moins que votre patron ne soit impliqué dans la rédaction de code, il ne devrait pas trop se soucier du style exact adopté (à condition qu'il soit axé sur la lisibilité et la maintenabilité), mais il devrait être en mesure de voir les avantages de tous les membres de l'équipe suivant un style commun. lors de l'écriture du code.

un CVn
la source
1

Certaines choses sont douloureuses. Le plus pénible est un IDE qui reformate automatiquement le code, associé à des développeurs qui configurent leurs IDE de différentes manières. Chaque fois que vous comparez le code, vous avez des centaines de modifications après que quelqu'un avec des paramètres différents a modifié le code. C'est inacceptable. Ici, vous devez rassembler tous les esprits, vous mettre d’accord sur un ensemble de paramètres et rejeter toute vérification effectuée par quiconque utilisant des paramètres différents. Si je modifie une seule ligne de code, les diffs devraient afficher une seule ligne de code modifiée, et non des centaines.

Tout le reste est soit inoffensif, soit il existe de meilleures façons de faire des choses dont d'autres peuvent être convaincus. Ici, la règle devrait être la suivante: ne jouez pas avec le code des autres personnes si vous ne l'améliorez pas vraiment. Et un mélange de style A et de style B est toujours pire que le style A ou le style B.

Assurez-vous de suivre les meilleures pratiques. Ce qui est différent par langue. Mais là, vous n’avez pas besoin de normes (qui ont peut-être été écrites par une personne bien intentionnée mais pas réellement informée), mais tout le monde devrait essayer de donner de bons exemples.

Évitez certainement les luttes de pouvoir. Il n'y a rien de pire qu'un petit Hitler de votre équipe qui tente de forcer tout le monde à faire ce qu'il veut. Et c'est malheureusement le type qui se portera volontaire pour rédiger vos normes de codage :-(

gnasher729
la source
Différentes normes de différents développeurs sur le même projet entraînent la perte de cheveux. Créez des paramètres standard pour le projet. Demandez à chaque développeur d’importer ces paramètres. Période. C'est facile avec des outils tels que l'IDE de Visual Studio. Si vous avez des développeurs qui insistent pour utiliser Emacs (ce que j'aime beaucoup) ou autre chose, ils sont responsables du respect de la norme. Utilisez une jolie routine d’impression pour reformater le code pour l’enregistrement. L'objectif est un code uniforme facile à comprendre pour tout le monde, et non un style artistique individuel dans les fichiers de code source individuels de chacun.
Craig
0

Tous les exemples que vous avez donnés concernent essentiellement les espaces et le formatage. Si c'est le plus gros problème, je suis plutôt d'accord avec votre responsable: ce n'est pas un gros problème.

Là où les normes sont vraiment très utiles, il faut nommer et réduire la complexité. Comment nommer des identificateurs, des classes, où les placer, etc. Il est extrêmement important de conserver des noms cohérents, en particulier dans un projet de grande taille. Les règles permettant de réduire la complexité incluent de conserver les fonctions sous un certain nombre de lignes (les diviser en fonctions plus petites) ou de conserver les listes de paramètres sous un certain nombre d'arguments (peut-être devriez-vous les regrouper dans un objet et les transmettre).

Si un développeur spécifique de votre équipe écrit un code plus difficile à comprendre / à déboguer, car il comprend de nombreux morceaux de code longs avec des noms de variable à une lettre, c’est une bonne raison d’adopter certaines normes, et non quelque chose qui puisse être corrigé. un script. C’est une bonne chose de souligner (avec tact) que les normes peuvent être améliorées.

Une autre raison pour laquelle votre responsable n’a peut-être pas considéré cela comme un problème est que vous ne lisez pas très souvent le code de chacun. Cela peut arriver lorsque tout le monde a son propre domaine du code et ne s'aventure pas trop en dehors de celui-ci. Cela fonctionne plutôt bien jusqu'à ce que quelqu'un quitte l'organisation, ce qui peut arriver pour diverses raisons, bonnes ou mauvaises. Les normes qui améliorent la lisibilité faciliteront la tâche à un nouveau développeur de prendre en charge la maintenance d’un morceau de code.

benzado
la source
0

conflits lorsque je fusionne parce que quelqu'un utilise son IDE pour le formatage automatique et utilise un caractère différent pour indenter le mien

Cela semble être votre problème, pas le formatage, mais le reformatage. C'est un problème énorme pour les SMC et le conseil est simple: ne le faites pas. Ainsi, la prochaine fois que quelqu'un reformatera tous les espaces en onglets ou modifiera les accolades à leur style préféré, vous devrez les gifler. Faites-les fusionner à la place; tenez-vous à leur côté, désapprouvant la perte de temps que leur négligence a causée

L'alternative est de mettre un formateur de pré-validation dans, qui re-formate toujours tout le code dans le style standard avant l'archivage. Si vous avez une équipe de développeurs qui reformate naturellement, c'est une bonne option - le SCM verra toujours le même format, donc les deltas seront petits et agréables à fusionner.

gbjbaanb
la source
0

Lorsque quelqu'un propose une nouvelle norme de codage dans laquelle je travaille, nous la votons. S'il obtient un vote à la majorité, il est accepté, sinon il est rejeté. Si vous ne le faites pas, vous n'accepterez pas vos normes et elles ne seront pas utilisées même si elles sont documentées.

Petras
la source
0

En ce qui concerne votre question spécifique, votre meilleur pari commencera probablement par la suggestion de Joel et donnera l'exemple. Rassemblez 1 ou 2 programmeurs qui s’intéressent à ce sujet, concluez un accord et vous aurez le pouvoir d’imposer ceux qui sont paresseux.

Maintenant, pour le problème générique, je trouve préférable de simplement moduler . Chaque personne reçoit un fichier différent. Si vous devez gérer un fichier, vous conservez ses normes de codage intactes, même si elles sont différentes les unes des autres. Besoin d'écrire dans le même fichier? Créez un fichier de sous-ensemble et incluez-le à la place.

cregox
la source
0

N'essaye pas ça!

Exemple par exemple. Essayez de rendre votre format de code aussi horrible que possible et enregistrez de nombreux changements horriblement formatés dans le joli code des autres peuples. Lorsque la réaction (inévitable) se produit, dites que ce que vous faites est bien, car il n’existe pas de norme de codage.

Si vos collègues ne vous lynchent pas (!!), vous pouvez vous retrouver avec une norme de codage.

De toute évidence, il s'agit d'une stratégie à haut risque ... :-)

Stephen C
la source
En fait, il y a quelques personnes qui essayent celle-ci maintenant et beaucoup qui ont utilisé cette stratégie avant que je commence. En dépit de tous leurs efforts, aucune norme n'a encore été définie :(
Josh Johnson le
@ Josh Johnson - ils n'ont évidemment pas fait assez d'efforts. Envisagez d'utiliser ROT-13 sur tous les identifiants :-)
Stephen C le