Wie überzeuge ich mein Team, kleinere Klassen / Methoden anzuwenden?


27

Haftungsausschluss: Ich bin ein Neuling (dies ist mein dritter Arbeitstag) und die meisten meiner Teamkollegen sind erfahrener als ich.

Wenn ich mir unseren Code ansehe, sehe ich einige Codegerüche und schlechte Konstruktionspraktiken wie die folgenden:

  • Etwas inkonsistente Namensrichtlinien
  • Eigenschaften, die nach Möglichkeit nicht als schreibgeschützt gekennzeichnet sind
  • Große Klassen - Mir ist eine Utility-Klasse aufgefallen, die aus Hunderten von Erweiterungsmethoden (für viele Typen) bestand. Es war mehr als 2500 Zeilen lang!
  • Große Methoden - Ich versuche, eine 150 Zeilen lange Methode umzugestalten.

Die beiden letzteren scheinen ein echtes Problem zu sein. Ich möchte meine Teamkollegen davon überzeugen, kleinere Klassen und Methoden anzuwenden. Aber soll ich das machen? Wenn ja, wie?

Mein Team hat einen Mentor vom Hauptteam (wir sind ein Satellitenteam). Soll ich zuerst zu ihm gehen?


UPDATE : Da einige Antworten zu dem Projekt fragten, wissen Sie bitte, dass es ein funktionierendes Projekt ist. Und meiner Meinung nach sind riesige Klassen / Methoden dieser Größe immer schlecht.

Wie auch immer, ich möchte nie mein Team verärgern. Deshalb habe ich gefragt: Soll ich das tun, und wenn ja, wie mache ich das sanft?

UPDATE : Ich habe mich entschlossen, basierend auf der akzeptierten Antwort etwas zu tun: Da ich ein Neuling bin, sehe ich alles in "frischen Augen". Ich werde alle Codegerüche, die ich gefunden habe, zur Kenntnis nehmen (Position, warum es schlecht ist, wie können wir es tun) Besser, ...), aber im Moment versuche ich nur, Respekt von meinem Team zu erlangen: Schreiben Sie "besseren Code", kennen Sie die Leute, wissen Sie, warum wir das getan haben ... Wenn die Zeit reif ist, werde ich es versuchen Um mein Team nach neuen Coderichtlinien zu befragen (Benennungsrichtlinien, kleinere Klassen, kleinere Methoden, ...) und wenn möglich alten Code umzugestalten. Es sollte funktionieren, IMHO.

Vielen Dank.


11
Eine Empfehlung, die ich aussprechen möchte, ist, sich den Quellcode anzusehen, in den sie gerade einchecken, nicht den, der sich derzeit im Projekt befindet. Es ist möglich, dass der Großteil des aktuellen Codes nicht von Ihren Mitarbeitern, sondern von Ihren heutigen Managern vor 10 Jahren geschrieben wurde.
earlNameless

14
Sie werden wahrscheinlich nur die Leute verärgern, da Sie erst seit 3 ​​Tagen im Job sind. Lernen Sie zuerst das Team kennen und verdienen Sie sich etwas Respekt. Bringen Sie Dinge in ungezwungenen Gesprächen zum Spüren des Wassers. Sie haben die richtige Idee, aber vielleicht sind Sie ein Rennpferd in einem Stall mit Farmpferden.
kirk.burleson

4
Willkommen in der realen Welt :)
Freitag,

Mit kleineren Funktionen wird der JIT-Compiler glücklicher und der Code schneller. Effective C # Second Edition Punkt 11. my.safaribooksonline.com/book/programming/csharp/9780321659149/...
Job

3
Ich musste schmunzeln, als ich sah, wie entsetzt Sie waren, als Sie Zeuge einer 2.500 Zeilen langen Nutzerklasse wurden. Ich habe in meiner Karriere mehr als eine 25.000-Linien-Klasse gesehen. Versteht mich nicht falsch, ich denke, eine Klasse wird nach 500 Zeilen zu lang.
PeterAllenWebb

