Question:
Lisibilité du code, conventions et devrais-je lâcher prise
Stankar0x
2017-11-12 20:53:33 UTC
view on stackexchange narkive permalink

En chassant un bogue, j'ai trouvé quelques lignes de code que j'avais du mal à lire et je les ai améliorées pour plus de lisibilité.

Ce changement a rapproché le code de ce que dit notre Convention de codage, qui stipule également que nous devrions "corriger le code qui n'est pas écrit dans ce style".

Maintenant un de mes pairs, qui a de l'ancienneté disons en raison de la durée de son mandat là-bas. Un gars intelligent, dévoué au code, et a écrit des pièces importantes. Me tire de côté et dit:

Pourquoi fais-tu ça? Vous changez mon code. Nous sommes une équipe. Ce code a été écrit de manière à être compris par tous les membres de l'équipe. Et doit être maintenable même après 100 ans. Si vous ne suivez pas les conventions de l'équipe, nous devons nous séparer, ou je parlerai aux responsables pour que vous n'ayez plus jamais à toucher à ce code. Cette chose ... ne sera pas comprise par les développeurs juniors, et je sais ce que vous faites là-bas, simplement parce que je peux voir la différence. J'ai écrit ce code et je connais chaque ligne qu'il contient, et maintenant il est difficile de le suivre. Ce n'est pas lisible et j'écris mon code pour qu'il précise ce que je pense. Vous devriez faire ce que je vous dis de faire - cela signifie ne touchez pas à mon code, et s'il y a des bogues corrigez le bogue et c'est tout.

OK, j'avoue que je suis coupable Je n'ai pas suivi la Convention du Code à un T, mais en général, je pense que ma version est plus lisible que la version précédente.

J'ai inversé les changements, et juste corrigé le bogue qui était quelques lignes ci-dessous. Mais cela me laisse mal à l'aise car je suis complice de laisser un code désordonné. Ce n'est pas le seul endroit dans la base de code qui a de longues lignes et plusieurs instructions sur une ligne, mais au moins je n'ai pas eu à passer autant d'itérations avec.

