Existe-t-il un moyen de prendre en charge différents styles de codage dans une équipe de développement

13

Le problème: deux développeurs => trois opinions sur l'indentation, les accolades sur une nouvelle ligne ou non, etc.

Nous travaillons généralement avec trois ou quatre personnes sur nos projets et chacun d'eux a son propre style de code. Je sais, la solution commune est de s'entendre sur un style de code, tout le monde doit l'utiliser, mais je ne veux pas forcer les programmeurs créatifs dans un costume qui ne leur convient pas.

La question est donc: existe-t-il un moyen de laisser chaque programmeur vivre son propre style, mais avoir une base de code commune à l'intérieur du référentiel? Je pense à un plugin git / svn / que ce soit, qui change entre le style personnel et commun lors du paiement et de la validation. Il me semble que la partie délicate de cette approche est de prendre en charge les différences correctes entre les versions d'un fichier

Kai
la source
1
Il existe des formateurs de code automatiques disponibles pour la plupart des langues, mais pour certains (par exemple C ++), ils sont extrêmement difficiles à rendre entièrement fiables en raison de la complexité de l'analyse syntaxique de la langue.
Joris Timmermans
5
Vraiment une mauvaise idée. Demandez à votre équipe d'élaborer une norme consensuelle, puis demandez-leur de l'appliquer. Si du vin, dites-leur de grandir un peu.
Clement Herreman
8
Peut-être que l'autre remarque extrêmement courante doit être faite ici: y a-t-il un problème réel avec les différences de styles de code? Ne réparez pas quelque chose qui n'est pas cassé!
Joris Timmermans
5
"mais je ne veux pas forcer les programmeurs créatifs dans un costume qui ne leur convient pas" - si vos programmeurs ne peuvent pas s'adapter à des choses simples comme l'indentation ou les changements de style d'accolade, vous devez embaucher de meilleurs développeurs. Une fois que vous utilisez un nouveau style pendant une semaine ou deux, vous l'oubliez.
Mike Weller
4
@MikeWeller Ne pourrait-on pas opposer le contraire? Les conventions de dénomination sont la seule chose que j'ai jamais considérée comme importante car elle facilite l'identification du but d'une chose en dehors de son contexte de définition. Tant que quelqu'un a un style semi-cohérent pour savoir où les blocs s'emboîtent, commencent et se terminent, je n'ai jamais compris pourquoi cela devrait être si important.
Erik Reppen

Réponses:

20

Non, vous devrez établir une norme. Si vous avez un membre de l'équipe B modifié (soit avec un outil IDE automatisé, soit manuellement), un tas de code de membre de l'équipe A a écrit, qui sera validé et affiché comme un changement.

C'est quelque chose que presque toutes les équipes doivent affronter et les normes sont "forcées" pour cette raison. Je vous suggère de suivre les normes des autorités linguistiques comme base et de les adopter en fonction de votre équipe.

Un style de codage cohérent contribuera également à la maintenabilité du projet et réduira la barrière à l'entrée pour les nouvelles personnes travaillant sur le code.

Sam
la source
11

Non, vous devrez définir une norme de codage (de préférence qui existe déjà) et faire en sorte que vos développeurs y adhèrent. Être un programmeur professionnel signifie que vous pouvez vous adapter à la norme de codage utilisée dans le projet sur lequel vous travaillez.

JesperE
la source
2
+1. Laissez-les en choisir un, mais faites-les l'appliquer.
Clement Herreman
Je souhaitais que le formatage fasse partie de la norme d'un langage de programmation, de sorte que les programmes ne soient pas seulement "valides" ou "non valides", mais aient également un troisième état, "valide et bien formaté".
JesperE
4
c'est (plus ou moins) le cas en python, où l'indentation est une langue sémantique.
Clement Herreman
2
Go n'est pas appliquer strictement tel, mais est livré avec un code source intégré formater, go fmt. Voir golangtutorials.blogspot.fr/2011/06/…
Clement Herreman
1
@JesperE Qui est implémenté en Python avec PEP8 et l'outil correspondant, nommé inventivement pep8 .
phihag
8

OUI, cela peut fonctionner tant que les styles sont tous raisonnables et que les gens ne changent pas le code des autres pour correspondre à leurs préférences et / ou mélanger les styles dans un seul fichier de code.
Ce n'est pas idéal, mais ce n'est pas différent d'hériter de l'ancien code créé à un "standard" différent du vôtre et de devoir l'intégrer à votre base de code.
Donc, si vous devez le faire, quelques lignes directrices:

  • pas de changement de code de style différent pour correspondre à vos préférences, cela coûte du temps et introduit des bugs
  • rester cohérent dans un seul fichier. Donc, si le style A a été utilisé pour l'écrire initialement, tout le monde utilisera le style A lors de sa modification
  • créez une norme commune pour votre interface publique, donc pour tout ce qui est exposé à l'extérieur (et oui, les autres sous-composants d'un système sont à l'extérieur).
jwenting
la source
2
J'ajouterais que les développeurs professionnels ont souvent tendance à fusionner les styles les uns des autres de toute façon. Ils auront de brèves discussions informelles sur certains points et parviendront à un accord.
Joris Timmermans
Cela fonctionne très bien, avec la mise en garde que l'utilisation du reformatage automatique du code doit être réduite au minimum (sinon totalement interdite).
grahamparks
2
"pas de changement de code de style différent pour correspondre à vos préférences, cela coûte du temps et introduit des bogues" - bien au contraire - faire correspondre un standard non automatisé à la main est très coûteux en temps, exécuter un formateur de code, valider le changement comme 'formaté avec des options - quoi que ce soit ", puis effectuer des changements fonctionnels est beaucoup plus rapide.
Pete Kirkham
Je pense que cette réponse a peut-être manqué la partie "mise en forme automatique" de la question?
Joris Timmermans
Une variété de styles entre les fichiers est beaucoup plus difficile à gérer que le simple fait d'avoir un style cohérent.
Andy
4