Antworten:


19

Sie haben den Vorteil, den Code mit neuen Augen zu betrachten. Machen Sie sich Notizen, um zu dokumentieren, was Sie über schlechte Praktiken erfahren. Ziehen Sie dann, wenn Sie sich mit dem Team einig sind, Ihre Notizen zu einem geeigneten Zeitpunkt heraus, zum Beispiel wenn es Zeit für ein Refactoring ist.


Wirklich gute Idee. Schreiben Sie die Dinge jetzt auf und schlagen Sie später einige Änderungen vor.
Roman Grazhdan

3
Dies funktioniert in der Theorie, aber in der Praxis werden sie nur die Tasche aus ihm herausschlagen.
Job

15

Code Complete von Steve McConnell bietet unzählige gute Statistiken zu dem Thema, über das Sie sprechen. Ich erinnere mich nicht an alle Zahlen, aber er spricht darüber, wie die Zahl der Fehler mit längeren Methoden / Klassen zunimmt, wie lange das Debuggen dauert usw.

Sie könnten eine Kopie des Buches kaufen und Ihren Kollegen einige der Studien zeigen ... Statistiken (obwohl sie die ganze Zeit lügen) neigen dazu, die Leute zu überzeugen.


1
+1 für Code abgeschlossen. Erforschen Sie auch den Begriff "Technische Schulden". Ich finde es sehr nützlich, anderen zu erklären, warum es sich manchmal (aber nicht immer) lohnt, in die Vereinfachung von Code zu investieren. Die erste Regel ist jedoch, Tests zu erstellen. Komponententests, Systemtests, Integrationstests usw. Erstellen Sie vor dem Refactoring Tests. Test, Test, Test. Tests.
Ben Hocking

@Ben keine Respektlosigkeit, aber ich denke, der Begriff "Technical Debt" ist viel zu weit verbreitet. Sobald jemand anfängt, das als Begründung für eine Entscheidung zu verwenden, neige ich dazu, nicht mehr zuzuhören. Vielleicht ist es ein Fehler von meiner Seite, aber wenn ich höre, dass meine Gedanken dazu gehen, "diese Person liest eine Menge Blogs, versteht aber nicht wirklich die tatsächlichen Kosten für den Ausgleich von Überarbeitungscode gegen andere Aufgaben"
Gratzy

3
@Gratzy: Ich bin sicher, es hängt von deiner persönlichen Erfahrung ab. Ich möchte nicht auf Details eingehen, aber wenn Sie Projekte in "technischen Schulden" bis zum Hals sehen, wird der Ausdruck sehr passend. Codierer können 90% ihrer Zeit damit verbringen, die Schulden zu "verzinsen". In solchen Fällen ist es nicht verwunderlich, dass niemand im Team von dem Begriff gehört hat.
Ben Hocking

Clean Code enthält auch viele Informationen dazu (allerdings nicht viele Statistiken).
Steven Evers

Wenn Sie sich Seite 173 ansehen, präsentiert McConnell statistische Belege für Routinegrößen, die die meisten agilen Befürworter wahrscheinlich davon abhalten würden. Er setzt 150 Zeilen ziemlich deutlich in die Spalte OK (aber nicht ideal), gibt aber eine starke persönliche Empfehlung ab, weit über 200
hinauszugehen

13

Haftungsausschluss: Ich bin ein Neuling (dies ist mein dritter Arbeitstag) und die meisten meiner Mitarbeiter sind erfahrener als ich.

Vielleicht möchten Sie etwas langsamer fahren, zuhören und von Ihrem Team lernen, bevor Sie zu viele Änderungen vorschlagen. Es mag gute Gründe geben oder auch nicht, warum der Code so strukturiert ist, aber es kann nur helfen, sich die Zeit zu nehmen, zuerst zuzuhören und zu lernen.

Danach werden alle Vorschläge, die Sie machen, mit Sicherheit positiver bewertet und stoßen auf weniger Widerstand.