Dois-je lâcher prise, ou aller parler aux supérieurs, à ses managers, à leurs managers, etc. D'une part pour 3 lignes ce sera stupide, vu le fait que j'ai récemment rejoint donc ils ne me connaissent pas très bien, d'autre part c'est une question de principes et cela me dérange beaucoup.

  • La personne avec qui j'ai eu cette discussion n'est pas mon manager, c'est un pair. Nous sommes au même niveau. Son ancienneté perçue est basée sur le fait qu'il est là depuis plus longtemps que moi.
  • La convention de code dit clairement que je peux changer le code pour le rendre dans l'esprit de la convention de code. La convention a été écrite par son responsable direct.
  • @Fattie - J'ai tendance à convenir en général que les deux versions du code sont des ordures. Je suis fan de Oncle Bob, Grady Booch, Kent Back, Martin Fowler, etc ... Donc je sais ce que vous sous-entendez. Maintenant, je ne suis pas allé jusqu'au bout pour le rendre méconnaissable, car j'avais peur de me lancer dans ce différend territorial. J'ai simplement suivi la convention dans ce cas.
  • J'ai l'impression que certains d'entre vous supposent qu'être nouveau à cet endroit signifie être inexpérimenté. Je vous en prie, ne le supposez pas.
  • Pour moi, la lisibilité du code est un précurseur pour une maintenance plus facile sur la route. Je sais que je peux couper les coins ronds et laisser les choses telles quelles. Je vais éventuellement changer de navire. Les futurs développeurs devront y faire face. Pas besoin de me compliquer la vie pour 3 lignes de code. Je voulais juste recueillir des opinions si le combat en valait la peine. À cet égard (dans ce cas), la réponse de @ A.O est la plus logique.
Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/68672/discussion-on-question-by-stankar0x-code-readability-conventions-and-should-i-l).
En regardant le code dans l'ancienne édition (et en parlant en tant que programmeur): je pense que diviser les longues lignes compliquées en plusieurs lignes est un bon changement, cela le rend considérablement plus facile à lire.La partie où vous introduisez l'opérateur `%` est plus discutable.On peut soutenir que l'ancien code était plus facile à comprendre, en particulier pour les développeurs débutants qui n'utilisent peut-être pas souvent cet opérateur (à l'exception de FizzBuzz).Pensez-vous qu'il se serait plaint avec autant de véhémence si vous aviez seulement divisé les lignes?Cela dit, sa réaction a été très mauvaise.Soyez prudent avec ce gars à l'avenir ...
Je suis d'accord que l'opérateur de mod (%) ajoute à la supercherie.Mais même sans cela, je suis certain que la réaction aurait été la même.
D'une manière générale, je trouve les conventions de codage souvent trop détaillées et généralement surfaite.Ils servent des objectifs importants: éviter les habitudes dangereuses et rendre le code lisible, en partie en réduisant les différences de style au sein d'un projet collaboratif.Se concentrer sur des détails au-delà de ces objectifs est distrayant et peut être contre-productif.Je ne veux pas être méchant mais: je soupçonne souvent les gens qui se concentrent sur les détails du style de coder de profiter du pouvoir accordé par les règles d'interférer là où ils ne pourraient pas autrement.Conseil: Concentrez-vous sur la substance.Cela * peut * inclure des violations substantielles des règles de codage.
@Stankar0x, J'ai répondu à une question similaire il y a des années en me basant sur une de mes expériences il y a plus de dix ans.Vous pouvez le lire ici, et peut-être vous sera-t-il utile: [Comment vous empêchez-vous de refactoriser un code qui fonctionne mais qui est horrible?] (Https://stackoverflow.com/questions/455271/how-do-you-stop-vous-même-de-refactorisation-de-travail-mais-horrible-code / 455427 # 455427) J'étais à votre place alors, et j'ai découvert qu'il y a de bonnes raisons de laisser un mauvais code seul (aussi douloureux que cela soit).
Douze réponses:
meriton
2017-11-12 23:04:19 UTC
view on stackexchange narkive permalink

Donc votre senior et vous n'êtes pas d'accord sur ce que signifient les conventions de codage et de quelle manière est la plus lisible. La façon de résoudre ce problème est de clarifier votre compréhension afin que tout le monde soit sur la même page.

Par conséquent, j'aurais réagi comme suit:

S: Pourquoi êtes-vous Ce faisant? Vous changez mon code. Nous sommes une équipe ...

J: J'ai essayé de le faire adhérer à la convention de codage. Cela dit que nous devrions faire XXX, et améliorer le code existant quand nous le voyons?

Et ensuite écouter ce qu'il dit et essayer véritablement de comprendre son point de vue.

Et une fois que le débat technique est terminé (et que les esprits se sont, on l'espère, refroidis), j'aborderai l'aspect social de ses retours. Encore une fois, cela fonctionne mieux comme une question:

Que dois-je faire si je vois quelque chose dans votre code que je ne comprends pas ou que je pense qu'il pourrait être fait plus simple?

Et encore une fois écoutez ce qu'il veut.

Cela accomplit plusieurs choses:

  1. Sa réponse plutôt émotionnelle indique qu'il est émotionnellement investi dans son code et ressent son jugement d'expert non respecté. En demandant son expertise, vous montrez que vous appréciez son expertise, ce qui devrait apaiser la discussion.
  2. Cela signifie que vous ne vouliez pas lui manquer de respect ou faire étalage des normes sociales. Au contraire, cela lui fait comprendre que vous ne saviez tout simplement pas encore ce que vous attendiez de vous et que vous essayez de résoudre ce problème.
  3. Cela clarifie ce que l'on attend de vous pour éviter d'autres conflits accidentels.
_ "Cela clarifie ce que l'on attend de vous pour éviter d'autres conflits accidentels." _ Je pense que le collègue l'a déjà dit clairement: "Touchez à nouveau mon code! Touchez mon code encore une fois! Je vous défie ..." - Alors je neJe ne pense pas que s'engager dans une conversation suggérée sera constructif.
L'écoute est l'un des outils les plus puissants pour gagner la confiance.Parfois, nous sommes tellement pris à montrer à quelqu'un comment notre chemin est meilleur que nous oublions que peu importe si notre chemin est meilleur si personne ne nous fait confiance.Et de temps en temps, nous pourrions découvrir que notre chemin n'est pas meilleur!
@Fildor: En colère, les gens font parfois des déclarations irréfléchies qu'ils reconnaissent comme des solutions moins que parfaites après une réflexion calme.Dans ce cas, je pense que la révision est nécessaire car la solution proposée n'est pas durable: que doit faire OP s'il se voit confier des tâches qui nécessitent des modifications importantes du code de ce senior?
C'est généralement ainsi que j'aborde les problèmes de cette nature.Autant que j'aime votre réponse dans ce cas, elle ne peut pas être appliquée.J'ai déjà essayé d'évaluer les attentes, mais j'ai été balayé par des réponses comme: «Eh bien, la convention du code n'est pas respectée.», Ou «Le code a été écrit il y a longtemps, aucun organisme ne le lit de toute façon.Tout le monde dans l'équipe le comprend et il devrait en être ainsi ».
A.S
2017-11-12 21:12:50 UTC
view on stackexchange narkive permalink

Lâchez prise. Vous essayez de faire un compromis entre 3 ou 4 priorités: vos préférences, les conventions du code, les préférences du développeur senior dont vous avez modifié le code et la capacité de l'équipe à donner du sens du code. Selon le développeur senior, son style de codage a du sens pour l'équipe. Les priorités 3 et 4 peuvent donc être combinées. Maintenant, c'est entre vous, les conventions de code et l'équipe senior dev +.

Entre ces options, les conventions de l'équipe et votre relation avec le développeur senior, à mon avis, comptent plus pour la capacité de l'équipe à faire le travail que vos préférences et les conventions du code.

En tenant compte du fait que vous êtes nouveau, je recommanderais de laisser tomber et d'en apprendre que ce que vous pensez être juste n'est pas nécessaire, ce qui devrait toujours arriver.

Je soupçonne d'autres ici pourraient repousser et il y a certainement de la place pour un ordre différent des priorités, mais c'est probablement la voie que j'aurais empruntée, du moins alors que j'étais encore un employé relativement nouveau. Bonne chance!

Sur la base de la citation du collègue, entre les menaces, l'intimidation et l'exagération, je doute fort qu'ils soient le type de personne capable de parler avec précision pour les autres en tenant compte de l'opinion de quelqu'un d'autre.
Re * Selon le développeur senior, son style de codage a du sens pour l'équipe. * Je soupçonne que ce n'est pas le cas.C'est "son code" que ce novice a eu le culot de toucher.Je soupçonne que * personne * ne touche son code parce que (a) il est totalement illisible mais semble fonctionner comme par magie et (b) le gars est si sensible à propos de "son code" que quiconque ose le toucher reçoit une conférence.
@DavidHammen: Collègue le plus toxique jamais.Cela me rappelle un collègue senior qui était totalement contre les révisions de code parce qu'il ne voulait pas que quiconque examine * son * code ...
Bien que je sois principalement d'accord avec la réponse, je ne suis pas d'accord avec la justification de _ "Selon le développeur senior, son style de codage a du sens pour l'équipe." _ (1) Le code de chacun a du sens pour lui-même.Vous devriez vérifier les opinions des ** autres **.(2) Une personne âgée peut appliquer des normes de codage en se basant sur le fait qu'elle est une personne âgée, peu importe la norme qu'elle établit.Le fait que le développeur principal engage OP à un niveau _personnel_ ("pourquoi ** vous ** faites-vous cela?" Par opposition à "la norme de codage est [telle ou telle]") suggère que le développeur principal tire les choses,plutôt que [..]
[..] suivant une ligne directrice établie qui est définie objectivement.S'il y a une telle directive établie, il devrait se référer à la directive au lieu d'être offensé par les actions d'OP, en faisant des déclarations exagérées de «100 ans de maintenabilité», en menaçant de supprimer l'accès d'OP au code ou en affirmant avec arrogance que _ son_ code est(sans équivoque) de ne pas être touché.Si la citation du développeur principal est de quelque manière exacte que ce soit, il y a un énorme problème avec l'excès de confiance du développeur principal et la prévention proactive de tout ce qui met en évidence une erreur honnête (ou une solution imparfaite) de sa part.
Quiconque dit «c'est mon code ... ne touchez pas à mon code» perd immédiatement presque toute crédibilité en ce qui concerne les compétences en communication et le travail en équipe.Même s'il a raison sur sa façon d'être meilleur, c'est à peu près la pire façon de l'exprimer.Évidemment, je ne connais pas tous les détails, et peut-être qu'il passait juste une mauvaise journée, mais une interaction toxique avec un développeur senior est une motivation suffisante pour commencer à peaufiner votre CV dans de nombreux scénarios.
Stephan Branczyk
2017-11-13 08:17:56 UTC
view on stackexchange narkive permalink

Vous avez déjà annulé les modifications. Alors laissez tomber.

Cela étant dit, la prochaine fois que cela se produira. Assurez-vous qu'il n'y a pas de marge de manœuvre avec votre interprétation des conventions de codage. Parce que, si vous allez avoir une bataille avec quelqu'un, assurez-vous de choisir une bataille que vous avez 100% de chances de gagner.

C'est important surtout si vous n'avez pas autant de capital social gestion comme cette personne l'a déjà.

Aussi, assurez-vous d'ajouter des tests unitaires avant de modifier trop de son code. Si vous introduisez des bogues dans son code, vous n'en entendrez jamais la fin. Et quand vous trouvez quelque chose de lui qui vaut la peine de changer. Ensuite, allez-y, mais soyez prudent et suivez les conventions officielles (et si ce n’est pas le cas, les conventions officielles ne traitent pas un problème particulier, suivez au moins les conventions Code Complete).

S'il se plaint à vous, alors vous pouvez simplement lui dire de se battre pour changer les conventions du code, et qu'une fois qu'il aura reçu l'approbation des nouvelles conventions de codage qu'il a à l'esprit, vous serez heureux de les examiner les mettre en œuvre, mais pas avant.

De plus, vous devriez probablement demander à la direction d'organiser des révisions hebdomadaires du code. Après tout, si vous avez l'occasion de discuter des décisions de codage lors des révisions de code. Cela vous donnera un moyen plus sûr et moins conflictuel de comprendre et / ou de contester les mauvaises habitudes de vos pairs.

+ 20zillions pour mentionner les tests unitaires.; D Cela rendra toute modification extrêmement sûre à mettre en œuvre!
@akaioi J'irais plus loin.Ne touchez pas le code sauf s'il est nécessaire de corriger un test unitaire qui a échoué.Ne réparez pas ce qui n'est pas cassé.
@emory, Je ne suis pas d'accord.
@emory toute la communauté [codereview.se] n'est pas d'accord avec cette affirmation.
@Mat'sMug, vous ne parvenez pas à écrire un seul test unitaire défaillant, mais vous voulez toujours vous mêler du code.Soit le code est parfait tel quel, soit vous ne le comprenez pas vraiment.Continuez à écrire des tests unitaires jusqu'à ce que vous trouviez un échec, puis refactorisez.
@emory no.Les tests unitaires couvrent si le code fait ce qu'il doit faire - pas s'il est implémenté de manière lisible.Et si vos tests transforment les détails de l'implémentation en spécifications, alors vos tests transforment la base de code entière dans le ciment.
@Mat'sMug pourquoi voudriez-vous lire le code autrement que (1) corriger un bogue ou (2) ajouter une nouvelle fonctionnalité.si vous corrigez un bogue, vous devriez commencer par écrire ce test unitaire qui a échoué.si vous ajoutez une nouvelle fonctionnalité, l'absence de cette fonctionnalité est un échec du test unitaire.si vous lisez le code pour le plaisir, arrêtez-vous et faites du vrai travail.
@emory - l'OP essayait de corriger un bogue.Le code était mal écrit et avait besoin d'être refactorisé pour suivre et ce n'est qu'alors que le bogue a été trouvé ailleurs (quelques lignes sous la partie refactorisée).C'est absolument du code que j'aurais besoin de refactoriser juste pour le suivre, et lorsqu'ils sont confrontés au développeur "senior", leur attitude incite à leur rappeler que je n'aurais pas corrigé un bug s'ils n'en avaient pas laissé un làn'aurait pas eu à refactoriser s'il avait respecté les normes du corp.Le seul "out" que je leur donnerais est si cette section de la base de code était antérieure à celles-ci (ce qu'elle pourrait bien faire).
Jasper
2017-11-13 19:54:26 UTC
view on stackexchange narkive permalink

Il se passe beaucoup de choses

Il y a pas mal de choses qui se passent ici. Beaucoup d’entre eux ont été abordés et je vais les mentionner brièvement ainsi que ma vision de ce que vous devriez ou ne devriez pas faire à leur sujet. Cependant, il y a un point que je n'ai pas encore vraiment vu abordé et que je considère comme le plus gros problème et je vais l'aborder plus en détail.

Bugs Corrections de style &

Vous avez corrigé le problème tout en changeant en même temps le code.

À mon avis, ce n'est pas un gros problème, mais il est généralement préférable de garder des choses séparées dans des commits séparés. Cela aurait également eu pour effet de séparer le conflit du correctif de bogue ici.

Vues différentes

Vous n'êtes pas d'accord sur la version qui suit le mieux les conventions, est plus lisible et est plus maintenable.

S'il est votre aîné, il serait peut-être bon de suivre son exemple à ce sujet. Sinon, il pourrait être bon que quelqu'un d'autre de l'entreprise examine le code avec vous deux, en le regardant sous ces trois perspectives.

Code difficile

Le le code était difficile à comprendre au début.

J'ai trouvé utile de poser des questions sur le code dans de telles situations, surtout si vous savez qui a écrit le code (et / ou le code a été écrit récemment). Poser des questions peut à la fois vous amener à mieux comprendre le code et aider l'autre personne à comprendre pourquoi le code était difficile à comprendre au départ. Cela évoque souvent des moyens de rendre le code plus clair tout seul, ce que vous pouvez ensuite discuter avant de les implémenter.

L'attaque

L'autre personne devient assez agressive en suggérant que vous doivent se séparer et qu'ils s'adressent à votre responsable pour que vous n'ayez pas accès à certains codes.

Tel qu'écrit, c'est assez sérieux. Cela dépend un peu de la façon dont la différence entre les choses réelles qu'il a dites et la façon dont vous l'avez paraphrasé ici oscille, mais purement par la façon dont vous l'avez écrite, cela devrait être une raison à elle seule de parler à votre responsable. Si vous le faites, ne parlez pas du code, mais de son attitude envers vous où il semble envisager de vous menacer.

Son code

Il ne veut pas que vous modifiiez son code.

À mon avis, c'est le plus gros problème. C'est une attitude assez toxique et je pense que cela touche au cœur du problème. Les programmeurs amateurs sont souvent très protecteurs de leur code et parfois cela peut être vu avec des programmeurs professionnels qui ont également travaillé sur le code par eux-mêmes. Cependant, il n'a sa place dans aucun cadre professionnel et est extrêmement toxique lorsque vous êtes responsable du code en équipe.

En fin de compte, le problème est que le code n'est pas le sien. Le code appartient à l'entreprise ou peut-être à l'équipe, mais ce n'est pas le sien. Au lieu de cela, c'est du code qu'il a écrit. Je pense qu'il est important de ne pas l'appeler comme son code, mais comme un code qu'il a écrit. Sans dire que ce n'est pas son code ou sans le corriger quand il dit que c'est son code, il peut être avantageux de s'y référer systématiquement comme du code qu'il a écrit vous-même. Cela vaut à la fois pour le moment où vous discutez de la situation avec lui, ainsi que pour discuter de la situation avec d'autres membres de l'équipe ou un manager.

Tout d'abord, je dirais que je laisserais cet incident soyez ce que c'est pour le moment. Cependant, je ne ferais pas non plus tout mon possible pour éviter de toucher au code qu'il a écrit à l'avenir. On dirait que ça va être une chose qui va revenir et marcher sur des œufs toute la journée ne va pas aider personne.

En supposant que vous faites partie d'une équipe avec plus de membres que vous deux, la première chose à faire est de parler du problème aux autres membres de l'équipe. Demandez-leur s'ils ont vécu le même comportement et comment ils l'ont géré ou le feraient. Vos collègues sont une ressource qu'il ne faut pas sous-estimer. S'il n'y a pas d'autres membres dans votre équipe, vous pouvez à la place demander à d'autres collègues qui ont eu à travailler avec cette personne dans le passé.

Ensuite, si ce programmeur s'avère surprotecteur du code qu'il a écrit à une autre occasion, essayez d'appliquer les suggestions de vos collègues. Au-delà de cela, vous pouvez également lui demander s'il est contrarié parce que vous avez changé le code qu'il a écrit ou que c'est qu'il pense que le changement affecte négativement le code. Ce sont deux problèmes complètement distincts et il est important de lui faire savoir qu'ils le sont.

Après ce point, il semble qu'il serait temps de faire remonter le problème. Parlez à votre chef d'équipe ou à votre responsable (selon ce qui est le plus approprié) et expliquez-leur que cette personne semble avoir du mal à ce que vous touchiez le code qu'elle a écrit. Bien que vous soyez ouvert à la discussion sur la qualité de tout code (ce que vous devriez être), il semble que cela semble être le fait que cette personne souhaite que le code qu'il a écrit ne soit pas touché (par vous - si c'est ce que vous pensez est). Expliquez comment cela répartit à tort la propriété, la responsabilité et la compréhension du code et comment cela nuit au produit et augmente la façon dont l'entreprise s'appuie sur des personnes spécifiques. (Bien sûr, une telle explication ne devrait pas avoir besoin d'être aussi détaillée quand on parle à un chef d'équipe que lorsqu'on parle à un manager.)

En conclusion

Donc, essentiellement, Je pense que le plus important est de séparer les différents problèmes et de les aborder individuellement. Cela devrait également rendre beaucoup plus facile de gérer chacun d'eux, car vous savez maintenant ce qui se passe.

+1 pour le code Hobbyist - de nombreux codeurs plus anciens viennent de cette école Hobbyist / RockStar de "ce ne sont que d'autres personnes qui font des bugs" et il faut beaucoup d'auto-réflexion et d'expérience pour comprendre pourquoi nous avons tous besoin des autres aspects du logicielingénierie comme les tests unitaires et la lisibilité.
J'apprécie de résoudre le problème comme vous l'avez fait.J'utilise généralement une technique de Martin Fowler et je refactore le code au fur et à mesure pour me donner un meilleur sens ou le simplifier.Ainsi, les changements de style et les corrections de bogues ainsi que le code difficile sont tous traités par celui-ci.C'est génial lorsque vous avez des tests unitaires pour étayer vos hypothèses.Mais fonctionne également lorsque vous effectuez des tests manuels tout en recherchant des bogues.Aussi lorsque les programmeurs d'origine ne sont pas disponibles, ou lorsque les gens sont occupés et ne veulent pas ou n'ont pas le temps de discuter des détails avec vous. [..]
[..] Voici quelques références pour ceux d'entre vous intéressés par ceci: [lien] (https://martinfowler.com/distributedComputing/refactoring.pdf) ou son livre: Refactoring Improving the Design of Existing Code.
@Stankar0x Lecture intéressante (bien qu'un peu datée).Je ne suis pas tout à fait sûr que ce soit ce que vous sous-entendez, mais sous la rubrique "Bogues et corrections de style", je n'ai jamais voulu dire que vous ne devriez pas faire ça.Je voulais juste dire qu'il serait peut-être préférable de faire refactor-commit-refactor-commit-fix-commit, au lieu de refactor-refactor-fix-commit.Je sais que je suis un peu extrême lorsqu'il s'agit de séparer différentes choses dans différents commits, mais ce que je disais, c'est que si le correctif était quelques lignes en dessous de la refactorisation, cela aurait pu aider à désamorcer le problème.un peu s'il s'agissait de commits séparés.
akaioi
2017-11-13 12:29:13 UTC
view on stackexchange narkive permalink

J'ai vu un certain nombre de réponses disant "Laissez-le aller". Je ne peux pas être d'accord avec cela, car le problème va se poser encore et encore.

Une équipe a besoin de normes, en particulier pour éviter de tels arguments. Je dirais de parler à nouveau à votre collègue, une fois que les esprits se sont un peu calmés. Demandez-lui de passer en revue les normes de codage avec vous et déterminez ensemble - si possible - comment vous pensez que le code devrait être organisé. Si vous arrivez à un accord, coolio. Si ce n'est pas le cas, reconnaissez sans rancune que vous n'êtes tout simplement pas sur la même page, et demandez au responsable de vous aider à résoudre le problème.

Vous avez supprimé votre exemple spécifique (que j'ai trouvé dommage, il offre un peu de contexte), mais laissez-moi juste ajouter une chose ... Cette partie potentiellement délicate (incrémenter le nombre de modules d'index pour revenir à 0) devrait être compréhensible pour J Random Programmer, mais cela ne ferait pas de mal de tomber dans un quickie commentaire en haut de la ligne comme rappel ...; D

Je conviens que l'exemple spécifique a été utile et qu'il est lié au modulo: parce qu'il n'a pas rendu le calcul de l'indice plus facile à lire, il a changé le calcul de l'indice.C'était oldindex + 1> = count?0: oldIndex +1;new is oldIndex +1% count.oldIndex valeur 4 et nombre de 3, ancien = 5> = 3 résultat 0. Nouveau = 5% 3 résultat 2. Peut-être que cela ne se produit pas, encore ... le code a à la fois la syntaxe et la sémantique.La modification de la sémantique affecte la lisibilité - elle change le concept, même si cela ne change pas le résultat.La correction d'une erreur de limite dans une boucle for ne change pas l'intention, la réécriture avec LINQ pourrait le faire.
IMO dans ce cas, le modulo a changé non seulement la valeur calculée, mais le concept de ce qui se passait.Désormais, oldIndex est un index enroulable ou circulaire, où 0, 10 et 2,145,690 sont tous identiques, valeur également valide pour un nombre de 10.
Flummox - don't be evil SE
2017-11-13 19:14:29 UTC
view on stackexchange narkive permalink

Je ne pense pas que vous puissiez laisser tomber cela: votre collègue est très protecteur du code qu'il a écrit. Ainsi, chaque fois que vous changez un morceau de code qu'il a écrit et qu'il n'a pas de bogue, il est très susceptible de venir vous en "parler".

Et votre collègue essaie de vous intimider, ne vous y trompez pas.

Tout d'abord , le code sur lequel vous travaillez tous les deux n'est ni le sien ni le vôtre. Il appartient à celui qui vous paie.

Deuxièmement , vous ne devriez pas faire ce qu'il dit que vous devriez faire, à moins qu'il ne soit votre patron, ce qu'il n'est pas. Vous devez faire ce que votre employeur veut que vous fassiez.

Troisièmement , je suis d'accord avec vous pour dire que vous devriez laisser les choses mieux que ce que vous avez trouvé, donc rendre le code plus lisible est bonne chose.


Donc, vous ne voulez pas vous compliquer la vie pour 3 lignes de code. Bien sur vous! Mais qu'allez-vous faire la prochaine fois que cela se produira?

Je suggère d'impliquer votre chef d'équipe / manager la prochaine fois que cela se produira. Voir les points, un, deux et trois.

Bien que tous soient des points valables, cette situation m'est arrivée et je peux vous conseiller d'éviter les conflits et la mise à l'échelle.Les gens ne sont pas logiques, le type senior peut tomber est comme une insulte "votre code est nul, je vais tout changer d'une manière qui vous rendra pathétique" ouais les gens peuvent être aussi sensibles.La direction est toujours pleine de problèmes et peut penser "oh mon Dieu maintenant j'ai besoin de perdre mon temps à résoudre des conflits entre deux grands enfants, et pourquoi les nouveaux gars perdent du temps à réparer le code de travail, peu importe si c'est moche".Bien sûr, cela dépend beaucoup de vos collègues.Si je suis la personne âgée, je m'en fiche.
Les conflits entre les membres de l'équipe sont le moyen le plus rapide de rendre votre vie misérable
@jean, convient que les conflits entre les membres de l'équipe sont misérables, mais le collègue ici pourrait commencer une telle situation.Je pense que le mieux est de résoudre cette situation en en faisant le problème du chef d'équipe, c'est son équipe.
IMil
2017-11-13 17:55:35 UTC
view on stackexchange narkive permalink

Bien que votre homologue "senior" ait réagi de manière excessive, vous devriez également envisager la possibilité qu'il ait eu raison d'une certaine manière.

Malheureusement, les modifications ont supprimé le code lui-même: c'est peut-être généralement mieux pour la plupart des utilisateurs non informatiques, mais dans ce cas, une information importante a été perdue.

À mon avis, vous avez amélioré la lisibilité du code par la plupart des métriques formelles: les conditions sont organisées de manière plus logique, il y a des accolades et des trucs. Cependant, votre introduction de l'opérateur % (reste entier) est une astuce intelligente qui déroutera 90% des développeurs juniors, et apparemment aussi certains seniors. Maintenant, le code trop verbeux est mauvais, les contrôles redondants sont mauvais, mais les astuces intelligentes sont tout simplement horribles, à moins que vous ne soyez sûr que tous les développeurs sont au moins aussi intelligents que vous. Et vous avez déjà la preuve qu'ils ne le sont pas.

De plus, bien que les documents de votre entreprise indiquent que vous devez "corriger le code qui n'est pas écrit avec ce style", il serait probablement préférable de mentionner de tels changements à l’auteur original, s’il ou elle est disponible. Un message rapide du type "Ecoutez, j'ai eu des problèmes pour déboguer ce code, ne pensez-vous pas qu'il est plus lisible de cette façon?" aurait pu vous éviter à tous les deux l'embarras.

+1 pour avoir demandé une contribution avant d'effectuer le changement.Cela peut déjà désamorcer ce genre de situations avant qu'elles ne se produisent.La plupart des gens avec un sens aussi fort de la propriété du code accepteront les changements s'ils peuvent laisser leur marque ou le faire ensemble.
Une astuce n'est intelligente que si elle fonctionne.Dans ce cas, l'utilisation de% au lieu du conditionnel modifie le comportement.Le code résultant peut être incorrect.Un code correct et délicat est toujours meilleur qu'un code incorrect "clair".Bien sûr, avec soin, vous pouvez obtenir un code clair et correct.
@Brandin IMHO il n'y avait pas de changement de comportement.Le code original disait essentiellement: (si x + 1> = longueur alors 0 sinon x + 1).Le truc intelligent était de le réécrire comme ((x + 1)% de longueur).C'est exactement la même chose.La principale différence est que le Cleaver Trick n'est pas évident.
Bryan Goggin
2017-11-12 22:35:01 UTC
view on stackexchange narkive permalink

Lorsque vous êtes nouveau, c'est généralement une bonne idée de prendre le temps d'observer la dynamique et de vous faire une idée de l'équipe, etc. avant de prendre sur vous de faire de grands changements. Une bonne règle de base est "Si ce n'est pas cassé, ne le réparez pas", ou un corollaire à cela, "S'il était cassé, quelqu'un l'aurait déjà réparé." Si le code en question était un gros problème, il aurait probablement (ou du moins aurait dû être corrigé maintenant. Il est possible que certains codes que vous rencontrez à ce travail doivent être corrigés, mais attendez vous êtes plus familier avec le système du groupe avant de décider si un tel code est éligible.

Malgré les efforts déployés pour développer des normes universelles de codage / documentation, CHAQUE LIEU DE TRAVAIL AURA LEURS PROPRES NORMES et il faut du temps pour déduire de quoi il s'agit exactement.

Concernant les ** CAPS ** ... Les normes ne sont manifestement pas des normes si elles doivent être «inférées» ... Ce sont des normes si elles sont clairement définies dans les documents de politique.Ce qui n'existe qu'en tant qu'ensemble de dynamiques et de conventions sociales, transmis par l'observation seule, n'est pas une norme.Aucun lieu de travail ne peut imposer cela, surtout pas avec l'agressivité du collègue en question ici.Je ne pense pas que le conseil de s'asseoir et de se taire soit bon;si l'employeur du PO a des normes formelles, il / elle a raison d'être déconcerté par une telle récompense contraire et catégorique pour l'adhésion (en supposant qu'ils lisent correctement)
Est-ce juste le double [crier] (https://newrepublic.com/article/117390/netiquette-capitalization-how-caps-became-code-yelling) ou le triple cri quand tout est MAJUSCULE ** ET GRASSE **?:)
* S'il était cassé, quelqu'un l'aurait déjà réparé. * - Vous n'avez clairement jamais travaillé sur le code hérité approprié.:)
@underscore_d Oh croyez-moi, je suis d'accord avec chaque mot que vous avez dit.Mais en pratique, je pense que nous savons tous les deux à quel point certaines «normes: peuvent être floues.
@cale_b Non, c'était plus pour mettre l'accent.Voir d'autres réponses où les titres sont en gras ou en majuscules.Je faisais juste cela au milieu d'une phrase pour souligner un point principal.
Danikov
2017-11-13 17:22:05 UTC
view on stackexchange narkive permalink

Vous pourriez laisser passer cet incident, mais vous ne devriez pas avoir tort. Il vous suffit de choisir vos batailles.

Votre mentalité est absolument correcte. Chaque fois que nous revisitons l'ancien code, s'il n'est pas facile à maintenir, nous devons d'abord comprendre. Une fois que cette compréhension a été réalisée, si nous ne documentons pas ou ne facilitons pas la voie vers cette compréhension, nous perdons le temps d'autres mainteneurs sur la route, tout comme le programmeur d'origine vous a fait baisser ce coût. C'est donc le devoir de tout programmeur digne de ce nom de documenter ou d'améliorer le code au fur et à mesure (ce dernier est moins risqué lorsque vous avez une suite de tests robuste et exhaustive qui garantit que les refacteurs et les améliorations ne brisent pas la fonctionnalité). Laisser des commentaires n'est pas idéal, mais cela laisse l'impression que le code a besoin d'un peu d'amour à l'avenir.

Votre équipe adopte également la bonne approche des conventions de codage. Les conventions ne sont pas des règles, il doit donc y avoir une certaine marge de manœuvre pour les enfreindre lorsqu'il est logique de le faire. Mais ils représentent un idéal qui n'a peut-être pas toujours été atteint et il est plus pratique d'appliquer des conventions de code sur du code nouveau et mis à jour plutôt que de le refactoriser de manière exhaustive. Dans un projet idéal, le code ne devrait jamais ressembler à un individu spécifique qui l'a écrit. Cela permet à tous les développeurs de vérifier leur ego à la porte et de traiter le code comme le code de l'équipe, se soucier de la qualité du code plutôt que de qui a écrit quoi.

Ceci nous amène à votre collègue. Leur comportement n'est pas inhabituel comme vous pourriez le penser, car les programmeurs ont tendance à ressentir de la fierté et à s'approprier leur code (ou cherchent à blâmer les autres, parfois, uniquement pour se voir dans l'histoire) et peuvent développer leur ego malgré les efforts pour résister. . D'autres ne résistent pas du tout. "Mon code" est une mauvaise attitude à avoir, tout le code doit appartenir à l'équipe. Il y a une incohérence entre son affirmation selon laquelle il a codé des choses pour être compréhensibles par l'équipe si cela contrevient aux directives de codage de l'équipe. Il dit clairement que c'est codé pour être compréhensible par lui d'abord, pas par l'équipe, et il est contrarié que vous ayez ruiné sa compréhension en ayant l'audace de changer les choses (tout bon code doit être écrit pour être facile à maintenir et à supprimer, pas immortel).

Cela empire quand il prétend que vous ne pouvez jamais comprendre son code et menace d'utiliser son influence pour vous mettre hors de votre travail. Cela seul est extrêmement peu professionnel, mais en réponse à un peu de formatage, il est extrêmement démesuré.

Vous devez choisir vos batailles et je laisserais le côté formatage des choses aller. Si vous êtes nouveau dans l'équipe et que quelqu'un dit que vous ne respectez pas la convention de code, tout ce que vous pouvez vraiment faire est de vous en remettre à son expérience et de vous suggérer de mettre à jour la documentation si elle est devenue trompeuse. Si cela cause des frictions, alors vous devez faire appel à votre patron car le fait de garder une norme sur papier et une autre dans la pratique (en particulier à la demande de développeurs individuels) est discordant et minant.

Cependant, je serais beaucoup plus susceptible de me concentrer sur la menace qui vous est adressée. Si cela a été fait verbalement, vous n'avez pas de bonnes preuves à ce stade et vous n'avez pas de bonne option pour agir à ce stade, mais je serais très prudent avec lui à l'avenir et j'essaierais d'obtenir tout ce qu'il dit par écrit, par exemple. interagissez autant que possible par e-mail. S'il vous menace à nouveau par écrit, vous pouvez commencer à en parler à votre patron. D'après les sons des choses, son ego est suffisamment fragile pour que vous ayez à nouveau des problèmes avec lui, tôt ou tard.

Là où vous pourriez rencontrer des problèmes, c'est que vous ne connaissez pas le profane de la terre. Si ce type est vraiment aussi mauvais qu'il le parait, il est possible que de larges pans de code aient été écrits par lui et soient devenus impossibles à maintenir par quiconque sauf lui. En tant que tel, il s'est effectivement rendu indésirable car l'entreprise ne peut se permettre de le perdre, ce qui a permis son mauvais comportement. Cela peut être bon à court et moyen terme pour la sécurité de l'emploi, mais à long terme, cela dégénère, contre-productif et peut ruiner votre réputation. N'aspirez pas à cela.

Dans cet esprit, veillez à ne pas mettre l'entreprise en position de choisir car elle mettra les intérêts de l'entreprise au premier plan. Traitez votre emploi actuel comme une expérience d'apprentissage pour faire face à des personnes difficiles. Passez du temps avec vos collègues et découvrez comment ils traitent ce type et ne laissez pas passer l'opportunité d'apprendre d'autres choses d'eux aussi. En attendant, gardez un œil sur les autres opportunités et soyez prêt à atterrir sur vos pieds au cas où il aurait de l'influence et vous expulserait pour une autre infraction perçue.

L.Dutch - Reinstate Monica
2017-11-12 21:09:43 UTC
view on stackexchange narkive permalink

La réponse à cette question dépend fortement de l'approche générale de «l'adhésion au processus» au sein de l'entreprise, et vous devriez déjà en avoir une idée.

J'ai travaillé dans une entreprise qui était, sur papier, certifié ISO9001, mais le PDG nous a toujours mis sur écoute avec des demandes de devis faites par des appels téléphoniques rapides et incomplets, même si nous avions un formulaire de demande où toutes les informations pouvaient être collectées. Vous pensez probablement que dans ce cas, l'application de la norme était une bataille perdue.

Vous avez deux alternatives:

  1. L'entreprise a une culture d'adhésion aux processus : vous avez raison de suivre la convention de codage de l'entreprise, et si la situation s'aggrave, indiquez simplement que vous avez suivi la norme.
  2. L'adhésion au processus est sur papier : oubliez le manuel, et suivez le "conseil" de ce senior.
L'adhésion au processus n'est que sur papier.Clé de la survie, ne prenez aucune décision unilatérale et assurez-vous de documenter votre adhésion aux processus de l'entreprise, en trois exemplaires si vous le pouvez.Si quelqu'un vérifie la productivité réelle, vous devrez peut-être prendre des risques et faire quelque chose de créatif, mais faites attention à ne pas vous démarquer.
Hotlush
2017-11-13 19:32:11 UTC
view on stackexchange narkive permalink

"La convention de code dit clairement que je peux changer le code pour le rendre dans l'esprit de la convention de code. La convention a été écrite par son responsable direct."

Je ne peux m'empêcher de penser que c'est Une directive terrible. Par tous les moyens, générer un ticket pour "améliorer" une section spécifique du code, ou le mettre à niveau, mais "le changer si vous n'aimez pas son apparence" est une recette pour le désastre. Comment contrôlez-vous ces modifications lorsqu'elles sont effectuées dans le cadre d'un autre correctif? Comment testez-vous les changements?

Timothy Truckle
2017-11-14 15:23:02 UTC
view on stackexchange narkive permalink

Pour autant que je vois votre problème avec le code de vos pairs, c'est la convention de code formelle dont vous avez une compréhension différente de celle du senior.

Il existe de nombreux outils qui formateront automatiquement le code pour vous par un ensemble de règles configurables. Ils ne laissent pas beaucoup de place pour interpréter les conventions.

Ainsi, lors d'une réunion d'équipe régulière (une scrum-rétrospective de préférence), vous pouvez faire référence à votre discussion avec le senior et vous dire que vous vous sentez mécontent de la situation, puis suggérez que votre équipe (ou au moins vous) commence en utilisant un tel formateur automatique et nommez le senior pour configurer l'ensemble de règles.

La prochaine fois que vous changez le code des seniors (pour corriger un bug), le reformatage est effectué par un outil qu'il a configuré. Je suis curieux de savoir comment il peut vous blâmer alors ...



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...