Ich habe in der Vergangenheit viel zu diesem Thema auf SoftwareEngineering.SE geschrieben und war selbst in ähnlichen Situationen. Daher werde ich versuchen, einige Hinweise zu geben und einige Probleme hervorzuheben, die ich beim Lesen Ihrer Frage festgestellt habe.
Aber zuerst sprechen wir über einen wichtigen Aspekt: Ihre Rolle im Unternehmen.
Deine Rolle
Möglicherweise haben Sie einen ausdrücklichen Auftrag von Ihrem Chef, die Dinge zu verbessern, und einen Platz in der Hierarchie, an dem andere Entwickler auf Ihre Befehle hören müssen . Oder Sie gehören zu Gleichaltrigen, haben dieselbe Rolle und dieselbe Autorität, und Ihre Option ist nur ... nun ja ... eine Meinung .
In beiden Fällen ist weniger Ihr Platz in der Hierarchie von Bedeutung als vielmehr:
Was andere Entwickler von Ihnen halten. Wenn sie dich als einen nervigen Kerl behandeln, der sie nach dummen Dingen fragt, kommst du nicht weit. Ich habe viele Fälle erlebt, in denen technische Leiter und Projektmanager absolut keinen Einfluss auf das Team hatten, weil das Team wusste (oder dachte), dass diese „Leiter“ keinen technischen Hintergrund hatten, um Entscheidungen zu treffen, die sie trafen. Andererseits habe ich einige Entwickler gesehen, die von ihren Kollegen angehört wurden, weil sie wussten, dass diese Entwickler geschickt und erfahren sind.
Wie solide ist Ihr Team und was motiviert es? Stellen Sie sich ein Unternehmen vor, in dem jeder Entwickler für KLOC / Monat bezahlt. Würden Sie Ihren Kollegen etwas über Stil sagen? Wahrscheinlich nicht, denn selten sind Personen, die weniger bezahlt werden wollen. Im Allgemeinen können Sie nichts verbessern, wenn es sich nicht um ein Team, sondern nur um eine Gruppe von Personen handelt, die am selben Projekt arbeiten.
Abhängig davon können Sie entscheiden, ob es sich lohnt, Änderungen vorzunehmen. Wenn Sie keine Stimme haben und es keinen Zusammenhalt im Team gibt, suchen Sie einfach einen anderen Job. Wenn Sie als talentierter, angesehener Entwickler bekannt sind und ein starkes Teamgefühl herrscht, können Sie die Dinge relativ einfach verbessern, selbst wenn Sie der Feindseligkeit Ihres Chefs oder anderer Teams ausgesetzt sind.
In jedem Fall ist es wichtig, keinen Druck auf Ihr Team auszuüben. Arbeite mit ihnen, nicht gegen sie. Gib ihnen keine Befehle, sondern führe sie zum Ziel.
Nun die Hinweise.
Stil
Ich habe einmal freundlich gebeten, den Codierungsstil und die Formatierung des Großteils des vorhandenen Codes zu befolgen (leider haben wir kein offizielles Codierungsstil-Dokument). Aber es hat nicht funktioniert ...
Natürlich nicht, denn so sollte es nicht gemacht werden.
Stil ist langweilig .
Dem Stil zu folgen ist langweilig .
Das Schreiben eines Dokuments im Coding-Stil ist langweilig ( und verdammt schwierig ; probieren Sie es erst aus, wenn Sie mehr als zehn Jahre mit der Sprache gearbeitet haben).
Das Lesen eines Dokuments ist langweilig .
Das Überprüfen des Codes auf Stilfehler ist langweilig .
Zu behaupten, mein Stil sei besser als deins, ist aufregend , besonders wenn es keinen objektiven Vorteil eines Stils gegenüber einem anderen gibt. Im Ernst, jeder gesunde Mensch weiß, dass der richtige Weg zu schreiben der if (x)
ist, wie ich es geschrieben habe, nicht if(x)
oder if ( x )
!
Deshalb:
Mach keine Style Reviews. Dies ist die Aufgabe von Stilprüfern. Diese niedlichen Anwendungen haben ein paar Vorteile für Ihr Gehirn: Sie überprüfen das gesamte Projekt in Millisekunden, nicht in Stunden oder Tagen, und sie machen keine Fehler und verpassen keine Stilfehler.
Schreiben Sie nicht Ihren eigenen Stilstandard. Sie werden es sowieso falsch machen, und Ihre Mitarbeiter werden Sie verärgern, dass Sie schlechte Entscheidungen getroffen haben.
Zwingen Sie Entwickler nicht, 2 000 Stilfehler zu beheben.
Stil beim Festschreiben automatisch erzwingen. Code, der Stilfehler aufweist, hat keinen Platz in der Versionskontrolle.
Mach es von Anfang an. Das Einrichten der Stilsteuerung in einem vorhandenen Projekt ist schwierig bis unmöglich.
Weitere Informationen über das Lesen des ersten Abschnitts von dieser anderen Antwort auf SE.SE .
Ebenfalls:
- Sei nicht zu streng. Zum Beispiel ist das Schreiben von
jslint
konformem Code ziemlich ärgerlich, daher sollte dies ausschließlich dann erfolgen, wenn es unbedingt benötigt wird (oder wenn alle Mitglieder Ihres Teams damit zufrieden sind). Gleiches gilt für statische Prüfwerkzeuge. Zum Beispiel kann die .NET-Code-Analyse auf maximaler Ebene sehr bedrückend und deprimierend sein und wenig Nutzen bringen. Das gleiche Toolset auf moderatem Niveau erweist sich dagegen als sehr hilfreich.
Code-Überprüfungen
Jetzt, da Sie sich bei Code-Überprüfungen nicht mehr um den Stil kümmern müssen, können Sie sich auf interessantere Dinge konzentrieren: Verbessern (oder Korrigieren) des Quellcodes.
Verschiedene Personen reagieren unterschiedlich auf Codeüberprüfungen. Einige halten es für eine Chance. Andere hassen es. Einige hören sich alles an, was Sie ihnen sagen, machen sich Notizen und diskutieren nicht, auch wenn sie Recht haben könnten. Andere versuchen, über jeden Punkt zu streiten. Es liegt an Ihnen, einen Weg zu finden, mit jeder Entwicklerin entsprechend ihrer Persönlichkeit umzugehen. Es ist normalerweise hilfreich:
Führen Sie Code-Überprüfungen privat durch, insbesondere wenn der Entwickler jünger ist und einen wirklich schlechten Code schreibt.
Zeigen Sie, dass es nichts Persönliches gibt: Sie überprüfen den Code, nicht die Fähigkeiten der Person.
Zeigen Sie das eigentliche Ziel einer Codeüberprüfung an. Das Ziel ist nicht zu zeigen, wie schlecht ein Entwickler ist. Ziel ist es, Verbesserungsmöglichkeiten zu schaffen.
Streite niemals. Sie sind nicht hier, um zu überzeugen, sondern um Ihr Fachwissen zur Verfügung zu stellen.
Gehen Sie niemals davon aus, dass der Rezensent der einzige ist, der aus einer Rezension etwas lernen kann. Sie sind auch hier, um zu lernen, indem Sie den Code lesen und nach Erklärungen zu den Teilen fragen, die Sie nicht verstehen.
Stellen Sie nach Abschluss der Codeüberprüfung sicher, dass die Person ihren Code tatsächlich verbessert. Ich hatte einige Fälle, in denen Entwickler dachten, dass die Codeüberprüfung endet, wenn das eigentliche Meeting endet. Sie verlassen und kehren zu ihren neuen Funktionen zurück und versuchen, das, was Sie mit ihnen geteilt haben, nur für neuen Code anzuwenden. Ein anständiges Tracking-Tool für die Codeüberprüfung hilft.
Beachten Sie, dass unabhängig von Ihrer speziellen Rolle im Unternehmen und Ihrem Fachwissen im Vergleich zu anderen Ihr Code ebenfalls überprüft werden sollte. Sie sollten auch nicht der einzige sein, der den Code anderer überprüft.
In einem kürzlich durchgeführten Projekt, in dem ich als technischer Leiter gearbeitet habe, fiel es mir schwer, meinen Mitarbeitern zu erklären, dass es ihre Aufgabe ist, den Code des jeweils anderen zu überprüfen, einschließlich meines Codes. Die Angst vor einem Praktikanten, der den Code seines technischen Leiters überprüfen will, verschwindet, sobald er die ersten Probleme im Code findet - und wer von uns schreibt fehlerfreien Code?
Ausbildung
Code Reviews sind eine großartige Gelegenheit, einige Aspekte der Programmierung und des Softwaredesigns zu lehren und zu lernen, andere erfordern jedoch eine Schulung.
Wenn Sie Ihre Mitarbeiter ausbilden können, tun Sie das. Wenn Ihr Management die Idee des Trainings ablehnt, tun Sie dies informell. Ich habe solche Schulungen in Form von informellen Besprechungen oder sogar als einfache Diskussionen durchgeführt, die manchmal vom Management unterbrochen und später fortgesetzt wurden.
Vergewissern Sie sich neben der direkten Schulung, dass Sie die Bücher wie McConnels Code Complete gut genug kennen , und sprechen Sie mit Ihren Kollegen über diese Bücher. Schlagen Sie ihnen vor, den Quellcode von Open-Source-Projekten zu lesen, und geben Sie ihnen spezifische Beispiele für hochwertigen Code. Und natürlich schreiben Sie selbst hochwertigen Code.
Konzentrieren Sie sich auf den Kontext, nicht auf Personen
Wie kann ich diese Situation angehen, ohne mich nur auf "schlechte Unternehmenskultur", "unerfahrene Absolventen" usw. zu konzentrieren?
Diese Absolventen haben ein Ziel: Erfahrungen sammeln, Dinge lernen, geschickter werden. Wenn sie Jahr für Jahr beschissenen Code schreiben und nichts über Programmierung wissen, liegt das wahrscheinlich daran, dass Ihr Team oder Ihr Unternehmen ihnen diese Möglichkeit nicht bietet.
Wenn Sie sich auf die Tatsache konzentrieren, dass Ihr Team unerfahrene Absolventen hat, hilft dies nichts. Konzentrieren Sie sich stattdessen darauf, was Sie für sie und mit ihnen tun können. Codeüberprüfungen und Schulungen sind zwei der Techniken, um die Situation zu verbessern.
Schlechte Unternehmenskultur ist ein anderes Biest. Manchmal kann es geändert werden. Manchmal kann es nicht. In allen Fällen, denken Sie daran , dass Sie sind Teil dieser Gesellschaft, so dass Sie sind Teil der Unternehmenskultur. Wenn du es nicht ändern kannst und es von Natur aus schlecht findest, musst du früher oder später gehen.
Holen Sie sich Ihre Metriken richtig
Wie genau messen Sie gerade den Code? Messen Sie die Anzahl der Commits pro Tag und Entwickler? Oder die KLOC pro Monat pro Programmierer? Oder vielleicht die Code-Abdeckung? Oder die Anzahl der gefundenen und behobenen Fehler? Oder die Anzahl der potenziellen Fehler, die durch Regressionstests entdeckt wurden? Oder die Anzahl der vom Continuous Deployment-Server durchgeführten Zurücksetzungen?
Dinge, die Sie messen, sind wichtig, weil die Teammitglieder ihre Arbeit an die gemessenen Faktoren anpassen. Beispielsweise wurde in einem Unternehmen, in dem ich vor einigen Jahren arbeiten musste, nur die Zeit gemessen, die man im Büro verbringt. Es erübrigt sich zu erwähnen, dass dies nicht dazu ermutigend war, besseren Code zu liefern, intelligenter zu arbeiten oder ... naja, überhaupt zu arbeiten.
Das Herausfinden von positiven und negativen Verstärkungen und das Anpassen der gemessenen Faktoren über die Zeit ist im Wesentlichen die Hebelwirkung, die Sie auf die Teammitglieder ausüben. Wenn es richtig gemacht wird, können Ergebnisse erzielt werden, die mit einer einfachen Hierarchie nicht erreicht werden können.
Die Dinge, die dich stören, machen sie messbar. Messen Sie sie und veröffentlichen Sie die Ergebnisse. Arbeiten Sie dann mit anderen Teammitgliedern zusammen, um die Ergebnisse zu verbessern.
Nehmen wir zum Beispiel an, dass Teammitglieder zu viele Rechtschreibfehler in den Namen von Klassen, Klassenmitgliedern und Variablen machen. Das ist nervig. Wie können Sie das messen? Mit einem Parser können Sie alle Wörter aus dem Code extrahieren und mithilfe einer Rechtschreibprüfung das Verhältnis von Wörtern mit Fehlern und Tippfehlern ermitteln, z. B. 16,7%.
Der nächste Schritt besteht darin, mit Ihrem Team das Zielverhältnis zu vereinbaren. Es könnten 15% für den nächsten Sprint sein, 10% für den nächsten, 5% in sechs Wochen und 0% in zwei Monaten. Diese Metriken werden bei jedem Commit automatisch neu berechnet und auf einem großen Bildschirm im Büro angezeigt.
Wenn Sie das Zielverhältnis nicht erreichen, kann es sein, dass Ihr Team mehr Zeit darauf verwendet, Rechtschreibfehler zu beheben. Oder Ihr Team könnte es für besser halten, das Verhältnis pro Entwickler zu berechnen und diese Informationen auch auf der großen Leinwand anzuzeigen. Oder Ihr Team könnte feststellen, dass das Ziel zu optimistisch war und Sie es überprüfen sollten.
Wenn Sie das Zielverhältnis erreichen, müssen Sie im nächsten Schritt sicherstellen, dass die Anzahl der Fehler und Tippfehler mit der Zeit nicht zunimmt. Zu diesem Zweck können Sie in Ihrem Build eine zusätzliche Aufgabe erstellen, die Rechtschreibfehler überprüft und den Build fehlschlägt, wenn mindestens ein Fehler gefunden wird. Nachdem Sie dieses Problem behoben haben, wird Ihr großer Bildschirm möglicherweise erneut verwendet, um die neuen relevanten Statistiken anzuzeigen.
Fazit
Ich glaube, dass jeder in Ihrer Frage erwähnte Aspekt durch die Techniken gelöst werden kann, die ich in meiner Antwort angegeben habe:
Als andere Entwickler dem Projekt beitraten, bemerkte ich, dass sie einen anderen Codierungsstil verwenden (manchmal einen völlig anderen Stil).
Sie mussten den Stil beim Festschreiben automatisch erzwingen .
und verwenden häufig keine modernen Sprachfunktionen wie Property Accessors (dies ist in Objective-C relativ neu).
Sowohl die Codeüberprüfung als auch die Schulung dienen dazu, Ihre Sprachkenntnisse zu übertragen.
Manchmal erfanden sie ihre eigenen Fahrräder, anstatt ähnliche Merkmale des Frameworks zu verwenden
Sowohl die Codeüberprüfung als auch die Schulung dienen dazu, Ihr Wissen über das Framework zu übertragen.
oder übertragen Sie Konzepte aus anderen Programmiersprachen oder Mustern, die sie gelernt haben, in unsere Codebasis.
Das ist eine hervorragende Sache. Scheint eine Gelegenheit für Sie zu sein, von ihnen zu lernen.
Oft können sie Methoden oder Variablen wegen schlechten Englisch nicht richtig benennen
Codeüberprüfungen sollten sich auch auf die richtige Benennung konzentrieren. Einige IDEs verfügen auch über eine Rechtschreibprüfung.
Manchmal denke ich, wenn die IDE nicht wäre, würden sie den gesamten Code ohne Einrückung oder Formatierung schreiben.
Natürlich würden sie. Stil ist langweilig und sollte automatisiert werden.
Grundsätzlich hasse ich den Code, den sie schreiben.
Denken Sie aus dem Teil mit den Codeüberprüfungen daran: „Das Ziel ist es nicht zu zeigen, wie schlecht ein Entwickler ist. Ziel ist es, Verbesserungsmöglichkeiten zu schaffen. “
Es ist schlecht formatiert / organisiert und unterscheidet sich manchmal radikal vom Rest des Projekts.
Automatisierte Stil Prüfung.
Ich bin sehr verärgert, als sie ihre Spaghetti zu meinem Kunstwerk hinzufügen
Warte was?! Kunstwerk?! Erraten Sie, was? Einige Personen (einschließlich Ihnen in sechs Monaten) könnten Ihren Code weit davon entfernt finden, ein Kunstwerk zu sein. In der Zwischenzeit sollten Sie sich darüber im Klaren sein, dass es niemandem hilft, Ihre Arbeit als Kunstwerk und ihre Arbeit als Mist zu betrachten. Dich mit einbeziehend.
Es fühlt sich immer mehr so an, als ob sie sich nicht die Mühe machen zu lernen oder es ihnen egal ist: Sie tun nur das, was von ihnen verlangt wird und gehen nach Hause.
Natürlich werden sie das tun, was von ihnen verlangt wird. Denken Sie daran: Kontext, nicht Personen und machen Sie Ihre Metriken richtig . Wenn der Kontext von ihnen verlangt, dass sie das Beste daraus machen, was sie tun, werden sie es tun. Wenn der Kontext es erfordert, so viele KLOCs pro Monat wie möglich zu produzieren und nicht mehr, werden sie es auch tun.