Ihre Chancen auf eine erfolgreiche Einführung von Veränderungen verbessern sich erheblich, wenn Sie den Respekt Ihrer Kollegen zuerst verdienen oder zumindest nicht verlieren.

Wie geht es? "Zweimal messen, einmal schneiden ..." So ähnlich.


1
Genau. Wer soll sagen, dass sie wissen, dass es schlechtes Training ist, aber wo auf einer sehr engen Frist? Oder hatten sie vielleicht ein paar Leute vor sich, die den einen oder anderen Teil des Codes gemacht haben und keine Zeit für das Refactoring hatten? Seien Sie aufgeschlossen, wenn Sie sie
Spooks

12

Sofern Sie nicht speziell mit der Absicht beauftragt wurden, die Art und Weise, wie Ihr Team Code schreibt, zu überarbeiten, möchten Sie möglicherweise Ihre Begeisterung für drastische Überholungen abschwächen. Der meiste Arbeitscode funktioniert aus einem bestimmten Grund :) egal wie mies es ist, und manchmal machen drastische Überholungen diese nervigen Eckfälle noch hässlicher.

Ich denke, der einfachste Hebel, um kleineren Code zu schreiben, wäre, die Entwickler aufzufordern, sich auf Unit-Tests zu konzentrieren . Nichts zwingt zu präzisem Code, als wenn man ihn zum Testen auffordert . Es ist erstaunlich, wie Entwickler plötzlich eine Abneigung gegen globale Datenstrukturen haben und zu viele Objekte in zu vielen Ebenen übergeben, wenn sie wissen, dass sie Tests für alles schreiben müssen.

Ich bin kein großer Fan von TDD, aber ich mag die Tatsache, dass Entwickler gezwungen sind zu überlegen, wie sie Tests schreiben. Und das ist oft der Grund, warum der Code besser ist und nicht die Magie , die Tests tatsächlich durchzuführen. (Dies ist jedoch hilfreich, wenn Sie später Änderungen vornehmen.)

Viel Glück.


++ für "Mäßige deine Begeisterung". Meiner Meinung nach steht die Vehemenz, mit der diese Grundsätze verkündet werden, im umgekehrten Verhältnis zu ihrer Rechtfertigung. (Religionen sind so.)
Mike Dunlavey

11

Sie sollten Ihr Team nicht überzeugen. Als Neuling werden Sie nicht ernst genommen - und verlieren Zeit.

Schreiben Sie stattdessen selbst kompakten und sauberen Code. Dann, hoffentlich nach einer Weile und einigen Codeüberprüfungen, könnten einige Teamkollegen anfangen, Ihren Stil zu imitieren.

Wenn nicht, werden Sie immer noch produktiver und Ihre harte Arbeit wird Sie irgendwann an eine höhere Position bringen, an der Sie beginnen können, einige dieser Regeln durchzusetzen.

Und ja, auf jeden Fall, zeige allen Sachen von Code Complete.


3
+1 für "Schreiben Sie stattdessen selbst kompakten und sauberen Code". Es ist oft am besten, mit gutem Beispiel voranzugehen. Das Aufräumen einer etablierten Codebasis ist eher ein Marathon als ein Sprint. es braucht geduld und ausdauer.
JeremyDWill

8