La réponse courte est non.

Alors que les opinions doivent être valorisées dans le travail, en particulier dans un travail basé sur la connaissance tel que le développement de logiciels, les développeurs doivent se rendre compte qu'une opinion n'est qu'une opinion et qu'ils sont là pour écrire des logiciels sans discuter de la norme d'indentation de ligne qui est la meilleure.

L'objectif d'un document sur les normes devrait être de faire appliquer / suggérer un ensemble de normes / conventions de codage communes

  1. Éléments de mise en page tels que tabulation, retrait, utilisation de {, (,
  2. Variable, nom d'objet et de fonction, c.-à-d. CamelCase, notation hongroise
  3. Gestion des exceptions comment / quand / où doit-elle être effectuée
  4. Commentaires sur le code. Faites-vous toujours référence à un document de conception, à un numéro de bogue, etc.

Les documents sur les normes contribuent à garantir que le code est facile à lire, à maintenir et cohérent dans ses conventions.

Ceci est inestimable lors de la révision du code avant les enregistrements, du débogage du code ancien ou de la modification du code plusieurs années après que le développeur d'origine a quitté l'entreprise.

Normalement, lors de la création d'un document sur les normes de codage, j'examine les normes de l'industrie pour le langage que j'utilise (C, C #, SQL), j'utilise les normes les plus appropriées, je les transmets aux développeurs les plus expérimentés / influents pour commenter, j'intègre les commentaires le cas échéant, puis libérer le document.

armitage
la source
1
Dans la pratique, de nombreux magasins ont un développeur qui est généralement Old Hand ou PrimaDonna, qui semble ravi de créer le formatage de Holy Wars pour le reste des gens. Professionnel == Quoi que je dis. Quoi que vous disiez les gars == Non professionnel. Et puis cela revient. J'ai vu des normes de codage imposant des choses grossières comme "Utilisez beaucoup de variables globales, ne créez jamais de nouvelles classes, évitez la programmation orientée objet à tout prix et ne changez rien, jamais". Malheureusement, il n'y a pas de limite à ce que les gens essaient de rentrer dans le champ de ce que l'on appelle les "normes de codage".
Warren P
4

Le reformatage automatique du code avant qu'il ne soit validé dans votre système de contrôle de version est théoriquement possible.

pourtant , il y a un gros problème: les outils de formatage automatique de code ne sont pas fiables à 100%. Ainsi, vous pourriez réellement introduire des problèmes dans votre code avec ce système. Dans mon esprit, cela tue l'idée. Il est toujours plus important d'avoir du code fonctionnel que du code correctement conçu!

Si le projet est compartimenté et que la plupart des parties du code ont tendance à être «détenues» par des programmeurs individuels, il peut être acceptable de les laisser utiliser leurs propres styles (dans des limites raisonnables). Cependant, si plusieurs personnes travaillent fréquemment sur le même morceau de code, il est probablement nécessaire d'appliquer un style.

Voici une discussion similaire sur Stack Overflow .

Communauté
la source
2
Notez également la réponse acceptée dans la discussion liée!
Joris Timmermans
1

Le reformatage automatique unidirectionnel peut être une solution viable si vous:

  1. Trouvez une mise en forme automatique qui fonctionne réellement pour la convention que vous souhaitez implémenter et votre langage de programmation.
  2. Peut le faire avant la validation afin que le reformatage n'apparaisse pas dans les journaux des modifications mélangés et indiscernables des modifications fonctionnelles réelles.
  3. Parvenez à faire en sorte que votre équipe se mette d'accord sur la convention à appliquer (car, en règle générale, il n'y a pas de «retour en arrière» au moment du départ selon les préférences personnelles d'un développeur, du moins pas à ma connaissance).

Rien de tout cela n'est en fait facile à faire dans de nombreux cas, alors pensez à choisir vos batailles ici! J'ai vu des équipes le faire avec succès pour un projet C # /. NET où le reformatage s'est déjà produit sur le PC du développeur, donc c'est possible dans certaines circonstances.

Joris Timmermans
la source
1

vous le pouvez absolument. Il s'agit de ne pas transpirer les petites choses.

La seule norme qui importe est de "conserver vos modifications dans le même style que le code existant". Tant que vous pouvez vous adapter à un style de codage qui n'est pas votre préféré, vous pouvez travailler avec n'importe quel style de codage.

Alors, quel est l'intérêt de travailler dans 3 styles différents au sein d'une même entreprise. Vos développeurs ont besoin de comprendre que l'écriture de code à leur guise est de trouver leur code, mais une fois qu'ils ont apporté des modifications à un fichier différent qui utilise un style différent, ils ont maintenir ce style (ou ça va vraiment mal paraître) . Aucun reformatage n'est autorisé (ou ils se reformateront continuellement et les différences scm seront inutiles) (et si vous faites cela, alors un formatage automatique devrait être utilisé).

Il y a de fortes chances qu'une fois qu'ils y parviennent, ils parviendront à un consensus sur le style à utiliser ou ils dériveront ensemble pour la plupart. S'ils vont être enfantins à ce sujet et se reformateront le code les uns des autres tout le temps, alors il sera temps de télécharger une norme sur Internet et d'exiger qu'ils l'utilisent. Vous voudrez peut-être le faire de toute façon, juste pour l'agiter dans leurs visages comme une carte "jouer gentil ou bien".

gbjbaanb
la source