Wie gehe ich mit einem Kollegen um, dem die Codequalität nicht besonders am Herzen liegt?

Ich bin Softwareentwickler in einem kleinen Team. Ich bin das jüngste Mitglied mit ein paar Jahren Berufserfahrung, wurde aber in das (neu gebildete) Team aufgenommen, weil ich die meiste praktische Erfahrung mit der für das Projekt erforderlichen Technologie hatte.

Die Arbeit ist im vergangenen Jahr gut gelaufen, aber eine Sache, die mir ständig auf die Nerven geht, ist der qualitativ minderwertige Code, den unser ältestes Mitglied festlegt. Ich persönlich bin sehr streng mit der Codequalität und dem Stil und überprüfe immer, dass alle meine berührten Dateien keine neuen Probleme mit unserem Linter, StyleCop usw. verursachen. Er ignoriert diese jedoch meistens. Er sieht es als nicht wichtig an und möchte sich anscheinend eher auf die Funktion als auf die Form konzentrieren.

Jetzt macht es mir nichts aus, wenn jemand eine doppelte Leerzeile oder eine falsch positionierte geschweifte Klammer eincheckt, aber leere catch-Anweisungen, fehlende Nullprüfungen oder schlecht benannte Klassen sind Dinge, die meiner Meinung nach nicht auf unserem Hauptzweig vorkommen sollten. Wir haben derzeit keine dedizierten Code-Reviews und ich sehe mich derzeit nicht in der Lage, darauf zu drängen.

Normalerweise habe ich kein Problem damit, dies mit meinen Kollegen zu besprechen (wir alle machen Fehler, ich selbst eingeschlossen), aber ich habe Probleme, dies mit ihm zu besprechen. Er ist schon viel länger im Unternehmen und scheint bei Diskussionen über seinen Kodex etwas empfindlich zu sein. Mit anderen Worten, ich möchte ihn nicht verärgern, weil ich meinen aktuellen Job mag und wahrscheinlich noch viel länger mit ihm arbeiten werde. Er ist nicht mein Vorgesetzter; wir sind formal gleich.

Soll ich das mit meinem Teamleiter besprechen? Ich bin mir nicht sicher, ob ich hier nur übereifrig oder zu streng bin, aber da das Produkt für unser Unternehmen in Zukunft sehr wichtig sein wird, möchte ich so früh wie möglich nach Qualität streben.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
Mir passiert auch, dass ihre Arbeiten wie eine Schulaktivität aussehen.

Antworten (16)

Soll ich das mit meinem Teamleiter besprechen?

Nein. Das jüngste Mitglied mit nur ein paar Jahren Erfahrung sollte sich bei Teamleitern nicht über die Codequalität des ältesten Mitglieds beschweren.

Lassen Sie den Teamleiter sich darum kümmern – es gibt absolut keine Möglichkeit, dass Sie ihnen etwas sagen, was sie nicht bereits wissen. Die Gründe, warum sie es tolerieren (oder es vielleicht sogar als Gegenleistung für eine schnellere Markteinführung fördern), könnten mit der Zeit deutlicher werden.

Wenn die Kultur (wie durch das Verhalten des leitenden Entwicklers und Teamleiters belegt) nicht Ihren Qualitätspräferenzen entspricht, müssen Sie sich möglicherweise woanders umsehen.

Allerdings kann auch ein jüngeres Mitglied mit gutem Beispiel vorangehen. Stellen Sie sicher, dass Ihre Arbeit erstklassig ist und die Qualität über jeden Zweifel erhaben ist. Stellen Sie sicher, dass Sie alle Ihre Fristen einhalten. Stellen Sie sicher, dass Sie anderen helfen, wo es nötig ist. Vielleicht merken es andere und wollen das auch.

Wir haben derzeit keine dedizierten Code-Reviews und ich sehe mich derzeit nicht in der Lage, darauf zu drängen.

Später, wenn Sie sich innerhalb der Gruppe als lokaler Experte für Codequalität etabliert haben, können Sie auf Prozessänderungen drängen. Vielleicht könnten Sie anbieten, zu diesem Zeitpunkt Code-Reviews zu leiten oder dabei helfen, die Programmierstandards Ihrer Gruppe zu verfeinern und durchzusetzen.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben . Wenn Sie mit einer Antwort nicht einverstanden sind, ist das Feld "Diese Frage beantworten" ein perfekter Ort, um eine abweichende Perspektive zu schreiben (zusammen mit der Möglichkeit, diese Antwort abzulehnen).
Das ist ein sehr schlechter Rat. Sie sind ein Mitglied des Teams, Sie haben ein begründetes Interesse an der Wartbarkeit des Codes und es ist Teil Ihrer Arbeit. Sie sollten auf jeden Fall mit Ihrem Teamleiter darüber sprechen. Teamleiter sind nicht allmächtig, wir lesen nicht jede Zeile des Codes, sodass ihnen möglicherweise kein bestimmtes Problem bewusst ist. Wenn dies akzeptable Codierungsstandards sind, wird Ihr Lead erklären, warum. Aber Sie sollten auf keinen Fall darauf warten, dass diese Gründe im Laufe der Zeit auf magische Weise offensichtlich werden. Sie werden sehr gerne herausfinden, dass der einzige Grund ist, "weil es immer so gemacht wurde".

Sie entwickeln Code für ein Unternehmen, also müssen Sie nicht nur wie ein Entwickler denken, sondern auch wie ein Geschäftsmann. Diese Denkebene wächst normalerweise, wenn Sie mehr Dienstalter erreichen.

Alle Codierungsrichtlinien, selbstdokumentierender Code, wartbarer Code und andere glänzende Dinge, die von verschiedenen Experten in Büchern erwähnt werden, sind großartig zu befolgen, aber wenn Sie die Leute davon überzeugen wollen, ihnen zu folgen, brauchen Sie einen überzeugenderen Grund als diesen:

Dinge, die meiner Meinung nach nicht in unsere Hauptfiliale gehen sollten

Sie benötigen Daten, um Ihre Ansprüche zu sichern. Sie können sicherlich zu Ihrem Chef gehen und vorschlagen, all die glänzenden Sachen zu übernehmen (obwohl Sie ein Junior sind), aber seien Sie darauf vorbereitet, die Frage zu beantworten: "Welche Vorteile hätte das für das Projekt?"

Vage Aussagen wie „es macht den Code lesbarer/wartbarer/prüfbarer/etc.“ (oder viel schlimmer, "so und so empfiehlt es") überzeugt niemanden, seine bewährten Methoden zu ändern.

Denken Sie daran, dass der "arme" Code Ihrer Vorgesetzten seit Ewigkeiten die Arbeit erledigt. „Job erledigen“ gehört zu den wichtigsten Dingen im Geschäftsleben. Den Leuten zu sagen, dass es einen besseren Weg gibt, ihre Arbeit zu erledigen, nur mit Ihrer „Meinung“, um sie zu untermauern, wird sie nicht davon überzeugen, das Risiko einzugehen.

Ich würde Sie auf jeden Fall ermutigen, das Team dazu zu drängen, das glänzende Zeug zu übernehmen, aber seien Sie bereit, die erforderliche Anstrengung zu unternehmen, um die Daten zu sammeln, die Ihre Behauptungen stützen.

Als zusätzlichen Tipp hoffe ich, dass Sie nicht den Ton verwenden, den Sie in diesem Beitrag verwendet haben, wenn Sie sich daran machen, Ihre Senioren zu überzeugen. „Haha, ihr seid scheiße, ich werde euch beibringen, wie es geht“ wird definitiv nicht funktionieren, „Ich habe einen Vorschlag zur Verbesserung von X, und ich denke, das sind die Gründe, warum wir davon profitieren würden. Was denkst du?“ hat deutlich bessere Chancen angenommen zu werden.