Hier sind ein paar Tricks:

  • Informieren Sie sich über den aktuellen Stand und die Geschichte des Teams - es hört sich so an, als hätten sie einen Mentor, wie viel Einfluss hat der Mentor? Wie neu ist der Mentor und gab es eine lange Zeit ohne Mentor? Wann entsteht der Problemcode? Das Baby des aktuellen Teams zu kritisieren, kann sich stark davon unterscheiden, alten Code zu kritisieren, an den sich niemand mehr erinnert.

  • Eine Sache zu einer Zeit - werfen Sie nicht die Bombe auf all Ihre Gedanken bei einem Team-Meeting. Beginnen Sie mit einigen vorläufigen Fragen, die aus Ihrer spezifischen Perspektive kommen. Zum Beispiel - "Hey, als der neue Typ habe ich bemerkt, dass einige der Versorgungsklassen wirklich groß sind, gibt es einen Grund dafür?"

  • Vorschlagen von kleinen Schritten - Es ist fast nie möglich, eine sofortige Totalrevision durchzuführen. Überlegen Sie sich daher einige erste Schritte, falls alle zustimmen, dass dies ein guter Plan ist.

  • Schlagen Sie zukünftige Präventionsmechanismen vor - zum Beispiel könnte das Team einem Ziel zustimmen, das es niemals zu den wenigen größten Klassen hinzufügt, aber umgestaltet, wenn es notwendig ist, sie weiter auszubauen.

  • Hören Sie auf Bedenken bezüglich des Risikos. Wenn es sich wirklich um Legacy-Code handelt, gibt es möglicherweise genügend Unbekannte und Abhängigkeiten, die ein Refactoring äußerst riskant machen. Dies ist vielleicht kein Grund, Refactoring zu vermeiden, aber es kann bedeuten, dass Sie einige bessere Teststrategien oder eine andere Möglichkeit benötigen, um das Risiko zu verringern, bevor Sie die eigentliche Überarbeitung in Angriff nehmen.

  • Achten Sie auf die Körpersprache und gehen Sie langsam. Sie sprechen ein Problem in einer Codebasis an, mit der Sie nicht viel Erfahrung haben. Sie haben jetzt ein neues Typenfenster, in dem Sie einige naive Fragen stellen und hilfreiche Antworten erhalten können, und Sie können diese Fragen verwenden, um das Team zu untersuchen, um ihre eigenen Entwurfsentscheidungen zu treffen. Aber es geht in beide Richtungen - als der neue Typ hast du auch noch keine Menge "Glaubwürdigkeit", also geh langsam und achte auf geschlossene Gesichter oder Haltungen. Wenn Leute abschalten, schlagen Sie eine Möglichkeit vor, Entscheidungen zu verzögern und nach Wegen zu suchen, um sie zu gewinnen.

Ich kann als Manager und Teammitglied sagen, dass ich mich für New Guy Insights gefreut habe. Ich habe nicht jeden einzelnen konstruktiven Kommentar eines neuen Teammitglieds akzeptiert, war aber generell bereit zuzuhören, wenn die Kritik als ehrliche Besorgnis und Neugier geäußert und nicht als Vortrag gehalten wurde. Das Zeichen des Respekts vor dem neuen Mann setzt ein, wenn er die Einsicht liefern und dann zurücktreten und alles erledigen kann - es ist einfach, sich gut zu fühlen, wenn Ihre Entscheidungen gehört und aufgegriffen werden, und es ist schwieriger, wenn das Team Ihnen "Nein" sagt. Möglicherweise haben Sie immer noch Recht. Der Trick besteht darin, herauszufinden, was als Nächstes zu tun ist. In diesen Fällen ist es ein guter nächster Schritt, ein wenig zu warten und nach weiteren Informationen zu suchen.


6

Wie überzeuge ich mein Team, kleinere Klassen / Methoden anzuwenden?

Nicht.

Kaufen Sie sich eine Resharper-Lizenz und gehen Sie mit gutem Beispiel voran. [Verlassen Sie sich stark auf das Refactoring mit der Extraktionsmethode .]

Im Laufe der Zeit, andere sollen kommen , um Ihren lesbaren Code zu erkennen , und dies ebenfalls zu tun überzeugt werden. *


  • Ja, es besteht die Möglichkeit, dass sie nicht überzeugt werden. aber es ist immer noch die beste Wahl.

IMO - Es lohnt sich nicht, Ihre Teamkollegen zu überzeugen, bessere Programmierer zu werden. Lesen Sie ' Code Complete ' und folgen Sie @ Onkel Bob. SOLID Prinzipien und werden bessere Programmierer, wenn sie nicht bereits überzeugt sind.

