Ich arbeite in einem kleinen Team, ungefähr 10 Entwickler. Wir haben überhaupt keine Kodierungsstandards. Es gibt bestimmte Dinge, die zur Norm geworden sind, aber einige Arten, Dinge zu tun, sind völlig unterschiedlich. Mein großer ist Einzug. Einige verwenden Tabulatoren, andere verwenden Leerzeichen, andere verwenden eine andere Anzahl von Leerzeichen, was ein großes Problem darstellt. Beim Zusammenführen treten häufig Konflikte auf, weil jemand die IDE zum automatischen Formatieren verwendet und ein anderes Zeichen zum Einrücken verwendet als ich. Es ist mir egal, welche wir verwenden. Ich möchte nur, dass wir alle die gleiche verwenden.
Oder ich öffne eine Datei und einige Zeilen haben geschweifte Klammern in derselben Zeile wie die Bedingung, während andere sie in der nächsten Zeile haben. Auch hier macht es mir nichts aus, welche, solange sie alle gleich sind.
Ich habe meinem direkten Vorgesetzten das Problem der Standards einzeln und in Gruppensitzungen angesprochen, und er ist nicht sonderlich besorgt darüber (es gibt mehrere andere, die die gleiche Ansicht vertreten wie ich). Ich brachte meine spezielle Besorgnis über Einrückungszeichen zum Ausdruck und er dachte, eine bessere Lösung wäre, "eine Art Skript zu erstellen, das all das konvertieren könnte, wenn wir aus dem Repo schieben / ziehen". Ich vermute, dass er sich nicht ändern möchte, und diese Lösung scheint übermäßig kompliziert und anfällig für Wartungsprobleme zu sein (außerdem wird hier nur eine Manifestation eines größeren Problems behandelt).
Ist jemand von Ihnen bei der Arbeit in eine ähnliche Situation geraten? Wenn ja, wie sind Sie damit umgegangen? Was wären einige gute Punkte, um meinem Chef zu helfen, Standards zu verkaufen? Wäre es eine gute Idee, eine Basisbewegung zu starten, um Codierungsstandards für diejenigen unter uns zu schaffen, die daran interessiert sind? Bin ich zu spezifisch, sollte ich es einfach loslassen?
Ich danke Ihnen allen für Ihre Zeit.
Hinweis: Vielen Dank an alle für das großartige Feedback! Um es klar zu sagen, ich möchte nicht einen Stil diktieren, um sie alle zu regieren. Ich bin bereit, meine bevorzugte Vorgehensweise zugunsten dessen zuzulassen, was allen am besten passt. Ich möchte Konsistenz und ich möchte, dass dies eine Demokratie ist. Ich möchte, dass es eine Gruppenentscheidung ist, der sich alle einig sind. Es stimmt, nicht jeder wird sich durchsetzen, aber ich hoffe, dass jeder reif genug ist, Kompromisse einzugehen, um die Gruppe zu verbessern.
Anmerkung 2: Einige Leute sind in die beiden Beispiele verwickelt, die ich oben gegeben habe. Ich bin mehr nach dem Herzen der Sache. Es zeigt sich an vielen Beispielen: Benennungskonventionen, riesige Funktionen, die aufgebrochen werden sollten, sollte etwas in ein Util oder einen Service passen, sollte etwas eine Konstante oder eine Injection sein, sollten wir alle verschiedene Versionen einer Abhängigkeit verwenden oder dasselbe, sollte eines Schnittstelle für diesen Fall verwendet werden, wie Unit-Tests eingerichtet werden sollen, was Unit-getestet werden soll, (Java-spezifisch) sollten wir Anmerkungen oder externe Konfiguration verwenden. Ich könnte weitermachen.
quelle
Antworten:
Ein Mitarbeiter und ich hatten ein ähnliches Problem in unserem Team, als wir uns dem ersten Mal anschlossen (ich trat dem Team zuerst bei, er trat ungefähr ein Jahr später bei). Es gab keine wirklichen Codestandards. Wir sind ein MS-Shop und selbst die MS-Codierungsstandards wurden nicht verwendet. Wir haben uns entschlossen, mit gutem Beispiel voranzugehen. Wir setzten uns zusammen und entwarfen ein Dokument, das alle unsere Standards enthielt: IDE-Standards, Namensstandards, alles, was wir uns vorstellen konnten. Dann einigten er und ich uns darauf, den Standard ausdrücklich zu befolgen. Ich schickte eine E-Mail an das Team (von uns beiden) und teilte ihnen mit, dass wir einen Mangel gefunden hatten und den Mangel mit unserem Dokument beheben würden. Wir haben Kritik, Ideen, Kommentare und Meinungen eingeladen. Wir erhielten sehr wenig Feedback und nur einen kleinen Rückstoß. Er und ich haben sofort angefangen, die Standards zu verwenden, Als wir Junior-Entwickler in unsere Projekte einbrachten, führten wir sie in den Standard ein und sie begannen, ihn zu verwenden. Wir haben ein paar Leads, die anfangs zögerten, den Standard aber langsam für sehr viele Dinge einsetzen.
Wir stellten fest, dass viele der Nachwuchsentwickler dasselbe Problem erkannt hatten, aber darauf warteten, dass jemand anderes die Entscheidung traf. Sobald es einen Plan gab, dem zu folgen, waren viele eifrig, ihn anzunehmen. Die harten Nüsse, die es zu knacken gilt, sind diejenigen, die sich weigern, auf andere Weise zu kodieren, und sie werden sich auf lange Sicht normalerweise selbst aus dem Bild heraus kodieren.
Wenn Sie Standards wollen, bahnen Sie den Weg. Überlegen Sie sich eine Liste mit vorgeschlagenen Standards, von denen Sie glauben, dass sie Ihrem Team zugute kommen. Senden Sie es Peers und Leads für Feedback. Ich bin sicher, andere Leute in Ihrem Team haben ähnliche Ideen, aber es fehlt ihnen wahrscheinlich der Mut, etwas dagegen zu unternehmen. Wie Gandhi sagte: "Sie müssen die Veränderung sein, die Sie in der Welt sehen möchten."
quelle
Standards sollten nicht von einem Manager definiert und durchgesetzt werden. Das gesamte Team sollte den Standards zustimmen. Wenn sie sich nicht auf gemeinsame Standards einigen können, schlägt es fehl, einen Manager dazu zu bringen, ihnen Standards aufzuzwingen.
Sie und die anderen, die Ihnen zustimmen, sollten mit gutem Beispiel vorangehen. Beginnen Sie, dieselben Codierungsstandards zu verwenden, veröffentlichen Sie sie und promoten Sie sie für den Rest des Teams. Bitten Sie Sie um Feedback, wie Sie sie verbessern können.
Folgendes ist wichtig, wenn Sie versuchen, Standards zu fördern: Stellen Sie sicher, dass der Fokus nicht auf der Suche nach der besten Methode liegt, sondern auf der Suche nach einer konsistenten Vorgehensweise. So sehr manche Leute anderer Meinung sein mögen, es gibt keinen einzigen Stil für Klammern, keinen einzigen Stil für Kommentare usw. Was das Lesen von Code erleichtert (und damit die Pflege erleichtert), ist ein konsistenter Stil, egal welcher.
quelle
Können Sie Beweise dafür vorlegen, welche Zeit Sie aufgrund der dadurch verursachten Probleme verschwendet haben?
Wenn Sie viel Zeit damit verbringen, diese Probleme zu beheben, oder Fehler auftreten, deren Behebung einige Zeit in Anspruch nimmt, können Sie diese Kosten durch die Einführung von Codierungsstandards drastisch reduzieren.
Führen Sie also ein Protokoll über die aufgetretenen Probleme und die Zeit, die erforderlich ist, um sie zu lösen - sowohl für Sie als auch (wo Sie sich dessen bewusst sind) für Ihre Kollegen.
Wenn Sie dann eine angemessene Menge an Daten haben, präsentieren Sie diese Ihren Kollegen. Sie sollten den Nutzen der Annahme eines Standards sehen. Wenn nicht, zeigen Sie die Daten Ihrem Chef und seinem Chef. Zeigen Sie, dass Sie mit Codierungsstandards Geld sparen können, und dass diese Sie bei der Einführung unterstützen sollten.
quelle
In Ihrer speziellen Situation finde ich die Lösung Ihres Chefs gut. Niemand muss ändern, was er während seiner gesamten Karriere getan hat, und das ist in Ordnung, da die Codestile, die der Compiler ignoriert, keine Rolle spielen, solange der Code lesbar ist. Wenn jeder beim Auschecken ein Autoformat für seinen Stil und beim Einchecken ein Autoformat für einen Standardstil durchführen würde, wäre alles in Ordnung. (Leider schlug ich vor, wo ich arbeite und es wurde mit der Begründung abgelehnt, dass der Codierer nicht mehr genau den Code schreiben würde, den der Continuous Integration Server sieht.)
Ich denke, Codierungsstandards sind gut, wenn sie an Orten angewendet werden, an denen sich die Codequalität wirklich ändert: zum Beispiel bei kleineren Methoden, Klassen mit einer klar definierten Verantwortung, nützlichen und genauen Kommentaren für die schwierigeren Teile usw. Leider sind diese Aspekte sind schwerer automatisch zu überprüfen, aber das ist von grundlegender Bedeutung für die Softwareentwicklung. Alles, was Sie wirklich tun können, ist, anderen gute Praktiken beizubringen und sich selbst beizubringen, Code mit der Klammer in der falschen Zeile zu lesen.
quelle
In Bezug auf Codierungsstandards: Ich werde mit fast allen anderen an Bord klettern und sagen, dass Codierungsstandards eine "gute Sache" sind (im Gegensatz zu keinen Standards).
Lassen Sie sich jedoch nicht mitreißen. Ich habe an einigen Projekten gearbeitet, die einen bestimmten Einrückungsstil diktiert haben, bis hin zur Anzahl der Zeichen (und wenn Projekte so weit gehen, wählen sie unvermeidlich etwas Dummes wie Einrückung mit 8 Leerzeichen). Schwitzen Sie nicht die kleinen Sachen.
Eine einfache Lösung: Geben Sie den Entwicklern eine begrenzte Auswahl an Optionen für Klammern und Einrückungen, schreiben Sie jedoch vor, dass der Stil und die Einrückung der Klammern in einem Modul konsistent sein müssen. (Sie möchten, dass foo.h und foo.cpp dem gleichen Stil folgen, oder?) Die Betreuer müssen sich an den vorhandenen Stil anpassen. Sie können ein Modul nicht neu schreiben, um es ihrem skurrilen Stil anzupassen. Mehrere Stile innerhalb eines Moduls sind nur verwirrend und ein Zeichen für Schlamperei. Wenn ich diesen Unsinn sehe, frage ich mich, was sonst noch los ist.
Möglicherweise möchten Sie auch darüber nachdenken, Registerkarten zum Einrücken in den gespeicherten Inhalt einer Datei zu verbannen . Die meisten IDEs / Redakteure erledigen einen vernünftigen Job, indem sie Benutzereingaberegisterkarten in Leerzeichen übersetzen, und die meisten haben Optionen, um diese Übersetzung automatisch zu machen. Viele machen einen beschissenen Job, wenn die Datei bereits Tabulatoren enthält, insbesondere eine gemischte Tüte von Tabulatoren und Leerzeichen.
Alles in allem denke ich, dass Sie ein tieferes Problem in Ihrem Projekt haben könnten. Sie haben Probleme beim Zusammenführen erwähnt. Wenn Sie feststellen, dass Sie viel zusammenführen müssen, kann dies ein Zeichen für eine schlechte Partitionierung des Projekts sein. So wie zu viele Köche die Brühe verderben, verderben zu viele Programmierer, die mit derselben Datei arbeiten, das Projekt. Warum berühren Joe, Susie und Sie jeweils foo.cpp?
quelle
Dies ist einer der Bereiche, in denen Forschung betrieben wird. Grundsätzlich ist die Hauptfrage, ob Sie Codeüberprüfungen durchführen. Code Reviews sind ohne Zweifel das effizienteste Mittel zur Verbesserung der Codequalität. (Quelle: Software Engineering Institute, CMU). Es ist sicherlich effizienter als ein zusätzlicher Tester.
Jetzt profitieren Code Reviews von einem gemeinsamen Codierungsstandard, da dies das Lesen des Codes anderer Personen erleichtert. Das gibt Ihnen ein zweistufiges Argument für die Einführung von Codierungsstandards: Letztendlich wird es billiger, guten Code zu produzieren.
quelle
Da es bereits "mehrere andere" gibt, die bei Ihnen sind, würde ich ein spontanes Treffen vorschlagen. Laden Sie alle Entwickler ein, nehmen Sie sich etwas Zeit und finden Sie heraus, was Sie und Ihre Kollegen täglich beschäftigt. Versuchen Sie zunächst nicht, bestimmte Lösungen zu finden, sondern finden Sie heraus, welche Änderungen an der Art und Weise erforderlich sind, wie Sie derzeit alle Code schreiben.
Dann sehen Sie, ob Sie sich auf einige grundlegende Konzepte einigen können. Der Vorschlag, in jedem Modul den gleichen Stil zu verwenden, den @David Hammen eingeführt hat, ist ein guter Anfang, und ich denke, die meisten Entwickler könnten dem ohne weiteres zustimmen.
Wenn Sie einmal das Gefühl haben, dass Sie sich beim Schreiben von neuem Code auf einen grundlegenden Stil einigen können, ist dies eine gute Ergänzung. Konzentrieren Sie sich auf Dinge, die sich tatsächlich auf die Wartbarkeit auswirken. Namensprobleme stehen ganz oben auf meiner persönlichen Liste, denn wenn Sie ein halbes Dutzend verschiedener Namensstile in einem einzigen Produkt von bemerkenswerter Komplexität haben, wird es sehr schnell zu Kopfschmerzen. Aber auch hier ist es wichtig , sich auf das zu konzentrieren, was Sie und Ihr Team für wichtig halten . Verfassen Sie ein kurzes Dokument, dem zumindest jeder zustimmen kann (auch wenn er selbst einen anderen Haustierstil hat), und senden Sie es an alle Teammitglieder. Machen Sie es zu einem "lebenden" Dokument, aktualisieren Sie es mit der Zeit, aber stellen Sie sicher, dass Sie es nicht auch machen starr und spezifisch zu machen.
Sofern Ihr Chef nicht in das Schreiben von Code involviert ist, sollte er sich nicht zu viele Gedanken darüber machen, welcher Stil genau übernommen wird (vorausgesetzt, er konzentriert sich auf Lesbarkeit und Wartbarkeit), er sollte jedoch in der Lage sein, die Vorteile aller Mitglieder des Teams zu erkennen, die einem gemeinsamen Stil folgen beim Schreiben von Code.
quelle
Es gibt einige Dinge, die schmerzhaft sind. Am schmerzhaftesten ist eine IDE, die Code automatisch neu formatiert, kombiniert mit Entwicklern, die ihre IDEs auf unterschiedliche Weise einrichten. Jedes Mal, wenn Sie den Code vergleichen, haben Sie hundert Änderungen, nachdem jemand mit unterschiedlichen Einstellungen den Code bearbeitet hat. Das ist inakzeptabel. Hier müssen Sie alle Köpfe zusammenschlagen, sich auf eine Reihe von Einstellungen einigen und alle Eincheckvorgänge ablehnen, die andere Einstellungen verwenden. Wenn ich eine einzelne Codezeile ändere, sollte in den Diffs eine einzelne Codezeile geändert werden und nicht Hunderte.
Alles andere ist entweder harmlos oder es gibt bessere Möglichkeiten, Dinge zu tun, von denen andere überzeugt werden können. Hier sollte die Regel lauten: Lege dich nicht mit dem Code anderer an, es sei denn, du verbesserst ihn wirklich. Und eine Mischung aus Stil A und Stil B ist immer schlechter als sowohl Stil A als auch Stil B.
Stellen Sie sicher, dass Sie die Best Practice befolgen. Welches ist je nach Sprache unterschiedlich. Aber da braucht man keine Standards (die vielleicht von jemandem geschrieben wurden, der es gut meint, aber eigentlich nicht so kenntnisreich ist), aber jeder sollte versuchen, gute Beispiele zu geben.
Vermeiden Sie auf jeden Fall Machtkämpfe. Es gibt nichts Schlimmeres als einen kleinen Hitler in Ihrem Team, der versucht, jeden nach seinem Willen zu zwingen. Und das ist leider der Typ, der sich freiwillig meldet, um Ihre Codierungsstandards zu schreiben :-(
quelle
In allen Beispielen, die Sie angegeben haben, geht es im Wesentlichen um Leerzeichen und Formatierungen. Wenn das das größte Problem ist, stimme ich Ihrem Manager zu: Es ist keine so große Sache.
Wo Standards wirklich sehr nützlich sind, geht es darum, Dinge zu benennen und die Komplexität zu reduzieren.Wie man Bezeichner, Klassen benennt, wo man sie ablegt usw. Es ist äußerst wichtig, die Namen konsistent zu halten, insbesondere in einem großen Projekt. Zu den Regeln zur Reduzierung der Komplexität gehört es, Funktionen unter einer bestimmten Anzahl von Zeilen zu halten (in kleinere Funktionen aufzuteilen) oder Parameterlisten unter einer bestimmten Anzahl von Argumenten zu halten (möglicherweise sollten Sie sie zu einem Objekt bündeln und diese herumreichen).
Wenn ein bestimmter Entwickler in Ihrem Team Code schreibt, der schwerer zu verstehen / zu debuggen ist, weil er viele lange Codestücke mit Variablennamen aus einem Buchstaben enthält, ist dies ein guter Grund, einige Standards zu übernehmen und nichts, mit dem man das Problem beheben kann ein Skript. Dies ist eine gute Sache, um (taktvoll) darauf hinzuweisen, dass Standards verbessert werden können.
Ein weiterer Grund, warum Ihr Manager dies möglicherweise nicht als Problem ansieht, besteht darin, dass Sie den Code des jeweils anderen Managers nicht häufig lesen. Das kann passieren, wenn jeder seinen eigenen Bereich des Codes hat und sich nicht zu sehr außerhalb davon wagt. Das funktioniert ziemlich gut, bis jemand die Organisation verlässt, was aus verschiedenen guten oder schlechten Gründen passieren kann. Standards, die die Lesbarkeit verbessern, erleichtern es einem neuen Entwickler, die Wartung eines Codeteils zu übernehmen.
quelle
klingt so ist dein problem, nicht die formatierung, sondern die neuformatierung. Dies ist ein großes Problem für SCMs und der Rat ist einfach: Tu es nicht. Wenn Sie also das nächste Mal alle Leerzeichen in Tabulatoren umformatieren oder die geschweiften Klammern in den von Ihnen bevorzugten Stil umformen, müssen Sie sie nach unten klopfen. Lassen Sie sie stattdessen die Zusammenführung durchführen. Stellen Sie sich über sie und missbilligen Sie die Zeitverschwendung, die ihre Gedankenlosigkeit verursacht hat.
Die Alternative besteht darin, einen Pre-Commit-Formatierer einzufügen, der den gesamten Code vor dem Einchecken immer auf den Standardstil umformatiert. Wenn Sie ein Team von Entwicklern haben, die sich selbstverständlich neu formatieren, dann ist dies eine gute Option - der SCM sieht immer das gleiche Format, so dass die Deltas klein und schön zusammenzuführen sind.
quelle
Wenn jemand einen neuen Kodierungsstandard vorschlägt, an dem ich arbeite, stimmen wir darüber ab. Erhält es eine Mehrheit, wird es angenommen, andernfalls wird es abgelehnt. Wenn Sie dies nicht tun, werden Ihre Standards nicht in Kauf genommen und sie werden auch dann nicht verwendet, wenn sie dokumentiert sind.
quelle
Ab Ihrem spezifischen Problem wird Ihre beste Wette wahrscheinlich mit Joels Vorschlag beginnen und mit gutem Beispiel vorangehen. Versammeln Sie ein oder zwei Programmierer, denen das am Herzen liegt, und einigen Sie sich, um die Faulen zu überlisten.
Für das allgemeine Problem ist es am besten, einfach zu modulieren . Jede Person erhält eine andere Datei. Wenn Sie einer Datei eine bestimmte Pflege zuweisen müssen, behalten Sie die Kodierungsstandards bei, auch wenn sie sich von den anderen unterscheiden. Müssen Sie in dieselbe Datei schreiben? Erstellen Sie eine Teilmenge und fügen Sie sie stattdessen ein.
quelle
Versuchen Sie das nicht!
Mit gutem Beispiel vorangehen. Versuchen Sie, Ihr Code-Format so schrecklich wie möglich zu gestalten und viele schrecklich formatierte Änderungen am hübschen Code anderer Leute einzuchecken. Wenn die (unvermeidliche) Reaktion auftritt, sagen Sie, dass das, was Sie tun, in Ordnung ist, weil es keinen Kodierungsstandard gibt.
Wenn Sie nicht von Ihren Mitarbeitern gelyncht werden (!!), erhalten Sie möglicherweise einen Kodierungsstandard.
Offensichtlich ist dies eine Strategie mit hohem Risiko ... :-)
quelle