Ich bin mir nicht sicher, ob es Ihre Absicht ist, aber wenn Sie über "glänzendes Zeug ... in Büchern" sprechen, könnte es so wirken, als ob Sie dachten, dass der Inhalt irgendwie bedeutungslos ist. Genau die Bücher und andere Branchenexperten, die es seit Jahrzehnten gibt, sind die Daten, die dies untermauern. In diesem Fall muss das OP seine Bedenken zusammenfassen (z. B. „das Arbeiten mit dem Code von X ist schwieriger, zeitaufwändiger und weist mehr Fehler auf als anderer Code, mit dem ich gearbeitet habe, bei dem Best Practices befolgt werden usw.“). Sie werden nicht lesen, was er vorschlägt, und sie werden sich nicht um die Codequalität kümmern, weil sie nicht mit sich selbst arbeiten müssen.
Das Vorhandensein von Code-Metriken (z. B. pro Mitglied eingeführte Fehler) kann gute Daten sein, um sie aus dem Repo zu extrahieren, muss jedoch sorgfältig durchgeführt werden, insbesondere wenn der Senior eine Schneeflocke darüber ist ...
@ray Ich denke, was er/sie zu sagen versucht, da diese Theorie auf dem Papier großartig ist, aber wenn Ihnen ein Kunde im Nacken sitzt und jetzt Ergebnisse will , müssen Theorie und glitzernder Code der Produktivität in den Hintergrund treten. Und in meiner zugegebenermaßen kurzen Zeit in dieser Branche sind Produktivität und Qualität nicht immer korreliert.
@8protons Alle Kunden wollen immer Ergebnisse „jetzt“, aber das ist nicht auf die Softwareindustrie beschränkt. Auch Fluggesellschaften wollen ihre Flugzeuge „jetzt“ und für weniger Geld; sollten ihre Ingenieure dafür entschuldigt werden, dass sie deswegen Abstriche bei der Qualität machen? Flugzeuge sind auch auf Software angewiesen, also ist es nicht so, dass dies nur auf den physischen Rahmen beschränkt ist ... und ich bin sicher, dass Ihnen immer noch ein verärgerter Kunde im Nacken sitzt, wenn die Software nicht stabil ist . Qualität wird sicherlich diesen Punkt treffen. Wenn Sie „Produktivität“ als „Quantität“ definieren, dann wäre es auch sehr „produktiv“, 100 % Ihrer Zeit mit der Fehlerbehebung zu verbringen.
@ray Ich sage nur, dass ich gesehen habe, wie Leute in X Stunden guten Code geschrieben haben und andere in 2 * X Stunden nahezu fehlerfreien, hübsch aussehenden Code geschrieben haben, und am Ende des Tages war der Chef mit x zufriedener und der Kunde war zufriedener darüber, dass ihm X Stunden in Rechnung gestellt wurden. Es ist alles umständlich. Sie können soliden Code schreiben, ohne dass er absolut kugelsicher sein muss
@8protons Ich verstehe, was Sie sagen, und Sie haben Recht: Bessere Qualität hat ihren Preis. Ich würde das nicht diskutieren. Was ich sagen will ist: das gilt überall in allem. „Es funktioniert“ ist nicht die einzige relevante Maßnahme. Sogar die Titanic sank nicht sofort, nachdem sie das Wasser berührt hatte; Die technischen Fehler wurden aufgedeckt, nachdem die Tragödie eingetreten war. Mein Punkt ist, dass Abstriche beim jetzigen Zeitpunkt Sie später durch angesammelte technische Schulden kosten werden . Zukünftige Aufgaben werden zunehmend länger dauern usw. Früher oder später wird die Rechnung immer fällig.
@ray Sie sollten die vollständige Antwort lesen, bevor Sie Kommentare posten. Ihre Bedenken werden später angesprochen, insbesondere in den letzten 2 Absätzen. Der Punkt hier ist, OP sollte den Chef / Kunden von den Vorteilen überzeugen, 2X Zeit aufzuwenden, um die Arbeit zu erledigen, die zuvor in X-Zeit erledigt wurde. Wenn er nur sagt: „Meiner Meinung nach ist der aktuelle Code schlecht“, können sie antworten: „Meiner Meinung nach liegen Sie falsch“. Das hilft OP nicht, etwas zu ändern. OP sollte seinen Anspruch stattdessen mit Daten wie den von Ihnen geposteten Kommentaren verteidigen und es nicht zu einem Meinungswettbewerb machen.
Denken Sie außerdem daran, dass das OP hier ein Junior-Entwickler ist. Wenn er Dinge ändern möchte, muss er von den Seniors ein Buy-In erhalten. Dabei hilft ihm seine konfrontative Haltung, die er hier einnimmt, nicht. Den Senioren zu sagen, dass "Sie ein Idiot sind, tun Sie die Dinge, wie ich es sage", wird nicht einmal mit den weltbesten Experten und all den Daten funktionieren, die Ihren Vorschlag stützen.
@MaskedMan Ich habe den vollständigen Beitrag gelesen. Außerdem plädiert niemand dafür, diesbezüglich „konfrontativ“ zu sein. Ein Junior zu sein bedeutet nicht automatisch weniger kompetent oder informiert usw.; Es ist wahrscheinlich eher eine Frage der Büropolitik und des Einflusses als alles andere. Ich habe gesehen, dass Nicht-Software-Mitarbeiter nur aufgrund ihrer Zeit im Unternehmen in leitende Ingenieurpositionen versetzt wurden, nicht weil sie auf diesem Gebiet qualifiziert sind. Wenn das OP wirklich nur sagt, was Sie vorschlagen, haben Sie Recht, dass es nicht hilfreich ist. nicht unbedingt falsch, aber nicht überzeugend. Die Einbeziehung des Kunden in technische Diskussionen erscheint übertrieben.
@ray Der "konfrontative" Teil stammt direkt aus der Frage des OP, wo er darüber spricht, wie ihm der Code des Seniors "auf die Nerven geht". Ich warne den OP nur davor, diese Stimmung zu tragen, wenn er rausgeht, um Leute davon zu überzeugen, Dinge zu ändern. Noch einmal, ich sage keineswegs, dass OP als Junior bedeutet, dass er weniger kompetent ist, nur dass er sich mehr anstrengen müsste, um die Leute zu überzeugen. "Meiner Meinung nach sollte dieser Kodex nicht in der Hauptbranche sein" ist etwas, mit dem ein Senior davonkommen kann, weil er sich einen Ruf aufgebaut hat, so dass seine "Meinung" Wert hat, ein Junior muss sich diesen Ruf verdienen.
Nur um das klarzustellen: Wenn mich ein leitender Softwarearchitekt bittet, Code auf eine bestimmte Weise zu schreiben, weil „das seiner Meinung nach der bessere Ansatz ist“, würde ich ihm wahrscheinlich folgen, ohne zu argumentieren. (Ich werde ihn sicherlich fragen , aber das ist, damit ich lernen kann, nicht, weil ich von seiner "Meinung" nicht überzeugt bin.) Wenn ein Praktikant oder ein Junior-Entwickler sagt, schreibe Code auf diese Weise, weil in seiner "Meinung", es besser ist, werde ich ihm sicherlich viele Fragen stellen, bevor ich überzeugt bin. Ich hoffe, das verdeutlicht, was ich hier sagen wollte.
@MaskedMan Ich denke du hast recht. Ich dachte, das "konfrontativ" beziehe sich auf etwas, das ich in den Kommentaren oder so gesagt hatte.
@ray "Die Rechnung wird immer fällig" Richtig , ray, oder sollte ich sagen ... Mordo ?
Ich liebe es, die Kommentare hier und auf Stack Overflow durchzugehen. haha, ich schwöre, Softwareentwickler haben im Allgemeinen KEINE sozialen Fähigkeiten und große Egos.
@CrazyPaste Und ich bin mir sicher, dass dein Kommentar nicht gepostet wurde, um unser eigenes Ego zu stärken, oder? ;)
@MaskedMan Ich verstehe deinen Punkt. Das Problem, das ich damit habe, ist, dass Sie mehr darauf achten, wer etwas sagt, als darauf, was gesagt wird. Zum Besseren oder Schlechteren habe ich mehr "ältere" Leute gesehen, die Dinge sagen, die völliger ignoranter Unsinn sind. Z.B. "Sie brauchen keine Abfragen, um Daten in eine Datenbank einzufügen" (ein aktuelles Zitat). Wenn jemand behauptet, sein Ansatz sei ein "besserer Ansatz", möchte ich eine gültige Begründung dafür hören; Ich muss die Behauptung von jemandem nicht blind akzeptieren, aus welchem ​​​​willkürlichen "Grund" er auch immer kommen kann (z. B. Titel, Dienstalter usw.), und das sollten Sie auch nicht :)

Ich habe das in meiner vorherigen Firma erlebt. Es endete nicht gut.

Wir haben zu zweit den Code geschrieben und der ältere Kollege war ein großer Fan von Copy-and-Paste-Programmierung. („Denken Sie daran, das ist kein Problem.“) Derselbe Codeblock wurde ungefähr 50 Mal um die Codebasis herum verstreut, wobei dieselbe Gedankenvorlage befolgt wurde. Damit konnte ich leben, obwohl ich das nicht so mochte. Null-Checks durch try...catchmit leerer Ausnahmebehandlung waren üblich. Nach einiger Zeit fing ich an, das Zeug zu refaktorisieren und mir wurde gesagt, dass ich die Arbeit behindere, weil er nach den Änderungen nicht mehr in der Lage ist, "aus seinem Gedächtnis" zu programmieren, indem er sich auf die ältere Struktur verlässt. Trotz der Qualität der Fixes und der Entfernung vieler Fehler wurde mir gesagt „Ich habe den Code beschädigt“, weil sich im Geschäftsleben niemand um kleinere Codeprobleme kümmert und das einzige Kriterium darin besteht, die Arbeit in minimalen Stunden zu erledigen und zufriedene Kunden zu bekommen. Die Arbeit mit dem Code führte zu meiner Unzufriedenheit und ich verpasste auch Fristen, die ich nicht schnell genug "kopieren und einfügen" konnte, weil ich das Gefühl hatte, nicht so ein "schneller und unkomplizierter Programmierer" werden zu wollen, wie es von mir erwartet wurde.