Denken Sie daran: Sie können keine Logik verwenden, um zu argumentieren, dass jemand von einer Position abweicht, auf die er überhaupt nicht mit Logik gekommen ist.


4
+1 und Vereinbarung. Ihr zweiter Punkt ist das, was ich für am zutreffendsten befunden habe. Gute Programmierer wissen das bereits oder sind bereit, es sofort zu lernen und anzuwenden. Schlechte Programmierer geben vor, sich darum zu kümmern, oder verstehen einfach nicht, warum diese Dinge gut sind (wenn sie es verstanden hätten, hätten sie es bereits getan). Wahrscheinlich kämpfen Sie in einem verlorenen Kampf. Es ist traurig, wie viele "Programmierer" keine Ahnung von richtiger Softwareentwicklung haben.
Wayne Molina

4

Dies scheint eher eine Managementfrage als eine technische Frage zu sein. Alles, was Sie gesagt haben, ist gültig. Was Ihr Team wirklich braucht, ist ein guter Architekt, der sicherstellen kann, dass sich jeder an ein einziges Entwurfsmuster anpasst und es durchsetzt. Das Team muss den Code ständig und regelmäßig überarbeiten.

Es gibt jedoch ein anderes Prinzip: "Du wirst es nicht brauchen", wenn das, was jemals existiert hat, längere Zeit funktioniert, egal wie hässlich es ist. Es ist immer keine gute Idee, es zu ändern. Sammeln Sie stattdessen ein Dokument mit schlechten Praktiken und Problemen, bevor Sie die Codierung ausführen, wenn Ihr Team das Ganze oder einen Teil davon neu erstellen muss.


3
Natürlich sollten Sie sich an den Team-Mentor wenden, aber bevor Sie dies tun, sollten Sie sich höflich mit Ihren Kollegen beraten und besprechen, damit sie sich nicht ausgelassen fühlen. Es wird dir in Zukunft das Leben schwer machen.

4

Einige Teams führen keine Qualitätskontrollen für Code durch, da sie nicht die richtigen Tools dafür kennen. Es gibt viele Tools, die einem Team dabei helfen können, den Code zu verbessern.

Visual Studio verfügt über eine "Codeanalyse", die bei der Verwendung von Namenskonventionen hilfreich sein kann.

Es könnten auch Codemetriken wie die zyklomatische Komplexität verwendet werden. Auf diese Weise können Sie auf zu komplexe Klassen und Methoden hinweisen.

Aufzeichnungen zu führen ist auch eine gute Idee. Wenn Teammitglieder nur verbal ausdrücken, was zu tun ist, müssen die Leute es vergessen. Menschen haben sehr schwache Erinnerungen! =)

Ich würde nicht viel Lärm machen ... Das Entwicklerteam eines Programmierers ist wie seine eigene Familie ... Wenn Sie auf Fehler hinweisen, können die Leute wütend auf Sie werden. Diese Art von Kulturwandel erfordert nicht nur viel Kodierung, sondern auch einen empfindlichen Umgang mit Menschen.


3

Als Manager möchte ich nur hinzufügen, dass mein Team beim ersten Mal guten Code schreibt. Code Reviews, TDD und so weiter. Aber sobald es in Produktion ist und funktioniert, müssten Sie ein starkes Argument abgeben, damit wir zurückkehren.

Ich folge Onkel Bobs Rat, Code immer besser zu hinterlassen, als Sie ihn gefunden haben. Wenn wir also Fehler beheben oder kleine Verbesserungen vornehmen müssen, würde ich hoffen, dass wir damals einen Teil der Aufräumarbeiten durchgeführt haben.

Aber so wie es aussieht, sieht das Geschäft wirklich zu, wie es ums Geld geht. Ich müsste ihnen klar machen, dass sie genug Nutzen aus dem Refactoring ziehen, um meinem Team die Zeit und die Ressourcen zu geben. Nur nicht zu mögen, wie der Code aussieht, ist nicht genug.

