Question:
Comment dois-je réagir lorsqu'un collègue dit que sa méthode de 3000 lignes est optimisée? Dois-je le signaler à mon patron?
Angel Q
2019-02-08 21:14:26 UTC
view on stackexchange narkive permalink

J'ai un collègue qui a dit que sa méthode de 3000 lignes était la plus optimisée possible. Comment réagir professionnellement à cela?

Dois-je communiquer cela au patron, qui ne connaît rien en programmation?

Notez que nous sommes une petite équipe de seulement trois programmeurs qui sont au même niveau et chacun a sa propre partie du projet que nous gérons et codons nous-mêmes comme nous le voulons, tandis que ce morceau de code fait ce que le patron veut qu'il fasse.

  • Mon La plus grande préoccupation ici est que mon collègue pourrait mettre fin à la relation avec l'entreprise à un moment donné et que je devrai m'occuper de cette partie du projet sur lequel il travaillait. Comment diable puis-je lire une méthode de 3000 lignes?

Ma première pensée sera de recommencer à zéro et comme je l'ai déjà fait avec mon projet actuel, en gardant à l'esprit que "le patron" ne comprend rien à la programmation et il se soucie seulement que le programme fonctionne et le temps qu'il nous faut pour le faire fonctionner. Je suis à peu près sûr qu'il deviendra au moins un peu fou.

  • J'avais vu la méthode, elle fait beaucoup de choses (beaucoup) et elle a un sens de bloc conditionnel (gros) que s'il appelle la méthode avec le paramètre A = 1, le premier bloc est exécuté et les autres ignorés et ainsi de suite ... Je lui ai dit qu'il pouvait diviser ces blocs sur différentes méthodes afin qu'il soit facile de lire et de comprendre en sautant que il verrait les avantages de cela et le ferait avec le reste de la méthode gigantesque, mais je ne pense pas qu'il en voit les avantages. Il vient de dire qu'il a fait "quelque chose" comme ça parce que chaque bloc conditionnel est à l'intérieur d'une région C #.

NOTES DES COMMENTAIRES:

  • Comme mon collègue a dit que c'est une méthode critique car elle effectue tous les calculs d'une partie particulière du programme

  • Le langage utilisé pour la programmation est C #.

  • La vitesse du code n'est pas pertinente ici.

  • Les révisions de code n'existent pas ici. Comme je l'ai dit, chacun de nous travaille seul et tant que tout fonctionne, personne ne se soucie du comment cela fonctionne.

  • Supposons que chaque ligne de ces 3000 lignes provient du code réel et non d'espaces ou de commentaires.