Ich verstehe, dass es unter Programmierern einige "praktische" Leute gibt. Sie sind oft sehr produktiv und achten nicht besonders auf Details. Wenn Ihnen dieser Ansatz nicht gefällt, überlegen Sie, ob Sie im Unternehmen bleiben oder es verlassen.

Ich denke, möglicherweise hat Ihr "Fehler" den Code geändert, für den Sie keinen Auftrag oder Grund hatten, ihn zu ändern. Ich mache dasselbe, aber nur, wenn mir gesagt wurde, dass ich Änderungen in diesem Bereich vornehmen soll. Wenn ich bei Scrum erkläre, was ich getan habe, sage ich: „Bei der Durchführung dieser Änderung habe ich viele unnötige Codeduplizierungen beobachtet, also habe ich dies umgestaltet, damit wir in Zukunft Änderungen an diesem Bereich schneller vornehmen können“. Es war nie ein Problem. Natürlich könnte auch die Unternehmenskultur eine Rolle spielen.
@Michael - Ich habe keine Details erwähnt, aber ich habe nur Klassen geändert, in denen ich einige andere Änderungen vorgenommen habe, die denen ähneln, die Sie gesagt haben. Sie erwähnten Scrums und wir hatten keine. Wenn es welche gäbe, könnten wir wahrscheinlich besser herausfinden (und vereinbaren), welche Änderungen akzeptabel sind und welche über die Notwendigkeit hinausgehen. Dies hätte abgefangen werden können, wenn es dort Code-Reviews gegeben hätte, aber wir hatten keine. Es war eine große Lektion, wie man manche Dinge nicht tut.
Kampferprobter Code ist sehr wertvoll. Wenn Sie diesen Code ändern, muss er erneut getestet werden, bevor er in Produktion geht. Ihr Team möchte höchstwahrscheinlich gefragt werden, ob Sie darauf vorbereitet sind, bevor Sie etwas anderes als vereinbart anfassen.

Ich glaube nicht, dass du viel in der Situation kannst. Wenn Sie Qualitätsprobleme mit Ihrem Teamleiter gegenüber einem hochrangigen Mitglied ansprechen, kann dies zu vielen unangenehmen Momenten und Gesprächen führen. (Es sei denn, es liegt ein schwerwiegender Fehler vor, aufgrund dessen der Code überhaupt nicht ausgeführt wird). Andernfalls könnten Sie als jemand wahrgenommen werden, der eine hohe Meinung von sich selbst (oder eine niedrige Meinung von anderen) hat.
Ich verstehe Ihre Besorgnis, und ich denke, Sie sollten in der Lage sein, diese Probleme anzusprechen, aber meiner Erfahrung nach laufen diese Dinge im Allgemeinen nicht gut.

Mein Vorschlag wäre, Ihr Bestes zu geben, um den Code in der gewünschten Qualität zu halten und andere tun zu lassen, was sie tun. Außerdem können Sie von Zeit zu Zeit kausal über die Codequalität sprechen, ohne mit dem Finger auf eine bestimmte Person zu zeigen. Irgendwann werden die Leute Ihre Bemühungen bemerken und alle Revisionsverläufe überprüfen können. Sie werden dich dafür erkennen. Außerdem befinden Sie sich möglicherweise irgendwann in einer relativ leitenden Position, in der Sie vom Team eine bessere Codequalität „verlangen“ können.

An diesem Punkt denke ich, dass Sie sich die zusätzliche Mühe machen und das Beste tun sollten, um die Codequalität selbst aufrechtzuerhalten und allen zu zeigen, dass Sie ein Trottel für einen sauberen Code sind!

Wir haben derzeit keine dedizierten Code-Reviews und ich sehe mich derzeit nicht in der Lage, darauf zu drängen.

Ja, das ist es, was Sie brauchen (auch wenn Sie nicht glauben, dass Sie es können).

Alles andere als regelmäßige Codeüberprüfungen wird diese Probleme nicht lösen.

Wenn Ihr Team groß genug ist, finden Sie jemanden, mit dem Sie wöchentliche Code-Reviews durchführen können. Sie brauchen nur zwei Personen, um loszulegen. Und wenn ein neuer Entwickler eingestellt wird, lassen Sie ihn mitmachen. Code-Reviews sind tatsächlich eine großartige Möglichkeit, das Onboarding durchzuführen. Natürlich wird dies Ihr unmittelbares Problem nicht lösen, aber vorausgesetzt, Sie finden einen anderen Teamkollegen, der bereit ist, mitzumachen, sollte es einfach sein, die Erlaubnis Ihres Teamleiters zu erhalten, den Ball zum Laufen zu bringen.

Verlassen Sie sich nur nicht darauf, dass dieser andere vorhandene Entwickler mitmacht, es sei denn, Sie haben bereits eine große Anzahl von Teammitgliedern, die daran teilnehmen (was Jahre dauern kann, aber letztendlich müssen Sie irgendwo anfangen, sonst werden Sie nie anfangen).

Und stellen Sie sicher, dass Sie dabei helfen, diese Code-Reviews so effizient und wertfrei wie möglich durchzuführen. Selbst wenn der Teamleiter Hilfe anbietet, verlassen Sie sich nicht darauf, dass er das Thema so gründlich recherchiert wie Sie und diese Code-Reviews so effizient wie möglich leitet, da dies im Grunde Ihre Idee ist, es zu versuchen.

