Frage:
Lesbarkeit des Codes, Konventionen und sollte ich loslassen
Stankar0x
2017-11-12 20:53:33 UTC
view on stackexchange narkive permalink

Während ich einem Fehler nachjagte, fand ich einige Codezeilen, die ich schwer zu lesen fand, und verbesserte sie aus Gründen der Lesbarkeit.

Diese Änderung brachte den Code näher an das, was unsere Codierungskonvention sagt, was auch besagt Wir sollten "Code korrigieren, der nicht mit diesem Stil geschrieben wurde".

Nun einer meiner Kollegen, der ein Dienstalter hat, sagen wir wegen der Länge seiner Amtszeit dort. Kluger Kerl, der sich dem Code widmet und wichtige Stücke geschrieben hat. Zieht mich beiseite und sagt:

Warum machst du das? Sie ändern meinen Code. Wir sind ein Team. Dieser Code wurde so geschrieben, dass er von jedem im Team verstanden werden kann. Und muss auch nach 100 Jahren noch wartbar sein. Wenn Sie die Teamkonventionen nicht befolgen, müssen wir uns trennen, oder ich werde mit den Managern sprechen, damit Sie diesen Code nie wieder berühren müssen. Diese Sache ... wird von Nachwuchsentwicklern nicht verstanden, und ich weiß, was Sie dort tun, nur weil ich den Unterschied sehen kann. Ich habe diesen Code geschrieben und kenne jede Zeile darin, und jetzt ist es schwer, ihm zu folgen. Es ist nicht lesbar und ich schreibe meinen Code, damit klar wird, was ich denke. Sie sollten tun, was ich Ihnen sage - dies bedeutet, dass Sie meinen Code nicht berühren. Wenn es Fehler gibt, beheben Sie einfach den Fehler und das war's.

OK, ich gebe zu, dass ich schuldig bin Ich habe die Code-Konvention nicht bis zu einem T befolgt, aber im Allgemeinen denke ich, dass meine Version besser lesbar ist als die vorherige.

Ich habe die Änderungen rückgängig gemacht und nur den Fehler behoben, der einige Zeilen weiter unten lag. Aber das macht mich unruhig, da ich mitschuldig bin, wenn ich unordentlichen Code hinterlasse. Es ist nicht der einzige Ort in der Codebasis, der lange Zeilen und mehrere Anweisungen in einer Zeile enthält, aber zumindest musste ich nicht so viele Iterationen damit verbringen.

Soll ich loslassen oder Geh und sprich mit höheren Leuten, seinen Managern, ihren Managern usw. Einerseits für 3 Zeilen wird es dumm sein, da ich kürzlich beigetreten bin und sie mich nicht so gut kennen, andererseits ist es eine Sache von Prinzipien und das nervt mich sehr.

