Warum schlägt Onkel Bob vor, Codierungsstandards nicht aufzuschreiben, wenn Sie dies vermeiden können?
Wenn Sie nach Gründen für seine Meinung fragen, haben Sie möglicherweise nur dann eine Antwort, wenn er hier eine Antwort veröffentlicht ( unsere Meinung ist jedoch irrelevant) ...
Warum sollte ich keinen Kodierungsstandard aufschreiben?
Wenn Sie fragen, ob er damit Recht hat: Lassen Sie mich (bis jetzt) der einzige Unpopuläre sein, der sagt, dass Sie keinen Grund haben, es zu vermeiden.
Schreiben Sie es auf . Ich werde jedoch versuchen, meine Gründe zu erklären ...
David schlug in einem Kommentar vor, dass der Hauptpunkt von Stephens Antwort nicht darin besteht, warum Sie keine Dokumente schreiben sollten , sondern in welcher Form sie vorliegen. Wenn Richtlinien in Tools formalisiert sind (nicht nur manuelle Codeüberprüfung), kann ich zustimmen (wenn das Gesetz nichts anderes vorschreibt). Bitte beachten Sie, dass Tools leider nicht alles überprüfen können (die Berechnungstheorie ist nicht unser Freund), da sie auf eine bestimmte Übersetzungseinheit oder ein bestimmtes Paket oder auf eine beliebige Sprache, die Sie als Grenze bezeichnen, beschränkt sind .
Die Formulierung von Onkel Bob lässt mich jedoch nicht glauben, dass er darüber spricht.
Kann ich einem solchen Experten nicht zustimmen? Das tue ich für fast jeden Punkt in dem zitierten Beitrag (siehe auch den zweiten Teil dieser Antwort für Details). Lassen Sie uns versuchen zu verstehen , warum (vorausgesetzt , Sie wissen bereits, dass Code - Richtlinien nicht nur um kleinere Formatierung sind Probleme ).
- In einigen Fällen sind schriftliche Kodierungsstandards gesetzlich vorgeschrieben.
- Ich lese die Dokumentation und bin mir sicher, dass ich nicht alleine bin. Teammitglieder können sich im Laufe der Zeit ändern, Kenntnisse können nicht in einer 5- bis 10-jährigen Codebasis oder in den Köpfen von Teammitgliedern vorhanden sein. Unternehmen sollten Personen entlassen, die internen Richtlinien nicht folgen.
- Sobald die Codierungsstandards genehmigt wurden , ändern sie sich nicht mehr oft und wenn Sie dies möchten, können Sie sich darüber informieren. Wenn sich die Standards geändert haben, ist Ihre Dokumentation (im Code) nicht mehr aktuell, da Ihr gesamter Code nicht dem neuen Standard entspricht. Das Neuformatieren / Refactoring kann langsam sein, aber Sie müssen immer eine schriftliche, maßgebliche Richtlinie befolgen.
- Es ist besser, ein 5-seitiges Dokument zu lesen, als 10 / 20K LOC zu inspizieren, um eine Regel zu extrapolieren (die Sie vielleicht falsch verstehen, übrigens), kein Zweifel.
- Es ist ironisch, dass jemand, der viele Bücher über Designprinzipien und Codierungsstil geschrieben hat, vorschlägt, dass Sie keine eigenen Richtlinien schreiben sollten. Ist es dann nicht besser, wenn er uns einige Codebeispiele vorlegt? Nein, denn in den schriftlichen Richtlinien ist nicht nur festgelegt, was zu tun ist, sondern es fehlen auch zwei weitere Punkte: Was nicht zu tun ist und Gründe, es zu tun oder nicht.
"Freies selbstorganisierendes Programmieren" ist gut für einen 16-jährigen Ninja, aber Organisationen haben andere Anforderungen :
- Codequalität muss auf Unternehmensebene gewährt (und definiert) werden - darüber kann kein einzelnes Team entscheiden. Sie verfügen möglicherweise nicht einmal über die Fähigkeiten, um zu entscheiden, was besser ist (wie viele Entwickler verfügen beispielsweise über alle erforderlichen Fähigkeiten, um MISRA zu überprüfen, oder verstehen lediglich jede Regel?).
- Mitglieder können zwischen verschiedenen Teams ausgetauscht werden: Wenn alle denselben Codierungsstandards folgen, ist die Integration reibungslos und weniger fehleranfällig.
- Wenn sich ein Team selbst organisiert, entwickeln sich die Standards im Laufe der Zeit, wenn sich die Teammitglieder ändern. Sie haben dann eine riesige Codebasis, die nicht den derzeit akzeptierten Standards entspricht .
Wenn Sie vor dem Prozess über Menschen nachdenken, kann ich nur empfehlen, über TPS zu lesen: Der Mensch ist ein zentraler Bestandteil von Lean, die Abläufe sind jedoch stark formalisiert.
Natürlich ist eine kleine Organisation mit nur einem Team kann das Team läßt die Standards entscheiden zu übernehmen , aber dann muss es nach unten geschrieben werden. Hier auf Programmers.SE können Sie Beiträge von Eric Lippert lesen: Ich nehme an, wir sind uns alle einig, dass er ein erfahrener Entwickler ist. Als er für Microsoft arbeitete, musste er die schriftlichen Richtlinien einhalten (auch wenn einige Regeln falsch , nicht anwendbar oder nutzlos sein mögen zu ihm.) Was ist mit Jon Skeet? Die Google-Richtlinien sind ziemlich streng (und viele Leute stimmen ihnen nicht zu), aber er muss sich an solche Richtlinien halten. Ist es ihnen gegenüber respektlos? Nein, sie haben wahrscheinlich daran gearbeitet, solche Richtlinien zu definieren und zu verbessern. Ein Unternehmen wird nicht von einem Mitglied (oder einem Team) erstellt, und jedes Team ist keine Insel .
Beispiele
- Sie haben beschlossen, in C ++ keine Mehrfachvererbung und verschachtelten Klassen zu verwenden, da die tatsächlichen Teammitglieder dies nicht gut verstehen . Später muss jemand, der Mehrfachvererbung verwenden möchte, das gesamte 1M-LOC durchsuchen, um festzustellen, ob es jemals verwendet wurde. Es ist schlecht, denn wenn Designentscheidungen nicht dokumentiert sind, müssen Sie die gesamte Codebasis studieren, um sie zu verstehen. Und selbst dann, wenn es nicht verwendet wurde, liegt das daran, dass es gegen den Kodierungsstandard verstößt, oder ist es zulässig, aber es gab einfach keine früheren Situationen, in denen Mehrfachvererbung eine gute Anpassung war?
- In C # hatten Sie Methoden zum Bereitstellen von Standardparametern überladen, da Ihre Codebasis gestartet wurde, als optionale Parameter in C # nicht verfügbar waren. Dann haben Sie sich geändert und Sie haben begonnen, sie zu verwenden (indem Sie den alten Code überarbeitet haben, um sie jedes Mal zu verwenden, wenn Sie solche Funktionen ändern mussten). Auch später haben Sie festgestellt, dass optionale Parameter schlecht sind, und Sie vermeiden, sie zu verwenden. Was ist die Regel , die Ihnen Ihr Code sagt? Es ist schlecht, weil sich Standard weiterentwickelt, aber die Codebasis langsamer entwickelt, und wenn es Ihre Dokumentation ist, dann stecken Sie in Schwierigkeiten.
- Jon wechselte von Team A zu Team B. Jon muss einen neuen Standard lernen ; Während des Lernens wird er wahrscheinlich subtilere Fehler einführen (oder, wenn Sie Glück haben, nehmen Sie sich einfach viel Zeit, um den vorhandenen Code zu verstehen und die Codeüberprüfung zu verlängern).
- Team A wechselt zu einer Codebasis, die zuvor Team B gehört. Es gelten völlig andere Codierungsstandards. Umschreiben? Anpassen? Mischen? Alle sind gleich schlecht.
Onkel Bob
Lassen Sie sie in den ersten paar Iterationen weiterentwickeln.
Richtig, bis Sie keinen Standard haben und Ihre Organisation Ihnen die Aufgabe zugewiesen hat , einen zu erstellen .
Lassen Sie sie teamspezifisch statt firmenspezifisch sein.
Nein, aus allen oben genannten Gründen. Selbst wenn Sie denken, nur die Code-Formatierung zu formalisieren (die am wenigsten nützliche Sache, die Sie vielleicht formalisieren möchten), habe ich immer noch die Erinnerung an endlose (und nutzlose) Kriege um die Formatierung. Ich möchte sie nicht immer wieder leben, sondern ein für alle Mal einstellen.
Schreiben Sie sie nicht auf, wenn Sie dies vermeiden können. Lassen Sie den Code vielmehr die Art und Weise sein, wie die Standards erfasst werden.
Nein, aus den oben erläuterten Gründen (natürlich, es sei denn, Sie ändern Ihren gesamten Code auf einmal, wenn sich die Richtlinien ändern). Möchten Sie Ihren Code unverändert lassen? Wie überprüfen Sie die Codebasis, um die aktuellen Richtlinien zu verstehen ? Suchen Sie nach dem Alter der Dateien und passen Sie Ihren Codierungsstil an das Alter der Quelldateien an?
Legisliere kein gutes Design. (zB sag den Leuten nicht, dass sie goto nicht benutzen sollen)
Richtig, Richtlinien müssen kurz sein, sonst wird sie niemand lesen. Wiederholen Sie nicht das Offensichtliche.
Stellen Sie sicher, dass jeder weiß, dass es bei dem Standard um Kommunikation geht, und um nichts anderes.
Bei einem guten Standard geht es nicht nur um Qualität, es sei denn, Sie möchten einen Standard nur für kleinere Details haben.
Bringen Sie das Team nach den ersten Iterationen zusammen, um zu entscheiden.
Sehen Sie sich den ersten Punkt an und vergessen Sie nicht, dass ein Codierungsstandard in der Regel ein Prozess ist, dessen Entwicklung und Weiterentwicklung viele Jahre in Anspruch nahm: wenige Iterationen, möglicherweise mit Nachwuchsentwicklern? "Ja wirklich?" Möchten Sie sich auf das Gedächtnis eines älteren Mitglieds (falls vorhanden) verlassen?
Drei Notizen:
- Meiner Meinung nach sind die Nachteile bei einigen Sprachen größer als bei anderen. In C ++ ist beispielsweise ein Unternehmensstandard sogar noch wichtiger als in Java.
- Diese Überlegung trifft möglicherweise nicht ganz zu (und die Gründe für Onkel Bob sind möglicherweise weniger extrem ), wenn Sie in einem sehr kleinen Unternehmen arbeiten, in dem Sie nur ein kleines Team haben.
- Sie werden eingestellt (als Team) und Sie werden alleine mit einem neuen Projekt arbeiten, dann werden Sie es vergessen und weitermachen. In diesem Fall ist es Ihnen vielleicht egal (aber Ihr Arbeitgeber sollte ...)