Auch dies löst nicht Ihr unmittelbares Problem. Sie wollten seinen Code verbessern, nicht nur Ihren. Leider entstehen neue Gewohnheiten wie diese nicht einfach über Nacht. Sie brauchen Zeit, um sich zu entwickeln.

Bezüglich des Beitrags von Masked Man:

Was die Notwendigkeit von Daten betrifft, um Ihre Behauptungen in Bezug auf Nullprüfungen, Schluckfehler, schlechte Klassennamen usw. zu untermauern. Das Buch Code Complete enthält alle Daten, die Sie benötigen, um solche Behauptungen zu untermauern. Außerdem könnten Sie wahrscheinlich einige dieser Dinge innerhalb Ihrer Codebasis verfolgen, indem Sie Ihr derzeit vorhandenes Analysepaket verwenden. Sie könnten beispielsweise zählen, wie oft Ihre Anwendung stillschweigend fehlschlägt, selbst wenn eine wichtige Information fehlt.

Aber ich würde vorschlagen, dass Sie keine Zeit damit verschwenden. Es ist einfach schneller, den Fehler zu beheben, als zu versuchen, die Folgen dieses Fehlers im Auge zu behalten. Und da das Ego dieses Entwicklers auf dem Spiel steht, werden die Daten seine Meinung sowieso nicht ändern. Das Gleiche gilt für Ihren Teamleiter. Auch wenn er Ihnen im Prinzip zustimmt, muss er die Vorteile guter Programmierpraktiken gegen die Nachteile abwägen, die durch ständige Auseinandersetzungen mit Ihrem jeweiligen Teamkollegen entstehen.

Ich stimme dem Beginn von Code-Reviews mit einem anderen Teammitglied zu, insbesondere einem, das Sie respektieren.

Erstens weiß Ihr Kollege vielleicht, was er tut, und hat Gründe dafür. Wenn Sie beispielsweise eine agile Entwicklung durchführen und Kunden wöchentlich Prototypen zeigen, kann es eine absolut legitime Strategie sein, so viele Funktionen so schnell wie möglich zu implementieren, damit die Kunden/Benutzer das Design sehen und ihre Meinung dazu äußern können , und kümmern Sie sich später um Grenzfälle, Fehlerfälle und Codequalität, wenn Sie wissen, dass Sie sich auf die Anforderungen geeinigt haben.

Zweitens ist Ihr Kollege möglicherweise jemand, der gut darin ist, das große Ganze zu sehen, und schlecht darin, die kleinen Details durchzuziehen. Ich war an einer Reihe von Projekten beteiligt, bei denen diese Art von Person die Vision hatte und die Richtung vorgab und einen großen Beitrag zum Erfolg des Projekts leistete (obwohl solche Leute am Ende oft keinen Code selbst schreiben). In diesem Fall muss es jemanden geben, der sich um Details kümmert. Sie könnten diese Beschreibung von sich selbst erkennen (oder auch nicht), besonders wenn Sie sie ihnen auf positive Weise präsentieren. Versuchen Sie, ohne Anstoß zu erregen, herauszufinden, ob ihre Einschätzung der eigenen Stärken und Schwächen (und damit, wo sie Hilfe von Mitspielern benötigen) mit Ihrer übereinstimmt.

Versuchen Sie drittens, sich auf die Schwächen zu konzentrieren, die sich greifbar manifestieren, anstatt obsessiv zu werden, „wie Ihrer Meinung nach guter Code geschrieben werden sollte“. Vermeiden Sie subjektive Kritik (keine zwei Programmierer sind sich in allen Aspekten des guten Stils einig). Konzentrieren Sie sich auf die Bereiche des Codes, an denen Sie ein berechtigtes Interesse haben. Schreiben Sie Testfälle, die fehlschlagen, und protokollieren Sie Fehler dagegen. Fügen Sie dem Code Kommentare oder TODOs hinzu, z. B. „E/A-Fehler hier behandeln“.

Nichts davon rechtfertigt leere Fangaussagen und Schluckfehler!
Wenn Sie diese Kommentare hinterlassen, machen Sie sie nicht passiv-aggressiv. Ich hatte vor kurzem die Schadenfreude, jemanden leiden zu sehen, weil sein Teamkollege immer wieder Kommentare wie hinterließ // It'd sure be great if we knew what this did, im Gegensatz zu // TODO Document `fooBar` field and its property. Ebenso für // I wonder what this does if the user presses five keys at once?- das sollte sein // TODO Will crash if user presses five keys at once. Denken Sie auch daran, Fehler in Ihrem Fehlertracker zu protokollieren, nicht nur TODOs im Code.
"... es könnte eine vollkommen legitime Strategie sein, so viel Funktionalität wie möglich so schnell wie möglich zu implementieren". Meiner Erfahrung nach funktioniert diese Art von „wir verbessern die Qualität später“-Mentalität nicht. Es wird sich immer weiter verzögern, bis Sie ein unhaltbares Durcheinander haben. Wenn Sie in einem Monat einen kompletten (wenn auch beschissenen) Prototypen herausgebracht haben, wird Ihr Kunde wahrscheinlich unrealistische Erwartungen darüber entwickeln, wie schnell Sie in Zukunft liefern können.
Ich bin mir ziemlich sicher, dass die obigen Kommentare direkt zum Punkt der Poster gehörenno two programmers agree on all aspects of good style.

Sie sagen , dass Sie streng auf die Codequalität achten, aber Sie sind nicht verantwortlich, also spielt das aus Unternehmenssicht keine Rolle.

Was zählt, ist die Haltung des Unternehmens zur Codequalität.