Optimisé et «suit les meilleures pratiques» sont des choses différentes, sémantiquement, il pourrait être correct.
Comment pouvez-vous démontrer spécifiquement qu'il n'est * pas * optimisé?
Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (https://chat.stackexchange.com/rooms/89461/discussion-on-question-by-angel-humberto-how-should-i-react-when-a-co-travailleur-dire).
Avez-vous une métrique de code peut-être le moment idéal pour l'introduire ... au moins cela ferait-elle penser aux gens pourquoi les métriques ont telle ou telle valeur ... Changer l'opinion des gens est difficile et conflictuel ...
Je proposerais à l'équipe et au patron de parler de la maintenabilité du code.S'il n'y a pas de culture autour de cela, il sera difficile de demander des changements et vous feriez mieux de vous occuper de votre propre entreprise.Vous devez également comprendre que vous devez vous tenir à l'écart des allégations telles que «ne sait rien».Idéalement, vous proposez un atelier / discussion sur le code propre et les autres vous demandent de l'aide.
Cela pourrait être un problème intéressant à poser sur [softwareengineering.se] (mais demandé de telle sorte que ce ne soit pas un doublon, peut-être quelque chose du genre "est-il possible qu'une méthode de 3000 lignes soit optimale?").
quel est votre processus pour gérer la dette technique
Cette question pourrait être reformulée comme suit: «que dois-je faire quand un collègue a terminé une tâche d’une manière que notre chef juge acceptable, mais je ne le ferais pas si j’étais le chef.Si je suis chargé d'un problème connexe, je pense que je devrai refaire le travail avant de commencer le mien ».
À quel point la méthode est-elle tabulée?Une fonction où vous avez un écran entier d'espaces, sauf si vous faites défiler (ce que j'ai eu), est très différente d'une fonction où chaque ligne est non conditionnelle.
`J'ai un collègue qui a dit que sa méthode de 3000 lignes est la plus optimisée possible.Comment puis-je réagir professionnellement à cela? »- Vraiment?
Comment est cette programmation par paire étiquetée?Avez-vous programmé ces 3000 lignes avec lui?Vous n'êtes peut-être pas en train de programmer en binôme mais en train de réviser le code?Mais vous dites que la révision du code n'existe pas.Je suis confus
Si la vitesse n'est pas pertinente, pour quelle métrique est-elle optimisée?
@thomas étant donné que (1) c'est la seule balise de la question et (2) S.E.demandas au moins une balise, je pense que le marquage a été fait juste pour publier le Q sans se soucier du système.La communauté (vous ou moi ou toute personne inscrite) peut modifier et renommer la question.Que suggérez-vous?
J'ai récemment trouvé une méthode 2.5kloc dans notre base de code et je l'ai fièrement présentée à un collègue.Contesté par ma découverte, il a trouvé une méthode plus courte mais avec 19 niveaux d'indentation.Nous en avons bien ri et avons continué.
Demandez à votre patron ce qu'il pense de la mise en œuvre de ce guide par votre collègue: https://github.com/Droogans/unmaintainable-code: p
J'ai travaillé avec un développeur qui venait d'une formation en mathématiques;et en ce qui le concernait, plus de fonctions signifiait plus de routes possibles à travers le code - donc plus complexes.En conséquence, il avait tendance à écrire des fonctions très longues.Sa logique était solide, pour ce qu'il y en avait, mais elle était aussi incomplète.
"• Les revues de code n'existent pas ici" - qu'en est-il des revues de conception?Documentation de conception?Test de l'unité?Nan?Qu'allez-vous faire lorsque vous commencerez à travailler avec des développeurs de logiciels plutôt qu'avec des cow-boys?À moins d'y rester jusqu'à la retraite, vous travaillerez tôt ou tard avec des professionnels.Plus tôt serait mieux.
Dix-neuf réponses:
Ethan The Brave
2019-02-08 21:32:21 UTC
view on stackexchange narkive permalink

Si cela vous inquiète, vous devriez lire le code et proposer des suggestions (cela semble être le moment idéal pour pousser à la révision du code!). Il peut y avoir 3000 lignes en cas de besoin. Décider que juste parce qu'il y a 3000 lignes signifie que c'est faux ou mauvais est arbitraire.

[Modifié en fonction des mises à jour]

Vous dites que la vitesse du code n'est pas pertinente. À ce stade, il semble que ce soit juste du code laid. Le meilleur plan d'action puisque vous leur avez déjà donné des suggestions (puisque vous n'êtes pas leur superviseur, etc.) serait probablement de simplement l'accepter et de passer à autre chose. Si jamais vous avez besoin de travailler sur leur code, il semble qu'il soit suffisamment divisé pour qu'il puisse être facilement divisé en plusieurs fonctions, mais tel quel, cela fonctionne et vous n'aurez peut-être jamais besoin de le toucher.

ce sur quoi vos patrons veulent que vous travailliez et faites des suggestions et des améliorations là où vous pouvez les adapter. Si vous essayez de tout réparer mal, vous voyez tout d'un coup, vous vous stresserez sans raison.

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (https://chat.stackexchange.com/rooms/89499/discussion-on-answer-by-ethan-the-brave-how-should-i-react-when-a-collègue-dit).
Tout ce qui n'est pas familier peut paraître laid.Il peut aussi y avoir des raisons pour lesquelles il est tel qu'il est qui n'est pas connu.
+1 pour avoir finalement à passer à autre chose, mais je suggérerais d'abord un e-mail rapide de CYA disant que vous pensez personnellement que ce n'est pas un style de code maintenable, il devrait vraiment être divisé en plus petits morceaux, et vous êtes heureux d'aider à celatâche.De cette façon, si jamais cela touche le fan plus tard, vous pouvez souligner que vous avez essayé de faire changer les choses.
Je suis d'accord qu'il y a des cas où l'ancien code, même s'il est laid ou ne suit pas les bonnes pratiques, n'a pas besoin d'être refactorisé si les chances de devoir le modifier à nouveau sont très faibles, ou s'il y a d'autres priorités sur leliste.Cependant, il reste à considérer que cet employé continuera ** à écrire un nouveau code ** dans le même style monolithique, et c'est un problème qui doit être résolu et pas simplement ignoré.
Je suis d'accord avec la réponse, sauf que c'est oublier la responsabilité en tant que spécialiste du domaine professionnel.Si OP a été embauché comme plombier et qu'il y avait un tuyau rouillé, ils devraient en informer leur patron.En tant que programmeur, je pense que c'est le devoir d'OP en tant que professionnel d'informer le patron à ce sujet."_Cela fonctionne maintenant, mais [dès que le collègue est touché par un bus] (https://en.wikipedia.org/wiki/Bus_factor), il faudra très longtemps à quelqu'un d'autre pour apporter des modifications à cette partie._«Ensuite, c'est au patron de fixer les priorités.
Faire des suggestions sur son code ne crée-t-il pas essentiellement un processus de révision de code?
`mais tel quel, cela fonctionne et vous n'aurez peut-être jamais besoin de le toucher` -> pour supposer qu'il fait un ASS avec U et ME.C'est la base de la création de la [dette technique] (https://en.wikipedia.org/wiki/Technical_debt).Il _est très certainement_ devrait_ être signalé et tous ces codeurs travaillent _doit_ être revus par des pairs.Comme l'a souligné Schmitz, si ce type est renversé par un bus, ce spaghetti doit encore être entretenu.De plus, si vous ne nettoyez pas quelque chose comme ça immédiatement, plus tard, vous devrez lire ce que c'était prévu, quelque chose qu'un codeur devrait savoir lorsqu'il y travaille.
Une fonction de 3000 lignes n'est ** jamais ** nécessaire [lignes de code;il peut y avoir des cas légitimes de 3000 lignes de données].Cette prise de conscience n'est pas arbitraire;au contraire, c'est une vérité fondamentale et universelle avec les compilateurs modernes.C'est encore plus vrai dans des langages comme Java ou C # qui n'ont pas de limite d'unité de traduction C / C ++ et donc optimisent facilement les appels de fonctions dans différents fichiers.
@everyone C'est peut-être la première étape de la création d'un processus, mais si OP n'a pas de processus concret (ou si le patron doit développer ce processus), le collègue peut simplement hausser les épaules et passer à autre chose sans rien changer.
J'aime cette réponse car elle garde l'OP à la bonne taille.OP pourrait aller voir le boss avec des armes flamboyantes ... mais ce n'est probablement pas le bon moment pour cela.J'imagine que le manque de révision du code n'est pas le seul problème avec cet environnement.Le patron devra peut-être apprendre certaines choses à la dure, par exemple"Drat, la méthode de 3000 lignes a un autre bogue."
En réponse à de très nombreux commentaires - encore une fois, ma réponse est basée sur «puisque vous leur avez déjà donné des suggestions» et aussi «vous n'êtes pas leur superviseur».En faire plus en ce moment, ce serait sortir des limites de son travail.
Simon Richter
2019-02-08 22:03:41 UTC
view on stackexchange narkive permalink

Je me concentrerais sur le problème de la maintenabilité.

Selon les circonstances, une fonction de 1000 lignes qui fait une chose et qui est bien documentée peut être plus lisible et maintenable qu'une fonction de 20 lignes qui diffère chaque décision à une pile profonde de dix appels de fonctions utilitaires sur lesquelles chacune avait des cas spéciaux greffés au fil du temps au fur et à mesure que les exigences changeaient (diatribe étrangement spécifique, je sais).