Also, wenn es funktioniert, so sehr Sie es auch hassen mögen, müssen Sie es vielleicht in Ruhe lassen.

Jetzt neuer Code, das ist anders. Das sollte guter Code sein.


2

Methoden mit 150 Zeilen ... Ich habe Methoden mit 10.000 Zeilen Code gesehen.

Zwei Ihrer Probleme können mit externen Tools gelöst werden :

  • Etwas inkonsistente Namensrichtlinien
  • Eigenschaften werden nach Möglichkeit nicht als schreibgeschützt markiert

In C # Resharper können beide Probleme überprüft werden. Namen, die nicht Ihren Richtlinien entsprechen, werden als Fehler gekennzeichnet. Eigenschaften, die nicht als schreibgeschützt markiert sind, werden ebenfalls als Fehler angezeigt. FxCop könnte auch eine Hilfe sein.

Dank des Refactorings können diese Tools auch dazu beitragen, große Methoden in mehrere kleinere aufzuteilen.


2

Ich weiß nicht, dass große Klassen immer so schlecht sind, wenn sie mit gut benannten Methoden gut strukturiert sind. Ich verwende Eclipse als meine IDE, so dass es eine sogenannte "Gliederungs" -Ansicht hat, die wahrscheinlich alle IDEs nur mit einem anderen Namen haben, der den Namen und die Verknüpfung zu jeder Methode in der Klasse enthält. Sie können sie alphabetisch sortieren usw. Wenn Sie dies verwenden, ist es einfach, in einer großen Klasse zu navigieren, und es ist mehr als schlecht, wirklich lange Methoden zu haben. Ich denke, es ist schwieriger, intelligent in dieser Methode zu navigieren, wenn Sie nicht wirklich damit vertraut sind. Ich befürworte keine langen Klassen, aber ich denke, dass sie in einigen Fällen handhabbar sind und nicht unbedingt in mehrere Klassen unterteilt werden müssen.


1

Besprechen Sie das Thema mit einigen Ihrer Teammitglieder und lassen Sie sich über die Größe der Methoden ein Bild machen. Sie werden überrascht sein, dass sie Ihnen zustimmen. Was Sie sehen, könnte das Ergebnis schlechter vorheriger Praktiken sein, ehemaliger Entwickler, die nicht mehr im Unternehmen tätig waren, oder dieser Teil war ein eiliger Job, und jetzt haben sie jemanden mit der Zeit eingestellt, ihn umzugestalten;)


1

Du bist immer noch der Neue. Bauen Sie sich einen guten Ruf auf, indem Sie herausfordernde Aufgaben annehmen und diese schnell und fehlerfrei erledigen. Wenn Sie versuchen, Dinge zu ändern, bevor Sie den Respekt Ihrer Kollegen verdienen, fällt es Ihnen möglicherweise viel schwerer, sich einzukaufen (und möglicherweise Ihre Kollegen zu entfremden).

Wenn Sie Wege finden, um die besseren Codierungsgewohnheiten in Ihre eigene Arbeit einzuführen, die effektiv zeigen, wie sie die Entwicklungszeit verkürzen und zu stabileren Lösungen führen, werden Sie möglicherweise sogar gefragt, wie Sie dies erreicht haben.


1

Neben all den anderen tollen Antworten können Sie vielleicht zwei Fliegen mit einer Klappe schlagen und eine Codebereinigung durchführen, um die Codebasis besser zu verstehen. Sie können es an Ihr Team / Ihren Manager verkaufen, um sich mit Ihnen vertraut zu machen, und Sie erhalten Feedback von Ihren Kollegen, wenn diese sich Ihre Änderungen ansehen. Dies wird Sie bei Ihrem besten Ansatz zur Lösung des Problems des schlechten Designs unterstützen.


Wie beantwortet dies die gestellte Frage?
gnat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.