Wenn es eine strenge Unternehmensrichtlinie gibt, können Sie diese verwenden, um jede Diskussion mit Ihrem Kollegen zu unterstützen, aber der Versuch, zu Ihrem Vorgesetzten zu gehen, führt zu einer Menge Konflikte, daher sollten Sie dies am besten wegen allgemeiner Stilbedenken vermeiden, die nicht zu einer Katastrophe führen.

Wenn es diesbezüglich keine strengen Unternehmensrichtlinien gibt, sind die einzigen Dinge, die ich in Betracht ziehen würde (entweder mit Ihrem Kollegen oder Vorgesetzten), Dinge anzusprechen, die wahrscheinlich dazu geführt haben oder in der Vergangenheit dazu geführt haben, dass der Code gebrochen wurde.

Gehen Sie zuerst auf Ihren Kollegen zu. Sagen Sie ihm nicht, wie die Dinge sein müssen (weil Sie nicht davon ausgehen sollten, dass Sie es besser wissen, und es gibt keinen schnelleren Weg, jemanden in die Defensive zu bringen). Fragen Sie ihn nach den Gründen dafür, es auf seine Weise zu tun, und antworten Sie mit einem Argument, das die damit verbundenen Probleme anspricht, falls Sie welche finden können (vielleicht hat er einen guten Grund, die Dinge so zu tun, wie er es tut).

Wenn das nicht funktioniert, können Sie dies mit Ihrem Vorgesetzten besprechen.

Seien Sie nicht anklagend oder erwähnen Sie das andere Teammitglied überhaupt nicht - bringen Sie einfach eines der Probleme zur Sprache und zeigen Sie auf ein oder zwei Beispiele in Ihrer Codebasis und fahren Sie mit dem gleichen bescheidenen Ansatz fort, der oben erwähnt wurde.

Ihr Vorgesetzter überprüft möglicherweise, wer den Code geschrieben hat (falls möglich), oder bittet Sie, dies zu überprüfen, und dies kann dazu führen, dass Ihr Vorgesetzter das Problem mit diesem Kollegen anspricht. Aber all dies liegt im Ermessen Ihres Vorgesetzten. Ja, dies könnte dazu führen, dass Ihr Kollege denkt, Sie hätten ihn „verraten“, also fahren Sie auf eigene Gefahr fort.


Da ich von einem erfahrenen Programmierer komme, sollten alle Dinge, die Sie sagen, idealerweise vermieden werden, aber keines davon ist unbedingt auf das "WIR ALLE WERDEN STERBEN!" Schwere. Ignorierte Ausnahmen oder fehlende Nullprüfungen können katastrophal sein, aber sie können manchmal auch funktional unnötig sein oder absichtlich weggelassen werden. Die Benennung von Klassen wirkt sich überhaupt nicht auf die Ausführung in irgendeiner mir bekannten Sprache aus (ungeachtet der Reflexion) und ist daher viel weniger schwerwiegend als die oben genannten Bedenken, die zur Laufzeit Probleme verursachen können, und ist im Allgemeinen auch vollständig meinungsbasiert.

Ich habe also das Gefühl, dass es Ihrer Argumentation schadet, alle drei Dinge mit ungefähr der gleichen Schwere zu versehen.

Aber es steht Ihnen natürlich frei, sich zu weigern, in einer Umgebung zu arbeiten, die Ihren Standards nicht entspricht, und Stilbedenken eskalieren, als ob es lebensbedrohlich ernst wäre.

Ein schlechter Codestil in Ihrer Codebasis ist eine „Tod durch 1000 Kürzungen“-Situation. Wie Sie sagen, ist nichts für sich genommen eine „Katastrophe“, aber wenn Sie einen Fehler nicht diagnostizieren können, weil ein leerer Fehler catch{}ihn verschluckt, werden Sie den Schmerz spüren. Wenn Sie doppelt so lange brauchen, um Ihren eigenen Code zu pflegen, wenn Sie nächstes Jahr darauf zurückkommen, werden Sie sich dumm vorkommen. Als Profis sollten wir uns weigern, in Umgebungen zu arbeiten, in denen grundlegende Ebenen des Codestils keine Richtlinie für neuen Code sind.
@Gusdor Niemand behauptete, der Code habe keinen Stil . Es ist nur so, dass der Stil so stilvoll ist wie die Kunst der Renaissance in einem Museum des Kubismus.
@WeckarE.Das ist kein Fehler. Das krachen, mit Stil.
@Gusdor Sie können sich weigern zu arbeiten, wo Sie wollen, aber es wird die meiste Zeit unmöglich oder wirklich schwierig sein, Ihre eigenen Codierungsstandards in einem Unternehmen durchzusetzen, in dem Sie ein Junior- (oder sogar Senior-) Entwickler sind.
@Dukeling Eigene Maßstäbe setzen? Ich stimme zu. Etablierte, überprüfbare Standards mit ausgereiften Tools wie StyleCop, FXCop und MISRA durchsetzen? Meiner Erfahrung nach viel einfacher.
Es kommt auf die Situation an. Wenn Sie in einem Unternehmen mit einem Hintergrund aus der Nicht-Programmierbranche tätig sind, wären die Prioritäten und Erwartungen anders. Beispielsweise wird es nicht wertgeschätzt, Anstrengungen zu unternehmen, um eine 3000-Zeilen-Datei mit Legacy-Code zu reparieren. Sie kümmern sich nur darum, solange der Code funktioniert.
Ich denke, das trifft den Nagel auf den Kopf. Ein Unternehmen existiert und produziert Produkte, um Gewinne zu erzielen. Wenn die Richtlinie des Geschäftsführers lautet, dass Funktionalität vor Form das Beste für maximalen Gewinn ist, dann brauchen Sie Zahlen und Statistiken, um ihn vom Gegenteil zu überzeugen. Es ist die Unternehmenspolitik, die hier geändert werden muss, um Ihr beabsichtigtes Ergebnis zu erreichen, nicht die Einstellung einer einzelnen Person.
Wenn die Person ein Senior ist und seit einiger Zeit Code wie diesen produziert, dann finden die Vorgesetzten das Endergebnis offensichtlich zumindest ausreichend, um ihre Geschäftsziele zu erreichen. Ihre Einstellung sollte dabei sein, den Kollegen zu vergessen und stattdessen zu prüfen, wie Ihr Ziel dabei dem Unternehmen hilft? Wenn Sie glauben, dass dies der Fall sein wird, beweisen Sie es den Vorgesetzten (ohne Rücksprache mit Kollegen) und lassen Sie sie alle Änderungen einleiten, die ihrer Meinung nach erforderlich sind.