Erklärungen:

  • Die Person, mit der ich diese Diskussion geführt habe, ist nicht mein Manager, sondern ein Peer. Wir sind auf dem gleichen Niveau. Sein wahrgenommenes Dienstalter basiert auf der Tatsache, dass er länger als ich dort war.
  • Die Codekonvention besagt eindeutig, dass ich Code ändern kann, um ihn im Sinne der Codekonvention zu erstellen. Die Konvention wurde von seinem direkten Manager geschrieben.
  • @Fattie - Ich stimme im Allgemeinen zu, dass beide Versionen des Codes Müll sind. Ich bin ein Fan von Onkel Bob, Grady Booch, Kent Back, Martin Fowler usw. Also weiß ich, was Sie damit meinen. Jetzt bin ich nicht den ganzen Weg gegangen, um es unkenntlich zu machen, da ich Angst hatte, nur in diesen territorialen Streit zu geraten. In diesem Fall habe ich mich lediglich an die Konvention gehalten.
  • Ich habe den Eindruck, dass einige von Ihnen davon ausgehen, dass es unerfahren ist, an diesem Ort neu zu sein. Bitte nehmen Sie das nicht an.
  • Für mich ist die Lesbarkeit des Codes ein Vorläufer für eine einfachere Wartung. Ich weiß, ich kann Ecken schneiden und es so lassen, wie es ist. Ich werde irgendwann das Schiff wechseln. Zukünftige Entwickler werden sich damit befassen müssen. Ich muss mein Leben nicht für 3 Codezeilen komplizieren. Ich wollte nur Meinungen sammeln, wenn sich der Kampf lohnt. In dieser Hinsicht (für diesen Fall) ist die Antwort von @ A.O am sinnvollsten.
  • Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/68672/discussion-on-question-by-stankar0x-code-readability-conventions-and-should-i-l).
    Betrachten Sie den Code in der alten Bearbeitung (und sprechen Sie als Programmierer): Ich denke, das Aufteilen der langen, komplizierten Zeilen in mehrere Zeilen ist eine gute Änderung, die das Lesen erheblich erleichtert.Der Teil, in dem Sie den Operator "%" einführen, ist umstrittener.Der alte Code dort war wohl leichter zu verstehen, insbesondere für Junior-Entwickler, die diesen Operator möglicherweise nicht oft verwenden (außer für FizzBuzz).Glaubst du, er hätte sich so vehement beschwert, wenn du nur die Linien geteilt hättest?Trotzdem reagierte er sehr schlecht.Sei in Zukunft vorsichtig mit diesem Kerl ...
    Ich bin damit einverstanden, dass der Mod-Operator (%) den Trick ergänzt.Aber auch ohne sie wäre die Reaktion sicher dieselbe gewesen.
    Generell finde ich Codierungskonventionen oft zu detailliert und allgemein überbewertet.Sie dienen wichtigen Zwecken: Vermeiden Sie gefährliche Gewohnheiten und machen Sie Code lesbar, teilweise indem Sie Stilunterschiede innerhalb eines Verbundprojekts reduzieren.Die Konzentration auf Details, die über diese Zwecke hinausgehen, lenkt ab und kann kontraproduktiv sein.Ich möchte nicht gemein sein, aber: Ich vermute oft, dass Leute, die sich auf Details des Codierungsstils konzentrieren, die Macht genießen, die die Regeln gewähren, um dort einzugreifen, wo sie es sonst nicht könnten.Hinweis: Konzentrieren Sie sich auf die Substanz.Dies kann erhebliche Verstöße gegen Kodierungsregeln beinhalten.
    @Stankar0x, Ich habe vor Jahren eine ähnliche Frage beantwortet, basierend auf meiner Erfahrung vor über einem Jahrzehnt.Sie können es hier lesen, und vielleicht ist es hilfreich: [Wie verhindern Sie, dass Sie funktionierenden, aber schrecklichen Code umgestalten?] (Https://stackoverflow.com/questions/455271/how-do-you-stop-Ich-war-in-Ihren Schuhen, und ich entdeckte, dass es einige gute Gründe gibt, schlechten Code in Ruhe zu lassen (schmerzhaft wie er ist).
    Zwölf antworten:
    meriton
    2017-11-12 23:04:19 UTC
    view on stackexchange narkive permalink

    Ihr Senior und Sie sind sich also nicht einig darüber, was die Codierungskonventionen bedeuten und welcher Weg besser lesbar ist. Die Möglichkeit, dies zu beheben, besteht darin, Ihr Verständnis zu klären, damit alle auf derselben Seite sind.

    Daher hätte ich wie folgt reagiert:

    S: Warum sind Sie? Dies tun? Sie ändern meinen Code. Wir sind ein Team ...

    J: Ich habe versucht, die Codierungskonvention einzuhalten. Es heißt, wir sollten XXX machen und vorhandenen Code verbessern, wenn wir ihn sehen?

    Und dann hören Sie sich an, was er sagt, und versuchen Sie wirklich, seinen Standpunkt zu verstehen.

    Und sobald die technische Debatte vorbei ist (und die Gemüter hoffentlich abgekühlt sind), würde ich auf die soziale Seite seines Feedbacks eingehen. Auch dies funktioniert am besten als Frage:

    Was soll ich tun, wenn ich etwas in Ihrem Code sehe, das ich nicht verstehe oder für einfacher halte?

    Und hören Sie noch einmal zu, was er will.

    Damit werden mehrere Dinge erreicht:

    1. Seine eher emotionale Reaktion zeigt an, dass er emotional in seinen Code investiert ist und sein Expertenurteil spürt nicht respektiert. Indem Sie nach seinem Fachwissen fragen, zeigen Sie, dass Sie sein Fachwissen schätzen, was die Diskussion beruhigen sollte.
    2. Es bedeutet, dass Sie ihn nicht missachten oder soziale Normen zur Schau stellen wollten. Vielmehr wird ihm klar, dass Sie einfach noch nicht wussten, was von Ihnen erwartet wurde, und dass Sie versuchen, dies zu beheben.
    3. Es wird klargestellt, was von Ihnen erwartet wird, um weitere versehentliche Konflikte zu vermeiden.
    4. ol>
    _ "Es wird klargestellt, was von Ihnen erwartet wird, um weitere versehentliche Konflikte zu vermeiden." _ Ich denke, der Mitarbeiter hat dies bereits klargestellt: "Berühren Sie meinen Code erneut! Berühren Sie meinen Code noch einmal! Ich wage Sie ..." - Also ziehe ich anIch denke nicht, dass es konstruktiv sein wird, sich auf vorgeschlagene Gespräche einzulassen.
    Zuhören ist eines der mächtigsten Werkzeuge, um Vertrauen zu gewinnen.Manchmal sind wir so sehr damit beschäftigt, jemandem zu zeigen, wie unser Weg besser ist, dass wir vergessen, dass es egal ist, ob unser Weg besser ist, wenn uns niemand vertraut.Und hin und wieder stellen wir vielleicht fest, dass unser Weg nicht besser ist!
    @Fildor: Im Zorn machen Menschen manchmal voreilige Aussagen, die sie bei ruhiger Reflexion als weniger als perfekte Lösungen erkennen.In diesem Fall halte ich eine erneute Überprüfung für notwendig, da die vorgeschlagene Lösung nicht nachhaltig ist: Was soll OP tun, wenn ihm Aufgaben übertragen werden, die wesentliche Änderungen des Codes dieses Senioren erfordern?
    Im Allgemeinen gehe ich so mit Problemen dieser Art um.So sehr mir Ihre Antwort in diesem Fall gefällt, kann sie nicht angewendet werden.Ich habe schon früher versucht, die Erwartungen einzuschätzen, wurde aber mit Antworten wie "Nun, die Code-Konvention wird nicht befolgt." Oder "Der Code wurde vor langer Zeit geschrieben, niemand liest ihn trotzdem."Jeder im Team versteht es und es sollte so sein, wie es ist. “
    A.S
    2017-11-12 21:12:50 UTC
    view on stackexchange narkive permalink

    Lassen Sie es los. Sie versuchen, einen Kompromiss zwischen drei oder vier Prioritäten einzugehen: Ihren Präferenzen, den Codekonventionen, den Präferenzen des leitenden Entwicklers, dessen Code Sie geändert haben, und der Fähigkeit des Teams, einen Sinn zu ergeben des Codes. Laut dem leitenden Entwickler macht sein Codierungsstil für das Team Sinn. So können die Prioritäten 3 und 4 kombiniert werden. Jetzt ist es zwischen Ihnen, den Code-Konventionen und dem Senior Dev + Team.

    Zwischen diesen Optionen sind meiner Meinung nach die Konventionen des Teams und Ihre Beziehung zum leitenden Entwickler für die Fähigkeit des Teams, die Arbeit zu erledigen, wichtiger als Ihre Präferenz und die Code-Konventionen.

    Wenn Sie berücksichtigen, dass Sie neu sind, würde ich empfehlen, es loszulassen und daraus zu lernen, dass das, was Sie für richtig halten, nicht notwendig ist, was immer passieren sollte.

    Ich vermute andere hier könnten zurückschieben und es gibt definitiv Raum für eine andere Reihenfolge der Prioritäten, aber dies ist wahrscheinlich der Weg, den ich eingeschlagen hätte, zumindest als ich noch ein relativ neuer Mitarbeiter war. Viel Glück!

    Aufgrund des Zitats des Mitarbeiters zwischen Drohungen, Mobbing und Übertreibung bezweifle ich sehr, dass es sich um die Art von Person handelt, die in der Lage ist, genau für andere zu sprechen, indem sie tatsächlich die Meinung anderer berücksichtigt.
    Betreff * Laut dem leitenden Entwickler macht sein Codierungsstil für das Team Sinn. * Ich vermute, dass dies nicht der Fall ist.Es ist "sein Code", den dieser Neuling berühren konnte.Ich vermute, * niemand * berührt seinen Code, weil (a) er völlig unlesbar ist, aber auf magische Weise zu funktionieren scheint und (b) der Typ so empfindlich gegenüber "seinem Code" ist, dass jeder, der es wagt, ihn zu berühren, einen Vortrag bekommt.
    @DavidHammen: Der giftigste Mitarbeiter aller Zeiten.Erinnert mich an einen älteren Kollegen, der gegen Codeüberprüfungen war, weil er nicht wollte, dass jemand * seinen * Code überprüft ...
    Obwohl ich der Antwort überwiegend zustimme, stimme ich der Rechtfertigung von _ nicht zu. "Laut dem leitenden Entwickler macht sein Codierungsstil für das Team Sinn." _ (1) Jeder Code macht für sich selbst Sinn.Sie sollten die Meinungen von ** anderen ** überprüfen.(2) Ein Senior kann Codierungsstandards durchsetzen, die darauf beruhen, ein Senior zu sein, unabhängig von dem von ihm festgelegten Standard.Die Tatsache, dass der leitende Entwickler OP auf einer persönlichen Ebene aktiviert ("Warum machst du das?" Im Gegensatz zu "der Codierungsstandard ist [so und so]"), legt nahe, dass der leitende Entwickler das Sagen hat.eher, als [..]
    [..] nach einer festgelegten Richtlinie, die objektiv definiert ist.Wenn es eine solche etablierte Richtlinie gibt, sollte er sich auf die Richtlinie beziehen, anstatt durch die Handlungen von OP beleidigt zu werden, übertriebene Behauptungen über "100 Jahre Wartbarkeit" aufzustellen, den Zugriff von OP auf den Code zu entfernen oder arrogant zu behaupten, dass _his_ Code ist(eindeutig) nicht berührt werden.Wenn das Zitat des leitenden Entwicklers in irgendeiner Weise korrekt ist, gibt es ein massives Problem mit dem übermäßigen Vertrauen des leitenden Entwicklers und der proaktiven Verhinderung von allem, was einen ehrlichen Fehler (oder eine unvollständige Lösung) von ihm hervorhebt.
    Jeder, der sagt "das ist mein Code ... berühre meinen Code nicht", verliert sofort fast jede Glaubwürdigkeit in Bezug auf Kommunikationsfähigkeiten und Teamarbeit.Selbst wenn er Recht hat, dass er besser ist, ist dies der schlechteste Weg, dies auszudrücken.Natürlich kenne ich nicht alle Details, und vielleicht hatte er gerade einen schlechten Tag, aber eine Interaktion, die mit einem älteren Entwickler giftig ist, ist eine ausreichende Motivation, um Ihren Lebenslauf in vielen Szenarien zu verbessern.
    Stephan Branczyk
    2017-11-13 08:17:56 UTC
    view on stackexchange narkive permalink

    Sie haben die Änderungen bereits rückgängig gemacht. Also lass es los.

    Davon abgesehen, wenn dies das nächste Mal passiert. Stellen Sie sicher, dass bei der Interpretation der Codierungskonventionen kein Spielraum vorhanden ist. Wenn Sie mit jemandem kämpfen möchten, wählen Sie unbedingt einen Kampf aus, bei dem Sie eine 100% ige Gewinnchance haben.

    Dies ist besonders wichtig, wenn Sie nicht so viel soziales Kapital haben Management wie diese Person bereits hat.

    Stellen Sie außerdem sicher, dass Sie Komponententests hinzufügen, bevor Sie zu viel von seinem Code ändern. Wenn Sie Fehler in seinen Code einführen, werden Sie nie das Ende davon hören. Und wenn Sie etwas von ihm finden, lohnt es sich, es zu ändern. Dann machen Sie weiter, aber seien Sie vorsichtig und befolgen Sie die offiziellen Konventionen (und wenn nicht, behandeln die offiziellen Konventionen kein bestimmtes Problem, befolgen Sie mindestens die Konventionen Code Complete).

    Wenn er sich bei Ihnen beschwert, können Sie ihm einfach sagen, dass er bei der Änderung der Codekonventionen kämpfen soll. Sobald er die Genehmigung für diese neuen Codierungskonventionen erhalten hat, die er im Auge hat, werden Sie sie gerne ansehen und implementieren sie, aber nicht vorher.

    Außerdem sollten Sie das Management wahrscheinlich bitten, wöchentliche Codeüberprüfungen zu organisieren. Immerhin, wenn Sie die Möglichkeit haben, Codierungsentscheidungen während der Codeüberprüfung zu besprechen. Dies gibt Ihnen eine sicherere und weniger konfrontative Möglichkeit, einige der schlechten Gewohnheiten Ihrer Kollegen zu verstehen und / oder herauszufordern.

    + 20zillion für die Erwähnung von Unit-Tests.; D Dadurch werden Änderungen immens sicherer zu implementieren!
    @akaioi Ich würde noch weiter gehen.Berühren Sie den Code nur, wenn ein fehlerhafter Komponententest behoben werden muss.Reparieren Sie nicht, was nicht kaputt ist.
    @emory, Ich bin anderer Meinung.
    @emory Die gesamte [codereview.se] Community ist mit dieser Aussage nicht einverstanden.
    @Mat'sMug Sie können keinen einzigen fehlgeschlagenen Komponententest schreiben, möchten aber trotzdem mit dem Code herumspielen.Entweder ist der Code so wie er ist perfekt oder Sie verstehen ihn nicht wirklich.Schreiben Sie so lange Unit-Tests, bis Sie einen Fehler gefunden haben, und überarbeiten Sie ihn dann.
    @emory-Nr.Unit-Tests decken ab, ob der Code das tut, was er tun muss - und nicht, ob er lesbar implementiert ist.Und wenn Ihre Tests Implementierungsdetails in Spezifikationen umwandeln, gießen Ihre Tests die gesamte Codebasis in Zement.
    @Mat'sMug Warum sollten Sie den Code anders lesen als (1) Beheben eines Fehlers oder (2) Hinzufügen einer neuen Funktion.Wenn Sie einen Fehler beheben, sollten Sie zunächst diesen fehlgeschlagenen Komponententest schreiben.Wenn Sie eine neue Funktion hinzufügen, ist das Fehlen dieser Funktion ein fehlgeschlagener Komponententest.Wenn Sie den Code zum Spaß lesen, hören Sie auf und erledigen Sie echte Arbeit.
    @emory - Das OP hat versucht, einen Fehler zu beheben.Der Code war schlecht geschrieben und musste überarbeitet werden. Erst dann wurde festgestellt, dass sich der Fehler an einer anderen Stelle befand (einige Zeilen unterhalb des überarbeiteten Teils).Das ist absolut Code, den ich umgestalten müsste, nur um ihm zu folgen, und wenn sie mit dem "älteren" Entwickler konfrontiert werden, bietet ihre Haltung die Gelegenheit, sie daran zu erinnern, dass ich keinen Fehler behoben hätte, wenn sie keinen dort gelassen hätten undhätte nicht umgestalten müssen, wenn es die Unternehmensstandards erfüllt hätte.Das einzige "out", das ich ihnen geben würde, ist, wenn dieser Abschnitt der Codebasis vor denen liegt (was es durchaus tun könnte).
    Jasper
    2017-11-13 19:54:26 UTC
    view on stackexchange narkive permalink

    Es ist viel los

    Hier ist einiges los. Viele davon wurden angesprochen, und ich werde sie und meine Vision, was Sie dagegen tun sollten oder nicht, kurz erwähnen. Es gibt jedoch einen Punkt, den ich noch nicht wirklich angesprochen habe, den ich als das größte Problem betrachte, und ich werde ihn genauer behandeln.

    Fehler Korrekturen im &-Stil

    Sie haben behoben das Problem bei gleichzeitiger Änderung des Codes.

    Meiner Meinung nach ist dies kein großes Problem, aber es ist im Allgemeinen besser, getrennte Dinge in getrennten Commits zu halten. Dies hätte dazu geführt, dass der Konflikt auch hier von der Fehlerbehebung getrennt wurde.

    Unterschiedliche Ansichten

    Sie sind sich nicht einig darüber, welche Version den Konventionen besser entspricht, besser lesbar und besser ist wartbar.

    Wenn er Ihr Senior ist, kann es gut sein, seinem Beispiel zu folgen. Alternativ kann es gut sein, wenn jemand anderes aus dem Unternehmen gemeinsam mit Ihnen beiden den Code aus diesen drei Perspektiven betrachtet.

    Starker Code

    Der Code war anfangs schwer zu verstehen.

    Ich fand es nützlich, in solchen Situationen Fragen zum Code zu stellen, insbesondere wenn Sie wissen, wer den Code geschrieben hat (und / oder der Code geschrieben wurde) vor kurzem). Das Stellen von Fragen kann dazu führen, dass Sie den Code besser verstehen und der anderen Person helfen, zu erkennen, warum der Code anfangs schwer zu verstehen war. Dies führt häufig dazu, wie der Code von selbst klarer gemacht werden kann, was Sie dann besprechen können, bevor Sie ihn implementieren.

    Der Angriff

    Die andere Person wird ziemlich aggressiv, indem sie Ihnen vorschlägt Sie müssen sich trennen und dass sie zu Ihrem Manager gehen, um Sie von bestimmten Codes fernzuhalten.

    Wie geschrieben, ist das ziemlich ernst. Es hängt ein wenig davon ab, auf welche Weise der Unterschied zwischen den tatsächlichen Dingen, die er gesagt hat, und der Art und Weise, wie Sie ihn hier umschrieben haben, schwankt, aber allein durch die Art und Weise, wie Sie es geschrieben haben, sollte dies allein Grund sein, mit Ihrem Manager zu sprechen. Wenn Sie dies tun, machen Sie es nicht mit dem Code, sondern mit seiner Einstellung zu Ihnen, wo er in Erwägung zu ziehen scheint, Drohungen gegen Sie in Ordnung zu bringen

    Er möchte nicht, dass Sie seinen Code bearbeiten.

    Meiner Meinung nach ist dies das größte Problem. Dies ist eine ziemlich giftige Einstellung, und ich denke, sie trifft den Kern des Problems. Hobby-Programmierer schützen ihren Code oft sehr und manchmal kann dies bei professionellen Programmierern beobachtet werden, die auch selbst an Code gearbeitet haben. Es hat jedoch keinen Platz in einer professionellen Umgebung und ist extrem giftig, wenn Sie als Team für den Code verantwortlich sind.

    Letztendlich besteht das Problem darin, dass der Code nicht von ihm stammt. Der Code gehört dem Unternehmen oder vielleicht dem Team, aber nicht seinem. Stattdessen ist es Code, den er geschrieben hat. Ich denke, es ist wichtig, es nicht als seinen Code zu bezeichnen, sondern als Code, den er geschrieben hat. Ohne anzugeben, dass es nicht sein Code ist oder ihn zu korrigieren, wenn er sagt, dass es sein Code ist, kann es vorteilhaft sein, ihn konsequent als Code zu bezeichnen, den er selbst geschrieben hat. Dies gilt sowohl für den Moment, in dem Sie die Situation mit ihm besprechen, als auch für die Besprechung der Situation mit anderen Teammitgliedern oder einem Manager.

    Zunächst würde ich sagen, dass ich diesen Vorfall zulassen würde sei was es jetzt ist. Ich würde jedoch auch nicht aus dem Weg gehen, um zu vermeiden, Code zu berühren, den er in Zukunft geschrieben hat. Es hört sich so an, als würde dies wieder auftauchen und das Gehen auf Eierschalen den ganzen Tag wird niemandem helfen.

    Angenommen, Sie befinden sich in einem Team mit mehr Mitgliedern als Sie beide. Als Erstes können Sie mit anderen Teammitgliedern über das Problem sprechen. Fragen Sie sie, ob sie das gleiche Verhalten erfahren haben und wie sie damit umgegangen sind oder damit umgehen würden. Ihre Mitarbeiter sind eine nicht zu unterschätzende Ressource. Wenn Ihr Team keine anderen Mitglieder enthält, können Sie stattdessen andere Kollegen fragen, die in der Vergangenheit mit dieser Person gearbeitet haben.

    Wenn sich herausstellt, dass dieser Programmierer den von ihm geschriebenen Code übermäßig schützt Versuchen Sie bei einer anderen Gelegenheit, die Vorschläge Ihrer Kollegen anzuwenden. Darüber hinaus können Sie ihn auch fragen, ob er verärgert ist, weil Sie den von ihm geschriebenen Code geändert haben oder dass er der Meinung ist, dass die Änderung den Code negativ beeinflusst. Dies sind zwei völlig getrennte Probleme, und es ist wichtig, ihn darauf aufmerksam zu machen.

    Nach diesem Zeitpunkt scheint es an der Zeit zu sein, das Problem zu eskalieren. Sprechen Sie mit Ihrem Teamleiter oder Manager (je nachdem, was angemessener ist) und erklären Sie ihm, dass diese Person Probleme damit zu haben scheint, dass Sie den von ihnen geschriebenen Code berühren. Während Sie offen für Diskussionen über die Qualität eines Codes sind (was Sie sein sollten), scheint es die Tatsache zu sein, dass diese Person möchte, dass der Code, den sie geschrieben hat, nicht berührt wird (von Ihnen - wenn es Ihr Eindruck ist ist). Erklären Sie, wie dies fälschlicherweise das Eigentum, die Verantwortung und das Verständnis des Codes aufteilt und wie sich dies nachteilig auf das Produkt auswirkt und die Art und Weise erhöht, in der sich das Unternehmen auf bestimmte Personen verlässt. (Natürlich sollte eine solche Erklärung im Gespräch mit einem Teamleiter nicht annähernd so detailliert sein wie im Gespräch mit einem Manager.)

    Abschließend

    Also im Wesentlichen Ich denke, das Wichtigste ist, die verschiedenen Themen zu trennen und sie individuell anzugehen. Dies sollte es auch viel einfacher machen, mit jedem von ihnen umzugehen, da Sie jetzt wissen, was los ist.

    +1 für den Hobbyist-Code - viele ältere Codierer stammen aus dieser Hobbyist / RockStar-Schule, in der "nur andere Leute Fehler machen", und es erfordert viel Selbstreflexion und Erfahrung, um zu erkennen, warum wir alle die anderen Aspekte von Software benötigenEngineering wie Unit-Test und Lesbarkeit.
    Ich schätze es, das Problem so zu lösen, wie Sie es getan haben.Normalerweise verwende ich eine Technik von Martin Fowler und überarbeite den Code im Laufe der Zeit, um für mich einen besseren Sinn zu ergeben oder ihn zu vereinfachen.Daher werden die Stiländerungen und Fehlerkorrekturen sowie der harte Code von ihm angesprochen.Dies ist großartig, wenn Sie Unit-Tests haben, um Ihre Annahmen zu stützen.Funktioniert aber auch, wenn Sie manuelle Tests durchführen, während Sie nach Fehlern suchen.Auch wenn ursprüngliche Programmierer nicht verfügbar sind oder wenn Leute beschäftigt sind und keine Zeit haben oder wollen, um Details mit Ihnen zu besprechen. [..]
    [..] Hier einige Referenzen für diejenigen unter Ihnen, die daran interessiert sind: [Link] (https://martinfowler.com/distributedComputing/refactoring.pdf) oder sein Buch: Refactoring Verbesserung des Designs vorhandenen Codes.
    @Stankar0x Interessante Lektüre (wenn auch etwas veraltet).Ich bin mir nicht ganz sicher, was Sie damit meinen, aber unter der Überschrift "Bugs & Style Fixes" wollte ich nie sagen, dass Sie das nicht tun sollten.Ich wollte nur sagen, dass es vielleicht besser ist, Refactor-Commit-Refactor-Commit-Fix-Commit durchzuführen, als Refactor-Refactor-Fix-Commit.Ich weiß, dass ich ein bisschen extrem bin, wenn es darum geht, verschiedene Dinge in verschiedenen Commits zu trennen, aber ich habe gesagt, dass der Bugfix, wenn er ein paar Zeilen unter dem Refactoring liegt, möglicherweise dazu beigetragen hat, das Problem zu deeskalierenetwas, wenn es sich um separate Commits handelte.
    akaioi
    2017-11-13 12:29:13 UTC
    view on stackexchange narkive permalink

    Ich habe eine Reihe von Antworten mit der Aufschrift "Lass es los" gesehen. Dem kann ich nicht zustimmen, da das Problem immer wieder auftauchen wird.

    Ein Team braucht Standards, um solche Argumente zu vermeiden. Ich würde sagen, Sie sollten noch einmal mit Ihrem Kollegen sprechen, sobald die Gemüter etwas nachgelassen haben. Bitten Sie ihn, die Codierungsstandards mit Ihnen zu besprechen und gemeinsam - wenn möglich - herauszufinden, wie der Code Ihrer Meinung nach organisiert sein sollte. Wenn Sie sich einigen können, coolio. Wenn nicht, erkennen Sie ohne Groll, dass Sie sich nicht auf derselben Seite befinden, und lassen Sie sich von dem Manager bei der Lösung des Problems helfen.

    Sie haben Ihr spezielles Beispiel gelöscht (was ich für schade hielt, bietet es einige Zusammenhänge), aber lassen Sie mich nur eines hinzufügen ... Dieser eine möglicherweise schwierige Teil (Erhöhen der Index-Modulo-Anzahl, um wieder auf 0 zu kommen) sollte für J Random Programmer verständlich sein, aber es würde nicht schaden, einen Quickie einzuspielen Kommentar oben in der Zeile als Erinnerung ...; D

    Ich stimme zu, dass das spezifische Beispiel hilfreich war und mit dem Modulo zusammenhängt: Da er die Indexberechnung nicht leichter lesbar gemacht hat, hat er die Indexberechnung geändert.Es war oldindex + 1> = count?0: oldIndex +1;Neu ist altIndex +1% Anzahl.oldIndex-Wert 4 und eine Anzahl von 3, old = 5> = 3 resultieren 0. New = 5% 3 resultieren 2. Vielleicht passiert das immer noch nicht ... Code hat sowohl Syntax als auch Semantik.Das Ändern der Semantik wirkt sich auf die Lesbarkeit aus - es ändert das Konzept, auch wenn es das Ergebnis nicht ändert.Das Beheben eines Grenzfehlers in einer for-Schleife ändert die Absicht nicht und kann möglicherweise mit LINQ neu geschrieben werden.
    IMO in diesem Fall änderte das Modulo nicht nur den berechneten Wert, sondern auch das Konzept dessen, was geschah.Jetzt ist der oldIndex ein umhüllbarer oder kreisförmiger Index, bei dem 0, 10 und 2.145.690 alle gleich sind und für eine Zählung von 10 gleichermaßen gültig sind.
    Flummox - don't be evil SE
    2017-11-13 19:14:29 UTC
    view on stackexchange narkive permalink

    Ich glaube nicht, dass Sie das loslassen können: Ihr Kollege schützt den Code, den er geschrieben hat, sehr. Jedes Mal, wenn Sie einen Code ändern, den er geschrieben hat und der keinen Fehler aufweist, wird er sehr wahrscheinlich mit Ihnen darüber sprechen.

    Und Ihr Kollege versucht, Sie zu schikanieren. Machen Sie hier keinen Fehler.

    Zunächst einmal ist der Code, an dem Sie beide arbeiten, weder sein noch Ihr Code. Es gehört demjenigen, der Sie bezahlt.

    Zweitens sollten Sie nicht tun, was er sagt, dass Sie tun sollten, es sei denn, er ist Ihr Chef, was er nicht ist. Sie sollten tun, was Ihr Arbeitgeber von Ihnen verlangt.

    Drittens Ich stimme Ihnen zu, dass Sie die Dinge besser belassen sollten als das, was Sie gefunden haben, damit der Code besser lesbar ist Gute Sache.


    Sie möchten Ihr Leben also nicht für 3 Codezeilen komplizieren. Gut auf dich! Aber was werden Sie tun, wenn dies das nächste Mal passiert?

    Ich schlage vor, Ihren Teamleiter / Manager beim nächsten Mal einzubeziehen. Siehe Punkte eins, zwei und drei.

    Obwohl alle Punkte gültig sind, ist mir diese Situation passiert und ich kann raten, Konflikte und Skalierungen zu vermeiden.Die Leute sind nicht logisch, der ältere Mann kann als Beleidigung fallen. "Ihr Code ist lahm, ich werde alles so ändern, dass Sie erbärmlich aussehen." Ja, die Leute können so sensibel sein.Das Management ist immer mit der Hand voller Probleme und kann denken: "Oh Gott, jetzt muss ich meine Zeit damit verschwenden, Konflikte zwischen zwei großen Kindern zu lösen, und warum die neuen Leute Zeit damit verschwenden, Arbeitscode zu reparieren, egal ob es hässlich ist oder nicht."Natürlich hängt es von vielen Kollegen ab.Wenn ich der Senior bin, kann es mich nicht interessieren.
    Konflikte mit Teammitgliedern sind der schnellste Weg, um Ihr Leben unglücklich zu machen
    @jean, stimmt zu, dass Konflikte mit Teammitgliedern miserabel sind, aber der Kollege hier könnte eine solche Situation beginnen.Ich denke, diese Situation lässt sich am besten lösen, indem man sie zum Problem des Teamleiters macht, es ist sein / ihr Team.
    IMil
    2017-11-13 17:55:35 UTC
    view on stackexchange narkive permalink

    Während Ihr "älterer" Peer möglicherweise überreagiert hat, sollten Sie auch die Möglichkeit in Betracht ziehen, dass er in gewisser Weise Recht hatte.

    Leider haben die Änderungen den Code selbst entfernt: Vielleicht ist dies für die meisten in der Regel besser Nicht-IT-Benutzer, aber in diesem Fall ging eine wichtige Information verloren.

    Aus meiner Sicht haben Sie die Lesbarkeit von Code durch die meisten formalen Metriken verbessert: Die Bedingungen sind logischer organisiert. Es gibt Zahnspangen und so. Ihre Einführung des Operators % (ganzzahliger Rest) ist jedoch ein cleverer Trick, der 90% der Nachwuchsentwickler und anscheinend auch einige Senioren verwirren wird. Übermäßig ausführlicher Code ist schlecht, redundante Überprüfungen sind schlecht, aber clevere Tricks sind einfach schrecklich, es sei denn, Sie sind sicher, dass alle Entwickler mindestens so clever sind wie Sie. Und Sie haben bereits den Beweis, dass dies nicht der Fall ist.

    Auch wenn in Ihren Unternehmensdokumenten angegeben ist, dass Sie "Code korrigieren sollten, der nicht mit diesem Stil geschrieben wurde", ist es wahrscheinlich besser, dies zu erwähnen solche Änderungen am ursprünglichen Autor, wenn er oder sie verfügbar ist. Eine kurze Nachricht im Sinne von "Schau, ich hatte Probleme beim Debuggen dieses Codes. Glaubst du nicht, dass er auf diese Weise besser lesbar ist?" hätte euch beiden etwas peinlich sein können.

    +1 für die Eingabe von Eingaben vor der Änderung.Das kann solche Situationen bereits entschärfen, bevor sie eintreten.Die meisten Menschen mit einem so starken Gefühl für Code-Besitz sind mit Änderungen einverstanden, wenn sie ihre Spuren hinterlassen oder dies gemeinsam tun können.
    Ein Trick ist nur dann klug, wenn er funktioniert.In diesem Fall ändert die Verwendung von% anstelle der Bedingung das Verhalten.Der resultierende Code ist möglicherweise falsch.Tricky korrekter Code ist immer besser als "klarer" falscher Code.Natürlich können Sie mit Sorgfalt einen klaren und korrekten Code erzielen.
    @Brandin IMHO gab es keine Verhaltensänderung.Der ursprüngliche Code sagte im Grunde: (wenn x + 1> = Länge, dann 0 sonst x + 1).Der clevere Trick bestand darin, es als ((x + 1)% Länge) umzuschreiben.Das ist genau das gleiche.Der Hauptunterschied ist, dass der Cleaver Trick nicht offensichtlich ist.
    Bryan Goggin
    2017-11-12 22:35:01 UTC
    view on stackexchange narkive permalink

    Wenn Sie neu sind, ist es normalerweise eine gute Idee, sich etwas Zeit zu nehmen, um die Dynamik zu beobachten und ein Gefühl für das Team usw. zu bekommen, bevor Sie es auf sich nehmen, große Änderungen vorzunehmen. Eine gute Faustregel lautet: "Wenn es nicht kaputt ist, reparieren Sie es nicht" oder eine Folge davon: "Wenn es kaputt wäre, hätte es inzwischen jemand repariert." Wenn der fragliche Code ein großes Problem wäre, würde er wahrscheinlich (oder zumindest sollte inzwischen behoben sein. Es ist möglich, dass ein Code, auf den Sie bei diesem Job stoßen, repariert werden muss, aber warten Sie bis Sie sind mit dem System der Gruppe besser vertraut, bevor Sie entscheiden, ob ein solcher Code geeignet ist.

    Trotz des Aufwands für die Entwicklung universeller Kodierungs- / Dokumentationsstandards hat JEDER ARBEITSPLATZ IHRE EIGENEN STANDARDS und es braucht Zeit, um zu schließen, was genau das ist.

    Zu den ** CAPS ** ... Standards sind offensichtlich keine Standards, wenn sie "abgeleitet" werden müssen ... Sie sind Standards, wenn sie in Richtliniendokumenten klar definiert sind.Etwas, das nur als eine Reihe von sozialen Dynamiken und Konventionen existiert, die nur durch Beobachtung weitergegeben werden, ist kein Standard.Kein Arbeitsplatz kann dies durchsetzen, insbesondere nicht mit der Aggressivität des hier fraglichen Kollegen.Ich denke nicht, dass der Rat, sich hinzusetzen und die Klappe zu halten, gut ist;Wenn der Arbeitgeber des OP formelle Standards hat, ist er / sie zu Recht verblüfft über eine solche gegenteilige und nachdrückliche Belohnung für die Einhaltung (vorausgesetzt, er liest sie richtig).
    Ist das nur doppeltes [Schreien] (https://newrepublic.com/article/117390/netiquette-capitalization-how-caps-became-code-yelling) oder dreifaches Schreien, wenn alles in Großbuchstaben ** und fett ** ist?:) :)
    * Wenn es kaputt wäre, hätte es inzwischen jemand behoben. * - Sie haben offensichtlich nie an richtigem Legacy-Code gearbeitet.:) :)
    @underscore_d Oh vertrau mir, ich stimme jedem Wort zu, das du gesagt hast.Aber in der Praxis denke ich, dass wir beide wissen, wie verschwommen einige "Standards" sein können.
    @cale_b Nein, es war mehr zur Betonung.Weitere Antworten finden Sie, wenn Überschriften ermutigt oder in Großbuchstaben geschrieben sind.Ich habe das gerade mitten in einem Satz gemacht, um einen Hauptpunkt hervorzuheben.
    Danikov
    2017-11-13 17:22:05 UTC
    view on stackexchange narkive permalink

    Sie könnten diesen Vorfall loslassen, aber Sie sollten sich nicht falsch fühlen. Sie müssen nur Ihre Schlachten auswählen.

    Ihre Mentalität ist absolut korrekt. Wann immer wir alten Code erneut besuchen, müssen wir zuerst verstehen, wenn es nicht einfach zu warten ist. Sobald dieses Verständnis erreicht ist und wir den Weg zu diesem Verständnis nicht dokumentieren oder vereinfachen, verschwenden wir die Zeit weiterer Betreuer, ähnlich wie der ursprüngliche Programmierer diese Kosten auf Sie herabgestuft hat. Daher ist es die Pflicht eines jeden Programmierers, Code zu dokumentieren oder zu verbessern (letzteres ist weniger riskant, wenn Sie über eine robuste und umfassende Testsuite verfügen, die sicherstellt, dass Refaktoren und Verbesserungen die Funktionalität nicht beeinträchtigen). Das Hinterlassen von Kommentaren ist nicht ideal, aber es hinterlässt den Geruch, dass der Code in Zukunft etwas Liebe braucht.

    Ihr Team geht auch bei Codierungskonventionen richtig vor. Konventionen sind keine Regeln, daher muss es einen gewissen Spielraum geben, sie zu brechen, wenn dies sinnvoll ist. Sie stellen jedoch ein Ideal dar, das möglicherweise nicht immer erreicht wurde, und es ist praktischer, Codekonventionen für neuen und aktualisierten Code durchzusetzen, als eine umfassende Umgestaltung vorzunehmen. In einem idealen Projekt sollte der Code niemals so aussehen, wie ihn eine bestimmte Person geschrieben hat. Auf diese Weise können alle Entwickler ihr Ego an der Tür überprüfen und den Code als Code des Teams behandeln. Dabei müssen sie sich eher um die Codequalität kümmern als darum, wer was geschrieben hat.

    Dies bringt uns zu Ihrem Kollegen. Ihr Verhalten ist nicht ungewöhnlich, wie Sie vielleicht denken, da Programmierer dazu neigen, stolz und eigenverantwortlich auf ihren Code zu sein (oder manchmal andere zu beschuldigen, nur um sich selbst in der Geschichte zu sehen) und trotz der Bemühungen, sich dagegen zu wehren, das Ego entwickeln können . Andere widersetzen sich überhaupt nicht. "Mein Code" ist eine schlechte Einstellung, der gesamte Code sollte dem Team gehören. Es gibt eine Inkonsistenz zwischen seiner Behauptung, dass er Dinge so codiert hat, dass sie für das Team verständlich sind, wenn dies gegen die Codierungsrichtlinien des Teams verstößt. Er macht deutlich, dass es so codiert ist, dass es zuerst für ihn und nicht für das Team verständlich ist, und er ist verärgert darüber, dass Sie sein Verständnis durch die Kühnheit, Dinge zu ändern, ruiniert haben (jeder gute Code sollte so geschrieben sein, dass er leicht zu warten und zu löschen ist). nicht unsterblich sein).

    Es wird schlimmer, wenn er behauptet, dass Sie seinen Code nie verstehen können und droht, seinen Einfluss zu nutzen, um Sie aus Ihrem Job zu entlassen. Das allein ist massiv unprofessionell, aber als Reaktion auf ein wenig Formatierung wird es enorm überproportional.

    Sie müssen Ihre Schlachten auswählen und ich würde die Formatierungsseite der Dinge loslassen. Wenn Sie neu im Team sind und jemand sagt, dass Sie die Code-Konvention nicht einhalten, können Sie nur auf seine Erfahrung zurückgreifen und vorschlagen, die Dokumentation zu aktualisieren, wenn sie irreführend geworden ist. Wenn dies zu Reibungsverlusten führt, müssen Sie sich an Ihren Chef wenden, da das Halten eines Standards auf Papier und eines anderen in der Praxis (insbesondere auf Geheiß einzelner Entwickler) nicht übereinstimmt und untergräbt.

    Ich würde mich jedoch viel eher auf die Bedrohung konzentrieren, die auf Sie gerichtet ist. Wenn es mündlich geschehen wäre, hätten Sie zu diesem Zeitpunkt keine guten Beweise und Sie hätten zu diesem Zeitpunkt keine gute Möglichkeit, zu handeln, aber ich würde in Zukunft sehr vorsichtig mit ihm umgehen und versuchen, alles, was er sagt, schriftlich zu erhalten, z. Interagiere so oft wie möglich per E-Mail. Wenn er Sie erneut schriftlich bedroht, können Sie mit Ihrem Chef darüber sprechen. Nach den Geräuschen der Dinge ist sein Ego so zerbrechlich, dass Sie früher oder später wieder auf Probleme mit ihm stoßen werden.

    Wo Sie möglicherweise auf Probleme stoßen, ist, dass Sie die Laie nicht kennen von dem Land. Wenn dieser Typ wirklich so schlecht ist, wie er scheint, ist es möglich, dass große Teile des Codes von ihm geschrieben wurden und von niemandem außer ihm nicht mehr gewartet werden können. Als solcher hat er sich effektiv unerwünscht gemacht, da das Unternehmen es sich nicht leisten kann, ihn zu verlieren, was sein schlechtes Verhalten ermöglicht hat. Dies kann kurz- bis mittelfristig gut für die Arbeitsplatzsicherheit sein, langfristig ist es jedoch entartet, kontraproduktiv und kann Ihren Ruf ruinieren. Streben Sie nicht danach.

    Achten Sie in diesem Sinne darauf, dass Sie das Unternehmen nicht in die Lage versetzen, Entscheidungen zu treffen, da die Interessen des Unternehmens an erster Stelle stehen. Behandeln Sie Ihren aktuellen Job als Lernerfahrung im Umgang mit schwierigen Menschen. Verbringen Sie Zeit mit Ihren Kollegen und finden Sie heraus, wie sie mit diesem Kerl umgehen, und verpassen Sie nicht die Gelegenheit, auch andere Dinge von ihnen zu lernen. Behalten Sie in der Zwischenzeit andere Möglichkeiten im Auge und seien Sie bereit, auf Ihren Füßen zu landen, falls er die Schlagkraft hat und Sie wegen eines anderen wahrgenommenen Verstoßes rauswirft.

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

    Die Antwort darauf hängt stark von der allgemeinen Herangehensweise an die "Prozesseinhaltung" innerhalb des Unternehmens ab, und Sie sollten bereits ein Gefühl dafür haben.

    Ich habe in einem Unternehmen gearbeitet, das, auf Papier, ISO9001 zertifiziert, aber der CEO nervte uns immer mit Angebotsanfragen, die durch schnelle und unvollständige Telefonanrufe gestellt wurden, obwohl wir ein Anfrageformular hatten, in dem alle Informationen gesammelt werden konnten. Sie vermuten wahrscheinlich, dass in diesem Fall die Durchsetzung von Standards ein verlorener Kampf war.

    Sie haben zwei Alternativen:

    1. Das Unternehmen hat eine Kultur der Prozesseinhaltung : Sie haben Recht, die Kodierungskonvention des Unternehmens zu befolgen, und wenn die Sache eskaliert, stellen Sie einfach klar, dass Sie den Standard befolgt haben.
    2. Die Einhaltung von Prozessen erfolgt nur auf dem Papier : Vergessen Sie die Handbuch, und folgen Sie dem "Hinweis" dieses Senioren.
    3. ol>
    Die Einhaltung von Prozessen erfolgt nur auf dem Papier.Der Schlüssel zum Überleben, treffen Sie keine einseitigen Entscheidungen und stellen Sie sicher, dass Sie Ihre Einhaltung der Unternehmensprozesse in dreifacher Ausfertigung dokumentieren, wenn Sie können.Wenn jemand nach der tatsächlichen Produktivität sucht, müssen Sie möglicherweise Risiken eingehen und etwas Kreatives tun, aber achten Sie darauf, nicht aufzufallen.
    Hotlush
    2017-11-13 19:32:11 UTC
    view on stackexchange narkive permalink

    "Die Codekonvention besagt eindeutig, dass ich Code ändern kann, um ihn im Sinne der Codekonvention zu erstellen. Die Konvention wurde von seinem direkten Manager geschrieben."

    Ich kann nicht anders, als zu glauben, dass dies der Fall ist Eine schreckliche Anweisung. Auf jeden Fall ein Ticket generieren, um einen bestimmten Codeabschnitt zu "verbessern" oder auf den Standard zu bringen, aber "ändern, wenn Sie nicht mögen, wie er aussieht" ist ein Rezept für eine Katastrophe. Wie steuern Sie diese Änderungen, wenn sie als Teil eines anderen Fixes vorgenommen werden? Wie testen Sie die Änderungen?

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

    Meines Erachtens ist Ihr Problem mit dem Peer-Code die formale Code-Konvention, von der Sie ein anderes Verständnis haben als der Senior.

    Es gibt viele Tools, die den Code automatisch nach einer Reihe konfigurierbarer Regeln für Sie formatieren. Sie lassen nicht viel Raum für die Interpretation der Konventionen.

    In einer regelmäßigen Teambesprechung (vorzugsweise eine Scrum-Retrospektive) beziehen Sie sich möglicherweise auf Ihre Diskussion mit dem Senior und darauf, dass Sie mit der Situation unzufrieden sind, und schlagen dann vor, dass Ihr Team (oder zumindest Sie) startet Verwenden Sie einen solchen automatischen Formatierer und benennen Sie den Senior, um den Regelsatz zu konfigurieren.

    Wenn Sie das nächste Mal den Seniorencode ändern (um einen Fehler zu beheben), erfolgt die Neuformatierung durch ein von ihm konfiguriertes Tool. Ich bin gespannt, wie er dir dann die Schuld geben kann ...



    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
    Loading...