ol>

  • Supprimez la nécessité pour les utilisateurs de la fonction de la comprendre complètement: il devrait y avoir une documentation qui traite la fonction comme une boîte noire et ne décrit que son comportement. Le code utilisateur ne peut s'appuyer sur rien qui n'est pas documenté dans cette spécification, ce qui doit être un point explicite dans les révisions de code pour les fonctions appelantes.

  • Automatiser la vérification de la fonction. Tous les cas d'utilisation actuels doivent exister en tant que tests unitaires, donc s'il devient nécessaire de modifier cette fonction, vous pouvez le faire rapidement avec la certitude que rien d'autre ne casse en conséquence.

  • La longueur d'une fonction est souvent en corrélation avec sa facilité de compréhension, mais ce n'est pas une règle absolue.

    Je ne suis vraiment pas d'accord pour dire que toute fonction de 1000 lignes sera plus claire et plus lisible que l'équivalent divisé en fonctions plus petites.Je trouve vraiment, vraiment improbable qu'une fonction 1000 n'ait pas de blocs de code dupliqués qui pourraient être extraits en fonctions.Je ne veux vraiment pas lire 1 000 lignes pour comprendre ce que fait une fonction.
    Une fonction de ligne 3k est effectivement non testable.Une fonction de ligne 1k l'est probablement aussi à moins qu'elle ne fasse littéralement UNE chose.Une suite de tests automatisés doit être présentée à un responsable non technique sur les mérites de l'augmentation de la stabilité de la production, ce qui réduit les temps d'arrêt et les plaintes des clients, ce qui libère du temps pour développer plus de fonctionnalités.Moins de temps d'arrêt, des clients plus satisfaits et un développement plus rapide de nouvelles fonctionnalités == plus d'argent.
    Il n'y a aucun moyen qu'une fonction de ligne 1k fasse une chose.
    @DaveG On dirait que vous n'avez pas encore rencontré l'indirection de 10 niveaux de profondeur répartie sur 50 fichiers alternatifs.Parfois, une fonction lisible et bien nommée de 1000 lignes peut évoquer un soupir de soulagement qu'elle n'a pas été trop lourde en indirection.Cela est particulièrement vrai lorsqu'il s'agit d'implémenter un flux de travail complexe en plusieurs étapes.(Cela ne veut pas dire qu'une abstraction minutieuse n'aurait pas été une alternative un peu meilleure.)
    Je pense que c'est une fausse dichotomie.Refactoriser une fonction de plus de 1000 lignes ne nécessite pas de vastes niveaux d'indirection.En outre, il n'y a vraiment aucun moyen qu'une fonction de plus de 1000 lignes ne puisse être raisonnablement divisée en au moins une poignée de fonctions plus petites qui encapsulent des sections cohérentes de la plus grande.
    @Dancrumb Cela dépend entièrement de la fonction.Si c'est du code spaghetti, bien sûr.Mais s'il s'agit d'une machine à états, veuillez en faire une fonction de 1000 lignes, surtout si vous avez également des diagrammes pour elle.Nous pouvons tous lire cela et le maintenir.Mon horreur est "l'expert" en design-pattern de CS fraîchement de l'université qui veut diviser cela en une douzaine de fichiers et de foncteurs interconnectés et Dieu sait quoi, juste parce que bon, des modèles de conception.Non Non Non Non.Non.Sûrement pas.
    @DaveG, unique instruction de commutateur gigantesque qui effectue la distribution d'événements.Oui, je suppose qu'il aurait pu être divisé en groupes d'événements connexes ou quelque chose du genre, mais plus de 250 blocs de code presque identiques de quatre lignes triés par ordre alphabétique par nom d'événement sont assez faciles à comprendre.
    @ajacian81 J'ai en fait vu 1k + de code qui a fait une chose.C'était un énorme changement.Dans les temps modernes, il serait très probablement géré de manière plus orientée objet, mais c'était dans les années 80.Je suis également entré dans plusieurs centaines de lignes de commutateur pour lire un fichier de configuration.
    @Dancrumb Simon ne dit ni n'implique qu'il y a une dichotomie.Il dit qu'insister dogmatiquement sur des fonctions courtes peut également conduire à un code médiocre.Que ce soit long ou court est la mauvaise question à se poser.La question à se poser est: "La fonction fournit-elle une bonne abstraction?"Et bien que cela ait une corrélation avec la longueur, cela est indépendant de la longueur.Utilisez la longueur comme une heuristique pour déclencher un examen plus attentif, plutôt que d'être dogmatique à ce sujet.
    Commentaire intéressant.Quelqu'un a-t-il un exemple de 1000 lignes de code dans une seule fonction qui ne pourrait pas être refactorisée en un code plus lisible et maintenable?Peut-être qu'il y en a, mais je ne peux penser à aucun besoin possible pour une fonction aussi horrible.Je viens de googler C # pour vérifier qu'il y avait des classes (comme je le pensais);ce n'est pas comme si vous étiez obligé d'utiliser des globaux pour compenser un langage horrible ... Peut-être que l'affiche originale pourrait trouver un ou deux exemples spécifiques de choses qui pourraient être refactorisées et partir de là?
    Je n'ai ** jamais ** vu une fonction de plus de 1000 lignes qui ne pourrait pas être améliorée en séparant les fonctionnalités.Il viole la plupart des normes de qualité de l'industrie.Dans les années 70, il y avait des justifications parce que les outils faisaient défaut.De nos jours, c'est juste une qualité de code épouvantable et le genre de dette technique qui tue les entreprises.
    @Mark La seule fois où j'ai vu une seule instruction de commutateur gigantesque est à partir de code généré, comme la sortie yacc.Dans ce cas, je n'ai jamais vraiment regardé le commutateur, j'ai juste modifié la grammaire.J'ai hérité d'un tas de code minable récemment et je me suis séparé, réécrit et dans certains cas jeté complètement d'énormes fonctions et classes, et dans tous les cas, le résultat est plus petit, plus propre, plus facile à utiliser.
    Une instruction de commutation de mille lignes ne fait rien sauf prendre une seule décision.Cela n'a rien à voir avec le problème des OP, qui est de 3000 lignes de code de travail réel, pas une instruction switch.
    Lors de la lecture / débogage du code de quelqu'un d'autre, je prendrai une seule méthode gigantesque sur [code yo-yo] (https://en.wikipedia.org/wiki/Yo-yo_problem) où je dois naviguer entre AbstractModulatorFactoryAdapters (probablementutilisé une seule fois dans la base de code) par jour;[cette pièce de Carmack] (http://number-none.com/blow/john_carmack_on_inlined_code.html) est également particulièrement éclairante.
    Le fait que cette réponse ait 30 votes positifs est préoccupant.
    L'indirection et la délégation @RoyTinker ne rendent les choses plus difficiles à comprendre que si vous avez besoin de comprendre tout leur fonctionnement.Appeler une fonction nommée `f ()` est BEAUCOUP plus difficile à lire que `delete_browser_history ()`, car il faut aller lire le contenu de `f ()`.Le but d'un tel découpage de code est d'éviter que le lecteur ait à réfléchir à son fonctionnement.
    @AdamBarnes alors votre problème est la dénomination de fonction stupide, l'équivalent serait que la fonction de 1000 lignes soit nommée "f".Sensiblement, vous divisez la fonction "deletePrivacyData" de 1000 lignes en petites fonctions, même s'il n'y a pas de duplication de code comme "deleteCookies", "deleteHistory", "deleteCachedData".
    @Darkwing, mon point est que ce n'est pas toujours possible.Je suis tout à fait d'accord que c'est généralement le cas, mais la question importante n'est pas "cette fonction est-elle trop longue?"mais "cette fonction est-elle maintenable?"La fonction à laquelle je pensais lorsque j'ai écrit ma réponse concerne les synchronisations de la chaîne DSP dans un circuit intégré fixe, elle est longue car la chaîne DSP est longue et chaque partie dépend de la précédente, donc je devrais passer beaucoup d'étatssi je voulais faire plusieurs fonctions.Je pourrais le diviser en créant une structure avec toutes mes variables locales et en parcourant une liste de fonctions pour la modifier, mais pourquoi?
    @SimonRichter Dans ce cas précis, je le modéliserais comme une chaîne.Vous construisez la chaîne avec un contexte et la liste des fonctions elle-même, puis exécutez la chaîne, qui appelle chaque fonction à son tour avec le contexte et les résultats de la fonction précédente.
    Dan
    2019-02-09 01:11:18 UTC
    view on stackexchange narkive permalink

    J'ai déjà travaillé sur du code hérité où l'intégralité du site Web est traitée dans un seul fichier d'environ 100 000 lignes de code. C'est vrai. Tout sur le site se fait dans un seul fichier, une seule fonction. Il est arrivé à un point où l'ajout ou la modification de quelque chose signifiait que vous faites défiler jusqu'en bas et que vous avez simplement modifié le tampon de sortie pour changer les choses. Comme si quelqu'un disait vouloir changer une phrase, nous faisons une regex pour rechercher la phrase et la remplaçons simplement par la nouvelle phrase.

    Nous sommes finalement arrivés au point où il est devenu tellement gonflé que seules quelques personnes étaient des "experts" dans la modification du tampon de sortie. Il a finalement été décidé de simplement jeter le fichier, et de refaire l'ensemble du site avec une approche moderne.

    Je pense que c'est ce qui va se passer ici. Maintenez la fonction 3k, et s'il y va, lancez simplement le code. C'est ce que je ferais, plutôt que de perdre du temps à essayer de convaincre quelqu'un que quelque chose est mieux. Cela fonctionne, c'est ce qu'est l'argument et cela pourrait être vrai. Sans un patron qui connaît le code ou qui possède de bonnes compétences générales, vous n'irez probablement pas loin en essayant de convaincre votre collègue égal de changer.

    Tout cela est vrai et c'est une excellente réponse.Cependant, vous POUVEZ l'expliquer au patron simplement, en quelques mots.J'ai indiqué comment dans ma réponse.
    Ouais vrai.Je veux dire que cela se résume à des compétences générales pour expliquer les dépenses en argent à un non-programmeur.Ne pas paraître offensant, mais sur la base du problème décrit par OP, je ne pense pas qu'il l'ait.Il est courant dans le monde des développeurs, cependant, que de nombreux développeurs ne disposent pas des compétences générales nécessaires pour expliquer les choses d'un programmeur à un non programmeur et de nouveau à un programmeur.Moi-même inclus.
    Il semble d'après son explication que la fonction est organisée en grands blocs conditionnels.J'imagine donc qu'il serait tout à fait possible de refactoriser cette méthode de 3000 lignes.
    Bien que votre suggestion puisse fonctionner, je ne suis pas d'accord pour travailler comme ça.Le fait que je doive passer une journée à regarder cette fonction pour résoudre un petit problème ou pour ajouter un autre bogue appelé "fonctionnalité" ferait saigner mes yeux.Merci d'avoir répondu
    C'est une bonne réponse.La seule chose de planification que l'OP pourrait faire maintenant est de proposer des cas de test pour cette énorme fonction.Ainsi, lorsque vient le temps de la jeter, il est possible de vérifier que la nouvelle version fait ce que fait l'ancienne version.
    (à part) "ajouter ou modifier quelque chose signifiait que vous faisiez défiler tout le chemin vers le bas et que vous modifiiez simplement le tampon de sortie pour changer les choses."- C'est souvent ainsi que fonctionne l'évolution biologique (au niveau «fonctionnel»).Ce code a évolué de lui-même, au lieu d'être `` conçu '' :)
    Puisque nous sommes sur SO, permettez-moi de m'opposer au "lancer et réécrire".Joel a déjà présenté un [argument convaincant pour la refactorisation,] (https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/) la raison étant que l'ancien codecontient beaucoup de connaissances spécialisées et détaillées qui devront être péniblement réapprises si et quand la fonctionnalité est recodée à partir de zéro.
    The Gilbert Arenas Dagger
    2019-02-09 04:10:37 UTC
    view on stackexchange narkive permalink

    Une méthode longue est certainement une odeur de code, mais elle n'indique pas de manière concluante que quelque chose ne va pas. En fait, je dirais que vous ne devriez pas séparer une méthode uniquement sur la longueur, c'est arbitraire. Par exemple, j'ai vu de longues méthodes pour des tâches ETL (Extract / Transform / Load) distinctes où la longueur est vraiment déterminée par la quantité de données.

    Ne le signalez pas au patron à ce stade. Trouvez une raison tangible pour laquelle la méthode peut être améliorée, puis communiquez-la au développeur de manière constructive.

    Dans ce cas, je peux parier que le code peut être divisé en une fonction plus simple qui serait facile à lire et à modifier
    @angelhumberto - Votre patron se fiche de ce sur quoi vous êtes prêt à parier.Si vous voulez le convaincre, vous devrez démontrer un problème spécifique (et «la fonction est trop longue» n'est pas un problème spécifique) et être en mesure d'expliquer comment les modifications proposées résoudront ce problème.
    @DaveSherohman «Je ne comprends pas cette fonction car elle est trop longue» est un problème spécifique.Malheureusement, c'est le même problème que j'ai eu en lisant James Joyce et non formulé comme un problème avec le code.
    gnasher729
    2019-02-09 00:57:48 UTC
    view on stackexchange narkive permalink

    Ne vous en faites pas. Ce n'est pas votre problème (pour le moment). C'est la responsabilité des gars de maintenir le code, pas le vôtre. Ne touchez pas. Si votre patron vous demande de le toucher, que ce soit maintenant ou plus tard, dites-lui pourquoi vous ne le ferez pas.

    Si votre collègue part, vous achetez un livre sur la refactorisation. C'est à ce moment que vous dites à votre patron que cette fonction n'est pas maintenable.

    Vous n'êtes pas sûr de cela, vous savez essentiellement quand et comment vous allez mourir et ne faites rien pour l'empêcher
    Certainement pas d'accord avec cela.Résoudre le problème maintenant pourrait coûter une semaine de travail.Par rapport à 1 an à partir de maintenant où le code a changé et des éléments y ont été ajoutés, le coût de refactorisation (combiné au coût d'essayer de se souvenir de ce que le code a fait) pourrait être beaucoup plus élevé.
    Johns-305
    2019-02-08 21:30:32 UTC
    view on stackexchange narkive permalink

    Comment puis-je réagir de manière professionnelle à cela?

    "Génial, merci!"

    Maintenant, si vous pensez que le code est sous-optimal, quel que soit le nombre de lignes , vous pouvez le tester sur le côté pour voir s'il répond à des exigences de performances. Cela vous donne des informations significatives et exploitables.

    Si vous pensez que le code suit de mauvaises pratiques, vous pouvez en parler lors de la révision du code.

    La revue de code n'existe pas
    @angelhumberto Ensuite, vous avez maintenant une raison de les démarrer.
    Je ne pense pas que cela fonctionnera comme je l'ai dit, nous sommes une petite équipe de seulement 3 développeurs qui travaillent sur leurs projets.Ce que je veux savoir, c'est quoi faire en sachant que le collègue fait des choses comme ça
    @angelhumberto Oui, mais veuillez lire les réponses.Un thème commun est que 3000 lignes ne sont pas en soi un problème.Vous devez identifier un problème réel avant de faire quoi que ce soit.
    La question se fait dans la descrip.Je connais le problème, que dois-je faire pour y remédier?Dois-je le dire à mon patron?
    user44108
    2019-02-08 21:29:30 UTC
    view on stackexchange narkive permalink

    Vous avez dit d'une part que chaque développeur est responsable de son propre code, et pourtant vous souhaitez signaler un de vos collègues à votre responsable pour ne pas travailler selon vos standards.

    Si le code fonctionne comme prévu, il n'y a rien à dire à ce sujet jusqu'à ce qu'il y ait un moment où c'est un problème ou qu'il y ait un moment où les normes de codage sont définies pour l'équipe dans son ensemble.

    Veuillez lire ma première modification pour comprendre pourquoi je me demande si je devrais ou ne devrais pas le signaler
    @angelhumberto: et si vous quittez l'entreprise avant votre collègue?YAGNI est une expression commerciale et signifie ne pas travailler avant d'en avoir besoin.Si et quand vous devez le reprendre, c'est assez tôt pour le reprendre.Jusque-là, vous n’avez rien à faire.
    William Jockusch
    2019-02-10 10:26:21 UTC
    view on stackexchange narkive permalink

    Demandez-lui d'écrire des tests pour prouver que cela fonctionne. Vérifiez la couverture des tests. S'il est inférieur à 100%, c'est un problème.

    Ensuite, au moins, si vous devez le maintenir un jour, vous pourrez faire des changements sans craindre de foirer quelque chose sans vous en rendre compte.

    Même cela peut être un écran de fumée, car de mauvais tests peuvent toucher du code qu'ils n'évaluent pas.
    Omar Martinez
    2019-02-09 01:41:46 UTC
    view on stackexchange narkive permalink

    Vous avez deux points ici:

    • Dans votre position actuelle, ce n'est pas votre problème , vous avez dit que votre patron a demandé à ce collègue de terminer le code rapide, donc il l'a fait, laissant derrière ces 3000 lignes avec beaucoup de dette technique , vous pouvez le mentionner à votre patron (il ne comprend pas la programmation, mais le concept de dette est quelque chose que tout le monde sait) expliquez simplement que pendant que le code fonctionne, si quelque chose se brise ou si le collègue qui l'écrit quitte l'entreprise, il lui faudra du temps pour comprendre ce qu'il a fait, il comprendra peut-être mais même s'il comprend cela, il dira que ce n'est pas un problème maintenant, car ce n'est pas un problème, du moins pas le vôtre, ce qui nous amène au point suivant.

    • Donc, le collègue quitte l'entreprise et est maintenant votre problème (vous mentionnez qu'il y a 3 développeurs, donc même dans ce cas cela ne pourrait pas être votre problème), eh bien, (je peux parler de mon expérience) ne le touchez pas sauf si c'est nécessaire, parlez à votre b Encore une fois, souvenez-vous de lui lors de la première discussion, mais ne commencez pas à refactoriser ce code tant que votre patron ne l'a pas approuvé ou que le s #! t n'a pas touché le ventilateur, car si vous commencez à refactoriser ce code, cela pourrait être facile mais il y a une forte probabilité qu'il vous faudra du temps pour que votre patron s'attende à se concentrer sur autre chose.

    Quelques points à prendre en considération, même si c'est une petite entreprise avec un patron qui ne Je ne comprends pas comment fonctionne le développement logiciel:

    • Comme le mentionne une autre réponse, bien que votre patron ne soit pas au courant du développement, il connaît les affaires (je l'espère), donc la meilleure façon de le faire comprendre pourquoi les revues de code, les tests unitaires et autres pratiques sont nécessaires, c'est de lui dire que ce sont des investissements, moins de bogues, moins de temps d'arrêt de production, etc.
    • Je ne sais pas qui est le senior de votre équipe, si est celui avec les 3000 lignes, vous pourriez avoir du mal à convaincre votre patron que ce qu'il fait n'est pas la meilleure approche. Cela s'applique si vous êtes celui qui a le moins d'expérience.
    • Vous voudrez peut-être parler avec votre collègue et essayer de comprendre pourquoi il a fait cela, il mentionne que c'est optimisé cela pourrait signifier que le code fonctionne, comme vous le dites, et que c'est rapide ( vous ne pensez peut-être pas que la vitesse est pertinente, mais pour les affaires, c'est parfois un gros problème) mais il sait qu'il a une dette technique et il prévoit de résoudre ce problème, il suffit de suivre les instructions de votre patron pour terminer aussi vite.
    cybernard
    2019-02-09 04:45:01 UTC
    view on stackexchange narkive permalink

    Je pense que le meilleur exemple de se faire heurter par un bus est peut-être le meilleur.

    J'irais voir votre patron et lui dirais: "J'ai des inquiétudes concernant la maintenabilité des codes, si l'employé est heurté par un bus ou autrement indisponible, il me faudra ## semaines pour le découvrir. Êtes-vous d'accord avec le fait que je ne sois pas disponible pour travailler sur un autre projet pendant ## semaines si ce projet nécessite une maintenance si une autre personne n'est pas disponible? "

    Laisser votre patron prendre la décision finale sur ce qui est le plus important pour ce projet "c'est fait" ou "il est maintenable"?

    Pour autant que nous sachions que le patron pourrait être yay, le client devra nous payer 2x plus parce que s'il veut que les modifications soient apportées, il devra payer pour cela.

    Ceci signifie que la chose la plus importante pour le patron est de savoir pour quoi le client va payer.

    Si mon patron ne comprenait pas la programmation, je doute que je leur dise essentiellement que «mon collègue fait très bien son travail, et il pourrait probablement reprendre mon projet assez facilement. Cependant, j'aurais beaucoup de mal si je devais faireson travail."
    J'aime la partie où vous avez dit "Laissez votre patron prendre la décision finale sur ce qui est le plus important pour ce projet" c'est fait "ou" c'est maintenable "?".Globalement bonne réponse merci pour le temps
    Anonymous Coward
    2019-02-09 01:25:20 UTC
    view on stackexchange narkive permalink

    Prévenir les problèmes coûte moins cher que d'attendre qu'ils surviennent et de les résoudre. Votre patron aime pas cher.

    Demandez à votre patron s'il s'attend à ce que votre code soit utilisé pendant une longue période et si des changements sont probables si les clients paient pour eux.

    Probablement Si vous obtenez un oui pour les deux, suggérez que vous aimeriez que le nouveau code que vous écrivez soit examiné par vos pairs. Cela ne leur prendra pas longtemps et le temps supplémentaire sera payé dix fois, car les erreurs sont beaucoup moins chères à corriger au fur et à mesure qu'elles sont détectées. Une erreur trouvée dans un code qui est frais dans l'esprit est plus facile à corriger qu'une erreur trouvée par le client avec les rapports d'erreurs moins qu'utiles habituels des clients. Assurez-lui que vous ne demanderez pas beaucoup de révision de code, peut-être une fois par semaine. S'il vous demande si vous n'êtes pas sûr de la qualité de votre code, assurez-lui que ce n'est pas du tout le cas. Mais 6 yeux ont une vision plus large que 2 et la révision du code est une pratique standard de l'industrie car ses avantages l'emportent de loin sur les coûts minimaux.

    S'il l'accepte, lorsque vos amis trouvent des erreurs dans votre code, assurez-vous de le mentionner à votre patron. Mentionnez combien de temps supplémentaire vous auriez dû passer à déboguer le problème si le code était entré en production. Ou la perte de confiance des clients. Mentionnez à quel point le travail de cette équipe améliore le produit même si vous travaillez sur différents projets.

    S'il passe à cette étape, il deviendra facilement la suivante: faire réviser le code de tout le monde.

    S'il n'est pas disposé à accepter que quelqu'un se porte volontaire pour faire réviser son code, il n'y a aucune chance que vous l'ameniez à vous laisser réviser le code de votre ami.

    Nice a répondu merci pour le temps que je prendrai en considération lors de la prise de décision finale
    JeffC
    2019-02-09 02:05:31 UTC
    view on stackexchange narkive permalink

    D'après ce que vous décrivez, vous avez une montagne à gravir et une équipe pour la remonter.

    Je ne pense pas que je parlerais spécifiquement de la méthode de la ligne 1k, je commencerais par apporter mettre en place les meilleures pratiques avec votre patron dans un 1: 1. Demandez-lui si l'équipe a des directives de codage ou des meilleures pratiques à suivre. En supposant que la réponse est non, rassemblez des liens vers des articles sur les meilleures pratiques pour le langage de programmation que vous utilisez. J'essaie de rester avec les guides de codage des grandes entreprises ... des entreprises dont tout le monde aura entendu parler comme Google, Microsoft, etc. et commencez par leurs guides de codage.

    Apportez-les à votre patron avec quelques articles sur comment la mise en œuvre des meilleures pratiques aide ... quels sont les avantages, etc. N'apportez pas votre message, vous êtes le messager. Vous apportez de bonnes nouvelles sur les moyens d'être plus efficace, d'économiser de l'argent, d'avoir moins de défauts, et la liste est longue ...

    Je pense que votre patron réagirait mieux à cette approche. Ensuite, une fois que vous l'avez accroché (espérons-le), vous avez une discussion d'équipe à leur sujet et commençons à les suivre. (Je voudrais ajouter quelques bonnes pratiques procédurales comme les révisions de code et autres, pas seulement des directives de codage.) Ensuite, si vous pouvez les amener à acheter jusqu'ici, alors vous commencez à appliquer ces directives et à examiner le nouveau code (et l'ancien code comme vous le rencontrez).

    "Hé, j'ai trouvé cette grande méthode qui selon les meilleures pratiques ABC, nous devrions nous séparer en méthodes plus petites qui ont une seule responsabilité, etc." et partez de là.

    Pour être honnête, je doute que vous iriez loin avec tout cela, mais c'est ainsi que je l'aborderais.

    J'aime ta réponse et je suis d'accord avec toi quand tu as dit que j'avais une montagne à gravir mais c'est une montagne à 90 °, pas d'équipement et si cela ne suffisait pas, je dirais que la montagne est gelée et protégée par le xD du gigantesque dragon
    Stephen
    2019-02-08 21:21:55 UTC
    view on stackexchange narkive permalink

    Si le patron ne sait rien de la programmation, je ne prendrais pas la peine de lui dire. Au son de celui-ci, votre collègue le fera pour lui-même, d'autant plus qu'il se vante de vous.

    Le code doit fonctionner, c'est tout ce dont votre patron se soucie. Bien sûr, la taille et la vitesse sont des facteurs importants s'il s'agit d'un grand projet, mais s'il est de petite ou moyenne taille, le travail suffit.

    Demandez à votre collègue de vous montrer le code en cours d'exécution ou le code lui-même pour que vous puissiez le vérifier.

    Veuillez lire ma première modification afin de comprendre pourquoi je suis préoccupé par la méthode des 3000 lignes
    ChrisW
    2019-02-09 15:20:41 UTC
    view on stackexchange narkive permalink

    Hormis le "3000 LOC", il y avait 3 autres phrases dans le PO qui ont attiré mon attention:

    • Dois-je communiquer cela au patron, qui ne sait rien de la programmation ?
    • Ma plus grande préoccupation ici est que mon collègue puisse mettre fin à la relation avec l'entreprise à un moment donné et que je devrai m'occuper de cette partie du projet sur lequel il travaillait.
    • Les revues de code n'existent pas ici.

    Le départ de quelqu'un est un risque commercial, peut-être un risque facile à comprendre pour un non-programmeur, et un risque atténué par des revues de code.

    Vous pourriez dire à votre patron que les programmeurs devraient (au minimum) comprendre le travail de chacun - ce qu'il fait et comment il est implémenté - au cas où l'un d'eux tomberait sous un bus. Vous pouvez ajouter que c'est normal / professionnel.

    Ensuite, demandez à votre collègue, lors d'une révision de code, "comment ça marche?"

    Vous avez dit que votre inquiétude était ...

    Comment diable puis-je lire une méthode de 3000 lignes?

    ... donc un examen du code devrait expliquer cela - c'est-à-dire comment ils expliquent, comment ils le lisent .

    Vous voudrez peut-être insister "vous devriez utiliser des sous-programmes", mais si le collègue est hostile au changement (attaché à l'implémentation existante), il est peut-être inutile d'insister. Assurez-vous simplement de le comprendre, afin de pouvoir le modifier si vous le deviez (par exemple, si vous en héritez).

    Il y a d'autres avantages aux révisions de code ...

    • Détection de bogue (mais vous repérez un bogue lors d'une inspection de code)
    • Transfert de connaissances (vous pourriez apprendre les uns des autres en lisant le code de l'autre et en en discutant)
    • Meilleure intégration entre les modules (voir également la loi de Conway)
    Samjongenelen
    2019-02-09 02:01:39 UTC
    view on stackexchange narkive permalink

    J'essaye d'utiliser un analyseur statique pour ce faire. Les commentaires d'un ordinateur ne peuvent pas être faux, et de cette façon, vous n'avez pas à confronter personnellement vos collègues. Il vous suffit de vous mettre d'accord sur les règles de code ou de prendre un ensemble de règles de base existantes.

    * Les commentaires d'un ordinateur ne peuvent pas être erronés * Uhhh ... [bien sûr] (https://money.cnn.com/2018/03/19/technology/uber-autonomous-car-fatal-crash/index.html).
    Seulement pâle par rapport aux commentaires d'Internet;)
    Czar
    2019-02-11 14:27:19 UTC
    view on stackexchange narkive permalink

    Je sens deux défauts majeurs ici:

    • Proposez-vous une solution au problème? Le simple fait de dire "ce code est horrible" ne sera pas travail. Cela pourrait être une opinion, cela n'apporte pas de valeur à l'entreprise; les patrons et les entreprises veulent des solutions.

    • avez-vous un processus de révision? Les examens par les pairs du code doivent être effectués quelle que soit la taille de l'équipe: fournir des informations détaillées sur la façon dont le code peut être refactorisé est préférable à toute réclamation possible, et résout également le problème ci-dessus.

    D'après vos modifications, la réponse à la la seconde est "non", alors peut-être que la bonne chose à signaler au patron est de parler du processus et de ne pas signaler les "échecs de code" uniques qu'il n'est pas en mesure d'évaluer correctement, à moins qu'il vous fait confiance.

    Si vous dites au patron:

    Écoutez, j'ai une idée pour rendre notre travail plus productif: nous pouvons écrire un meilleur code, mieux nous adapter changer dans l'entreprise, réduire les bogues et avoir une base de code maintenable qui est plus facile à saisir également pour les nouveaux arrivants

    peut-être qu'il écouterait plus attentivement. Vous proposez des solutions, sans signaler un problème.

    520 says Reinstate Monica
    2019-02-08 21:42:19 UTC
    view on stackexchange narkive permalink

    Qu'est-ce que la fonction essaie de faire? Quelle est la complexité de cette tâche? Quelle catégorie d'optimisation visaient-ils (vitesse, précision, convivialité)? Sans aucune de ces informations, il sera difficile de porter un jugement. Vous pouvez toujours consulter le code. S'il y a des inefficacités, indiquez-les comme «Le code est bon! Quickie [gain de temps / booster de performances / peu importe], vous pouvez toujours faire X pour éviter [goulot d'étranglement] '

    Peter Cordes
    2019-02-11 09:19:28 UTC
    view on stackexchange narkive permalink

    Vous pourrez peut-être convaincre votre collègue avec des raisons techniques que le compilateur peut intégrer pour lui, donc cette "optimisation" au niveau de la source n'est pas utile.

    J'espère que vous exagérez ce qu'ils ont dit à propos de la méthode de 3000 lignes la plus optimisée possible , ou bien votre collègue n'a probablement aucune idée de l'optimisation des performances et ne se soucie que de quelque chose qu'il a lu une fois. Les personnes qui pensent savoir quelque chose mais ne comprennent pas vraiment sont parfois les plus difficiles à convaincre. J'ai eu plusieurs échanges dans des commentaires de débordement de pile avec des gens refusant de croire qu'ils avaient tort, mais incapables de donner une explication technique cohérente qui avait du sens.

    En tant qu'expert en optimisation asm (SO badges or dans [x86], [assembly], [performance], [sse] tags, etc.), je peux vous dire qu'il est presque impossible que cette fonction soit "la plus optimisée possible", même si votre collègue a passé des années à la profiler et à la régler ( sur un matériel spécifique? avec un système d'exploitation et une version de compilateur spécifiques?) Une fonction aussi grande aura toujours de la place pour de petits ajustements (ou de nouvelles idées pour de grands changements) qui pourraient la rendre plus rapide, ou plus petite (code machine) à la même vitesse (peut-être plus conviviale pour l'hyperthreading pour faire le même travail avec moins d'instructions) .

    Je ne pense pas que le compilateur C # + JIT soit si mauvais qu'il ne puisse pas appeler la méthode en ligne pour vous, surtout s'ils n'ont qu'un seul site d'appel . Je ne connais pas C # (principalement C et C ++), mais a-t-il quelque chose qui ressemble à une fonction non membre statique en ligne que le compilateur peut intégrer au lieu d'émettre un stand -alone définition pour, et le fera même si la fonction est large? Ou quelque chose comme GNU C __attribute __ ((always_inline)) ? Votre collègue pourrait les utiliser pour avoir l'impression de bénéficier de l'optimisation qu'il juge importante sans que la source ne soit en désordre.


    Mais plus important encore, "être optimisé" ne vaut un compromis en termes de lisibilité que lorsque la version de base simple (que vous avez écrite comme point de départ et pour comparer la version optimisée) est plus lente que vous le souhaitez fort>. Vous ne pouvez pas dire si vous optimisez réellement quoi que ce soit si vous n'avez pas de point de départ à comparer, et ainsi juger de la lisibilité ou de la taille du code machine / de l'empreinte du cache d'instructions par rapport à l'accélération.

    Écrire une version "optimisée" moins lisible sans une base de référence simple est généralement une erreur , à moins que vous ne pensiez déjà savoir par expérience comment la version simple se compilerait et qu'elle ne serait pas efficace assez. Habituellement, vous avez une version simple dans le cadre d'un test unitaire pour une version déroulée / vectorisée manuellement. (Ce cas d'inclusion manuelle est peut-être différent, cependant. Cela ne rend pas un élément de logique individuel plus complexe ou "étrangement" implémenté. Ou est-ce le cas? Y a-t-il une optimisation manuelle entre les blocs?)

    Inlining Cela en vaut souvent la peine pour les petites fonctions, mais appeler un gros bloc de code à partir de plusieurs sites d'appels n'utilise qu'une seule fois l'empreinte du cache d'instructions. Cependant, cela paie les frais généraux d'appel de fonction à chaque fois, donc le microbenchmarking d'une seule fonction, sans le contexte complet du programme, peut donner une belle apparence à l'inlining et au déroulement excessifs. Habituellement, nous allons bien laisser la décision aux heuristiques modernes du compilateur; ils sont généralement assez bien réglés, surtout s'ils peuvent effectuer une optimisation guidée par profil pour trouver des boucles qui sont réellement chaudes. (Les compilateurs JIT fonctionnent au moment de l'exécution, ils ont donc des données de profilage s'ils souhaitent les utiliser. Habituellement, en créant une version pas entièrement optimisée ou en interprétant au début, puis en utilisant des données de profilage pour des méthodes virtuelles en ligne spéculatives et des choses comme ça. / p>

    Parfois, l'optimisation ne nuit pas à la lisibilité, mais dans ce cas, c'est clairement le cas.

    En C ++, j'écris souvent de petites fonctions d'aide static inline qui seront intégrées dans une fonction plus grande dont j'optimise la merde avec les intrinsèques SIMD. Quand je regarde l'asm généré par le compilateur, il n'y a exactement aucun inconvénient dans l'efficacité du code machine, et un bon avantage dans la lisibilité de la source. Aucune définition autonome n'apparaît nulle part dans l'exécutable pour ces fonctions d'assistance, donc elles ne gonflent même pas l'exécutable.


    Si vous voulez insister sur le problème, demandez à votre collègue s'il a a regardé la sortie asm du compilateur JIT pour sa méthode et l'a profilée, et a trouvé que ces gros blocs conditionnels permettaient au compilateur d'optimiser d'une manière qu'il ne pouvait pas avec l'inlining.

    Être conscient de ce que votre compilateur + le matériel peut faire efficacement n'est pas toujours une mauvaise chose, si vous laissez cela informer vos choix de codage quand cela ne nuit pas à la lisibilité.

    Il est tentant de se laisser entraîner dans l'optimisation de quelque chose qui n'a pas besoin d'être optimisé . Surtout si vous ne pensez à optimiser pour la vitesse de cette fonction que si elle a été appelée dans une boucle chaude , alors qu'elle ne sera pas dans une boucle chaude. S'il est appelé rarement, le cache de code peut être froid, donc compact est préférable. (Moins de lignes de code de cache à charger à partir de la mémoire principale.)

    Ce type d'argument n'aide que si vous pouvez exclure toutes les fonctions d'assistance courantes de cette méthode de 3000 lignes. Mettre chaque bloc dans une fonction distincte ne réduira pas le code machine. Cela pourrait rendre la logique de décision pour la fonction à distribuer plus localisée, ce qui entraînerait une empreinte de cache I plus petite pour cela. Et peut-être moins de 4k pages touchées / chargées à partir du disque / i-TLBfootprint.

    Brandon
    2019-02-11 23:08:58 UTC
    view on stackexchange narkive permalink

    Quelques réflexions:

    • Votre responsable pourrait éventuellement fournir la résolution des conflits et la médiation, mais il ne peut pas vraiment se prononcer sur les mérites techniques, il devra donc compter sur votre compétence. Si cela dépend de votre expertise, alors je pense que vous pouvez résoudre ce problème.
    • Vous vous inquiétez des conséquences de laisser le code seul. Si les conséquences sont des coûts de maintenance, quelle meilleure façon pour votre collègue d'apprendre cette leçon que de devoir travailler dur la prochaine fois qu'il doit changer de fonction? L'expérience peut être un bon enseignant.
    • Les avantages réels de la réduction des coûts sont la lisibilité, la testabilité et la simplicité. Si votre collègue ne comprend pas ces avantages, leur demander de le briser créera des limites de code artificielles. Leur montrer une meilleure façon sera utile.

    Le regarder différemment: le leadership

    À mon avis , votre manager n'étant pas un leader technique, aller vers lui pour résoudre ce problème réduira au minimum l'opportunité pour votre collègue d'apprendre et risquera de créer un fossé entre vous et lui / elle.

    Si vous ne le faites pas demandez à un responsable technique de faire remonter cela, puis soyez ce leader en aidant votre coéquipier à devenir un meilleur développeur.

    Nous pouvons résumer tout cela en deux approches possibles:

    Laissez-le faire

    Laissez-les faire à leur manière et lorsque ce code devient un problème, aidez-les à comprendre pourquoi c'est un problème et aidez-les à trouver quelques blocs de code clé qu'ils peuvent séparer. Ils apprendront. Sérieusement, ça va. J'ai fait cela dans des rôles de leadership. C'est juste du code. Il peut être modifié ultérieurement.

    Montre le chemin

    Montrez-leur une alternative avec tous les avantages réalisés . Soit réécrire leur code dans une branche en le décomposant dans les bonnes couches, rendre le code limpide (bonnes fonctions et noms de variables) et écrire de très bons tests unitaires. Ecrire des tests qui auraient été impossibles à écrire avec l'ancien code. Lorsque vous présentez ce code à votre collègue, proposez une modification arbitraire des exigences que vous voulez prétendre apporter, expliquez-leur la mise en œuvre afin qu'ils puissent voir à quel point il est facile de l'implémenter et s'assurer que cela fonctionne .



    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 4.0 sous laquelle il est distribué.
    Loading...