Führen Sie obligatorische Code-Reviews durch.

Sie sind nicht in der politischen Position, eine solche Änderung der Politik einfach zu fordern, aber Sie könnten sie anderen Mitgliedern des Teams vorschlagen und ihre Zustimmung erhalten. Sobald eine deutliche Mehrheit von Ihnen zustimmt, bringen Sie es mit der größeren Gruppe zur Sprache. Hier ist ein guter Grund, warum Sie dies tun sollten: https://www.atlassian.com/agile/code-reviews

Unser Büro macht das und ich liebe es.

Dies ist ein lehrbarer Moment

Ich denke, es ist in Ordnung, sich an den Teamleiter zu wenden, wenn Sie dies als Lernmöglichkeit für Sie positionieren.

Teilen Sie dem Lead mit, dass Sie sich Sorgen um die Codekonsistenz machen und sicherstellen möchten, dass Sie den richtigen Standard befolgen. Sollten Sie schreiben, was Ihrer Meinung nach ein angemessenes Maß an Codequalität ist? Oder sollten Sie eher so etwas wie diesen Senior-Entwickler machen? Vielleicht überbauen Sie.

Indem Sie es auf diese Weise ansprechen, vermeiden Sie Konfrontationen und stellen gleichzeitig sicher, dass der Teamleiter sich des Problems bewusst ist.

PS Ich schlage vor, Sie drängen nicht auf eine sofortige Antwort und seien bereit, sie fallen zu lassen.

Obwohl die Codequalität wichtig sein sollte, muss sie in den Kontext der Erwartungen des Managements und des Qualifikationsniveaus der Teammitglieder gestellt werden. Sich in diesem Bereich verbessern zu wollen, ist eine gute Sache, aber konzentrieren Sie sich auf die Probleme und nicht nur auf die Symptome.

Alles, was Sie vorschlagen, geschieht aus einem bestimmten Grund. Erhalten Benutzer Fehler aufgrund fehlender Nullprüfungen, die ein Debugging erfordern? Jeder Programmierer sollte wissen, je früher diese erkannt werden, desto einfacher sind sie zu beheben.

Nachdem Sie die Verbindungen zwischen diesen Programmierfehlern und den Problemen hergestellt haben, die sie für alle verursachen, sollte Ihr Team nach Möglichkeiten suchen, sie zu beheben. Codeüberprüfungen oder ein Prozess, um mehr als ein Paar Augen auf jede Codezeile zu lenken, werden als bewährte Vorgehensweise angesehen. Wo Sie in Schwierigkeiten geraten, ist, wenn es keine Durchsetzung dessen gibt, was Ihr Team für das Beste hält. Wenn es einem Programmierer erlaubt ist, Dinge auf seine Weise zu tun, wird nichts davon funktionieren.

Irgendwann sollte klar sein, dass der Code dieser Person mehr Probleme verursacht als der von anderen erstellte Code. Es ist Sache des Teams, Probleme mit minderwertigen Darstellern anzugehen. Hoffentlich können sich alle auf der Suche nach besserem Code in diesen Fragen einigen.

Es klingt nicht so, als ob der ältere Kollege hier das Problem ist. Menschen gehen oft den Weg des geringsten Widerstands, wenn sie die Möglichkeit dazu haben. Ihr Problem ist, dass der Prozess nicht die Qualitätsstandards durchsetzt, die Sie für notwendig halten.

Gib mir die Gelassenheit, die Dinge zu akzeptieren, die ich nicht ändern kann, den Mut, die Dinge zu ändern, die ich ändern kann, und die Weisheit, das eine vom anderen zu unterscheiden.

Das Problem, mit dem Sie kämpfen, ist, dass Sie nicht wissen, ob Sie als Junior in der Lage sind, Einfluss auf diesen Prozess zu nehmen. Kannst du sie dazu bringen, sich zu ändern oder nicht?

Ich würde im Grunde versuchen, Informationen in einem lockeren Gespräch (oder mehreren) zu sammeln, um herauszufinden, was sie in der Vergangenheit getan haben und was ihre Einwände gegen die von Ihnen vorgeschlagenen Praktiken sind. Sie werden wahrscheinlich allein dadurch ein Gefühl dafür bekommen, welche Dinge Sie wahrscheinlich beeinflussen können.


Etwas, auf das Sie wahrscheinlich direkten Einfluss haben, wäre, mehr erfahrene Teammitglieder zu bitten, informelle Code-Reviews Ihres Codes durchzuführen. Denken Sie daran, Sie sind ein Junior und daher nutzlos - wenn ein erfahreneres Mitglied des Teams Ihre Arbeit überprüft, wird dies sicherlich die Anzahl der Fehler reduzieren, die Sie einführen, und Ihnen helfen, zu lernen*. Ich denke, es ist unwahrscheinlich, dass Sie nicht eine Person dazu bringen konnten, dem zuzustimmen.

Dadurch haben Sie nicht nur mehr Vertrauen in Ihren eigenen Code (auch wenn Sie es nicht im Code Ihrer Kollegen haben), sondern fördern vielleicht auch eine Atmosphäre, in der Code-Reviews als wertvoller Bestandteil angesehen werden des Prozesses.

* Ich bin scherzhaft.

+1 für "Ihr Problem ist, dass der Prozess die Qualitätsstandards, die Sie für notwendig halten, nicht durchsetzt" allein.

Niemand mag einen Schwätzer.

Sie machen sich Sorgen um Ihren eigenen Code, und sehr bald werden Ihre Kollegen sehen, dass Sie die Verantwortung für das Produkt übernehmen.

Ich erlebe ein ähnliches Dilemma, in dem ich der Senior-Entwickler bin und meine Kollegen Junior sind, von denen viele nicht an Qualität interessiert sind.

Die Zeit wird diejenigen aussortieren, die keine Leidenschaft für das haben, was sie tun.

Meiner Erfahrung nach ist Code-Styling wirklich schwer durchzusetzen und führt immer zu vielen unfruchtbaren Diskussionen. Es ist eine subjektive Angelegenheit und einige Leute haben wirklich starke Meinungen darüber. Wenn es Ihnen wirklich wichtig ist, sollten Sie Ihr Team davon überzeugen, ein automatisiertes Build-System (z. B. Jenkins) zu implementieren und eine automatisierte Quellcode-Validierung hinzuzufügen. Wenn der Code nicht gelinst ist, wird der Build rot und wird nicht akzeptiert.

Lassen Sie Ihr Senior College mit der Maschine streiten, anstatt sein Junior College.

Ich vermute, dass dies zu demselben Problem führt. Wie können Sie als Junior sie ermutigen, ein automatisiertes Build-System zu verwenden, wenn Sie sie nicht dazu ermutigen können, Code-Reviews durchzuführen? Sie haben ihren Prozess und es "funktioniert", soweit es sie betrifft.
Es ist anders. Das OP gab an, dass die Senioren den Linters nicht folgen, also bedeutet das wohl, dass das Projekt Linters hat , aber die Senioren abtrünnig wurden und sich nicht mehr an die Regeln halten. Außerdem sollte er sich bei der Präsentation dieser Idee auf andere Vorteile des Bausystems und nicht nur auf das Fusseln konzentrieren.

Soll ich das mit meinem Teamleiter besprechen?

Ja.

Bevor Sie dies tun, lesen Sie jedoch weiter und vergewissern Sie sich, dass Sie das richtige „ this “ ansprechen.

Tatsächlich steht es Ihnen als Junior-Mitglied nicht zu, zu sagen: „Dieser andere Entwickler schreibt schlechten Code“. Es besteht jedoch ein deutlicher Unterschied darin, was Sie als Qualitätscode für akzeptabel halten und welchen Code andere Teammitglieder für akzeptabel halten. Das ist etwas, das Sie mit Ihrem Teamleiter besprechen sollten. Auf diese Weise geht es viel weniger darum, jemand anderem die Schuld zu geben, als vielmehr darum, einen guten Weg zu finden, um von hier aus weiterzumachen. Dies kann bedeuten, dass Ihr Teamleiter Ihnen sagt, dass Sie Ihren Programmierstandard lockern können. Es kann bedeuten, dass Sie am Ende den richtigen Mittelweg finden.

In jedem Fall fühlen Sie sich unwohl wegen der unterschiedlichen Standards, an die die Leute ihren Code halten, also sollten Sie das besprechen. Es sollte nicht sein, ob jemand anderes Code schreibt, der akzeptabel ist oder nicht.

Wir haben derzeit keine dedizierten Code-Reviews und ich sehe mich derzeit nicht in der Lage, darauf zu drängen.

Tatsächlich sind Sie nicht in der Lage , auf Code-Reviews zu drängen . Sie können jedoch die Verwendung von Codeüberprüfungen vorschlagen. Es kann sogar sein, dass sie erkennen, welche Fortschritte durch ein „frisches Paar Augen“ erzielt werden können, und die Verwendung dedizierter Code-Reviews kann genau so eine Sache sein.

Eine andere Möglichkeit, dies anzusprechen, ohne jemandem auf die Nerven zu gehen, wäre, das Thema schräg anzugehen, als Teil des Entwicklungsprozesses des Teams. Identifizieren Sie einige frühere Fehler, die in der Codebasis beobachtet wurden und die durch respektvolle Compiler-Warnungen oder andere Tools erkannt worden wären, bevor sie Probleme verursachten. Sie können dies dann dem Teamleiter und sogar dem gesamten Team mitteilen und vorschlagen, dass die relevanten Arten von Warnungen aus diesen Überprüfungen in Fehler in Ihrem Build-/Testprozess umgewandelt werden. Niemand mag es, Code überarbeiten zu müssen, nachdem er geschrieben und weitergemacht wurde. Sie können dies als eine einfache Möglichkeit präsentieren, um sicherzustellen, dass Sie alles gleich beim ersten Mal richtig machen und wahrscheinliche Fehlerberichte vermeiden.

Im Laufe der Zeit können Sie mehr Klassen von Fehlern ausfindig machen, die die Prüfer verhindert hätten, und sie der Durchsetzungsliste hinzufügen.

Als zusätzlichen Vorteil vermeidet dieser Ansatz auch den Aufwand für die Behebung von Beschwerden über den Code, die sich für Ihre spezielle Anwendung immer wieder als irrelevant herausstellen. Die Warnungen sind möglicherweise keine Fehlalarme in dem Sinne, dass sie falsch sind, aber sie können Fehlalarme in dem Sinne sein, dass sie keinen Unterschied machen.

Das Wort dafür ist Ursachenanalyse. Wenn Sie nachweisen können, dass diese Commits die Quelle eines oder mehrerer schwerwiegender Fehler sind, besprechen Sie diese Commits während des Teammeetings oder des Fehlerüberprüfungsmeetings als Gruppe, um das Bewusstsein für die negativen Auswirkungen dieser Techniken zu schärfen. Wenn dies nicht der Fall ist, können Sie auch einfach einen Ausschnitt per E-Mail an das Team senden und jemanden um eine Erklärung bitten, damit Sie zumindest die Dokumentation verbessern können.

Verweise