Was ist mit all diesen Codierungsregeln?

10

Ich habe immer die Idee unterstützt, Codierungsregeln für Entwickler in einem Unternehmen oder einem bestimmten Projekt zu haben. Besonders wenn das Unternehmen größer als 10 ist. Je größer das Unternehmen, desto größer der Bedarf. Ich weiß, dass viele Leute anderer Meinung sein werden, aber ich habe Projekte gesehen, die sie nicht haben, und der Code sieht aus wie eine totale Katastrophe.

Das eigentliche Problem, das sich daraus ergibt, besteht darin, diejenigen hartnäckigen zu machen, die keine Klammern in if-Anweisungen verwenden oder überall im Code dieselbe Verbindungszeichenfolge verwenden, oder was auch immer, um die Codierungsregeln zu verwenden, ohne sie zu widersprechen die Idee?

TheBoyan
quelle
3
Wenn Sie C # als Sprache verwenden, verwenden Sie StyleCop. Wenn Sie Java verwenden ...
Job
@Job - Ja, wir verwenden meistens C #. StyleCop sieht interessant aus.
TheBoyan

Antworten:

9

Lassen Sie sie ein Problem beheben, anstatt Regeln zu bekämpfen. Ich persönlich bevorzuge die Idee von "Style Guides", "Coding Standards" oder ähnlichem in der Hoffnung, dass sie die Reaktion "Knie = Regeln = schlecht" des Knie-Ruckes verhindert.

Aber selbst wenn dies der Fall ist - ich neige dazu zu glauben, dass die Regeln aus einem bestimmten Grund gelten, und der Weg, hartgesottene Leute dazu zu bringen, sich umzudrehen, besteht darin, ihnen klar zu machen, dass sie durch Befolgen von Richtlinien dazu beitragen, den Code einfacher zu machen Lesen Sie für alle.

Manchmal ist Gruppenzwang die beste Lösung dafür.

bethlakshmi
quelle
Wenn man hier Devil's Advocate spielt, ist es immer möglich, dass Regeln einfach falsch sind (zum Beispiel etwas, das für ein früheres Projekt eingerichtet wurde, aber die Entwickler für das aktuelle Projekt belastet) - also einen Regelüberprüfungs- / Aufhebungsprozess - selbst wenn dies der Fall ist wird selten verwendet - kann auch hilfreich sein, um Menschen zu versichern, dass die Regeln eher eine hilfreiche Richtlinie als eine Einschränkung der Entwicklerfreiheit sind.
Beekguk
Absolut - und ich denke, wenn Sie sich an den Rat halten, sich darauf zu konzentrieren, warum Sie die Regel brauchen, dann wissen Sie, wenn Sie herausfinden, dass Sie die Regel nicht brauchen, dass das Team oder die Person aus einer offenen Denkweise darauf gekommen ist und nicht nur defensiv sein aufgrund eines unerklärlichen Regelprozesses.
Bethlakshmi
6

Bei meiner Arbeit verwenden wir alle drei folgenden Lösungen:

1) Verwenden Sie einen Code-Style-Checker wie den exzellenten Checkstyle (für Java) oder StyleCop (für C #). Hierbei handelt es sich um einfach zu konfigurierende Tools, mit denen Codierungsstil- / Regelabweichungen automatisch hervorgehoben werden können. Es gibt jedem eine neutrale dritte Partei, um zu bestimmen, was akzeptabel ist und was nicht.

2) Nehmen Sie eine neu formatierte Code-Vorlage zum Neuformatieren an (hier ein Beispiel mit Eclipse) (und eine andere für Visual Studio), die Ihren Code beim Speichern automatisch formatiert. Dies ist ideal, um es jemandem zu ermöglichen, zu codieren, wie er es wünscht, aber den gesamten Code beim Speichern / Festschreiben auf die gleiche Weise formatiert zu haben. Ich mag diesen wirklich und unser Code war noch nie so konsistent.

3) Codeüberprüfungen. Hoffentlich machen Sie das trotzdem, aber eine Sache, die hervorgehoben werden sollte, ist, wo Codierungsregeln / -stile gegen die Konvention verstoßen.

Darüber hinaus ist es wichtig, dass sich alle auf demselben Boot befinden und die Stile / Regeln vereinbart haben, auf die sie hinarbeiten. Machen Sie deutlich, dass Sie nicht in allen Punkten eine Einigung erzielen, sondern bitten Sie das Team, sich zu verpflichten, den Entscheidungen des Teams treu zu bleiben. Stellen Sie sicher, dass Sie gelegentlich die ausgewählten Stile / Regeln überprüfen, um die reale Erfahrung mit ihnen und die Teamumsätze zu berücksichtigen.

Chris Knight
quelle
Sie können einige Revisionskontrollsysteme so konfigurieren, dass beim Einchecken beispielsweise Checkstyle erzwungen wird. Wenn Sie dies tun, beginnen Sie mit den wichtigsten Regeln und fügen Sie später wählerischere Regeln hinzu.
BillThor
4

Das eigentliche Problem, das sich daraus ergibt, besteht darin, die hartnäckigen zu erstellen, die keine Klammern in if-Anweisungen verwenden oder überall im Code dieselbe Verbindungszeichenfolge verwenden, oder was auch immer.

Sind sie "hartnäckig", wenn sie keine Klammern verwenden, oder ist dies eine "hartnäckige" Anfrage?

Wähle deine Schlachten. Ich bezweifle, dass dies einer derjenigen ist, die es wert sind, ausgewählt zu werden. Ich würde es nicht genießen, irgendwo zu arbeiten, was in der Nähe dieses Detaillierungsgrades beim "Code zum ersten Einchecken" erwartet wird . Dies ist ein roter Indikator dafür, dass das Team das Refactoring nicht versteht.

OO 101 : "Refactor, wenn das Produkt das tut, was es tun muss". Nicht bevor.

P.Brian.Mackey
quelle
Das Nicht-Verwenden von Klammern war nur ein Beispiel :) obwohl ich für eine große Firma gearbeitet habe, die ein Buch mit> 200 Seiten Codierungsregeln hatte, und dies war eines davon. Ich bin mir jedenfalls sicher, dass Sie mir zustimmen würden, dass jemand, der absichtlich immer wieder dieselbe Verbindungszeichenfolge (ein Beispiel) im Code verwendet, nur weil er zu faul ist, sie in eine Konfigurationsdatei zu schreiben und zu lesen es von dort braucht die Aufmerksamkeit und man muss wissen, wie man mit solchen Situationen umgeht.
TheBoyan
2

Es ist ziemlich schwierig, in großen Teams auf der Schulter jedes einzelnen Entwicklers zu sitzen und sicherzustellen, dass sie Klammern dort platzieren, wo Sie denken, dass sie hingehen sollten - vertrauen Sie mir in diesem Fall;).

Wenn es etwas ist, von dem Sie wirklich glauben, dass es Ihre Entwicklung behindert, brauchen Sie einen "Gatekeeper". Lassen Sie beispielsweise keine Personen ohne Codeüberprüfung einchecken. Lassen Sie den technischen Architekten oder Teamleiter den Code überprüfen und ablehnen, bis er den Codestil "korrigiert". Sie werden es bald satt haben und sich an die Regeln anpassen, möglicherweise nur so lange, wie sie überprüft werden.

Natürlich nehmen einige Unternehmen Junior-Programmierern die Check-in-Rechte vollständig weg. Wenn sie endlich die Kodierungsregeln der Unternehmen kennen, erhalten sie das Privileg.

Martin Blore
quelle
2
Wenn die Platzierung der Zahnspange Ihr größtes Qualitätsproblem ist, haben Sie wahrscheinlich ziemlich viel Glück. Ist das die richtige Ebene, um sich darauf zu konzentrieren?
Bo Persson
Nur ein Beispiel aus der Frage. Das Prinzip ist, dass Code-Design "Richtlinien", wie bethlakshmi unten sagt, genau das sind - Richtlinien. Wenn Sie wirklich besorgt darüber sind, wie sie befolgt werden, müssen Punkte im Prozess passieren, um sie daran zu erinnern / zu lehren / durchzusetzen.
Martin Blore
Aber Klammern, wo Sie denken, dass sie gehen sollten ... Das spricht Bände. Ich denke, es gibt grundlegendere Aspekte der Codierbarkeit / Codierungsstandards als die Platzierung von Klammern. Ich bin damit einverstanden, dass jeder im Projekt dem gleichen Standard folgen sollte, aber einer über dem anderen spielt hier keine große Rolle. Vielleicht können Sie sie den Kampf um die Platzierung der Zahnspange "gewinnen" lassen, wenn sie Ihre anderen Vorschläge zu Codierungsstandards akzeptieren? Darüber hinaus fühlen sie sich als Teil der Lösung, wenn ihre Idee der Platzierung von Zahnspangen in den Standards enthalten ist.
Gilles
1
Genau. Ich habe es aufgegeben, einen Entwickler davon zu überzeugen, Klammern auf seiner eigenen Linie anstatt auf Inline-Klammern zu setzen, als Gegenleistung dafür, dass er SOLID und TDD gelernt hat ... ein großartiger Handel, würde ich sagen;).
Martin Blore
1
"Natürlich nehmen einige Unternehmen Junior-Programmierern die Check-in-Rechte vollständig weg. Wenn sie endlich die Codierungsregeln der Unternehmen kennen, erhalten sie das Privileg." - Dies ist der einzige Weg, dies zu tun, wenn es darauf ankommt.
ocodo
2

Ich denke, Sie sprechen über Probleme auf sehr unterschiedlichen Ebenen:

wie man solche hartnäckigen macht, die keine Klammern in if-Anweisungen verwenden wollen,

Dies ist meistens ein Stil- / Lesbarkeitsproblem, es sei denn, es liegt ein explizites Problem mit der Priorität des Operators vor. Letzteres sollte nicht sehr häufig sein und ist ohnehin einheitlich testbar und daher leicht zu reparieren. Ersteres kann leicht in einen Heiligen Krieg zurückfallen, mit wenig zu gewinnen, aber schwerwiegenden negativen Konsequenzen für die Moral des Teams. Also Vorsicht - schieben Sie nur bewährte Regeln, die von mindestens einigen Teams / Communities akzeptiert wurden und nachweislich funktionieren.

oder verwenden Sie überall im Code dieselbe Verbindungszeichenfolge.

Wenn Sie Magic Constants meinen, ist dies in der Tat ein Wartungsproblem (plus potenziell Sicherheitsproblem), und als solches wird IMHO jeder erfahrene Entwickler verstehen und akzeptieren, dass es eine schlechte Sache ist.

oder was auch immer, um die Kodierungsregeln zu verwenden, ohne dass sie sich der Idee widersetzen?

Sie können die Leute nicht zwingen, sich mit den Kodierungsregeln einverstanden zu erklären. Ihre einzige Chance besteht darin , durch Diskussion und (manchmal heftige) Debatten ein gemeinsames Verständnis und Einverständnis der Teammitglieder zu erreichen . Sie müssen logische und überzeugende Argumente verwenden , den Wert hinter jeder Regel aufzeigen und erklären, wie sich das Befolgen dieser Regel für die Unannehmlichkeiten beim Anpassen tief verwurzelter Gewohnheiten auszahlt. Versuchen Sie andererseits, den Übergang so einfach wie möglich zu gestalten , indem Sie beispielsweise beim Einchecken eine automatisierte Code-Formatierung gemäß den akzeptierten Regeln einführen.

Manchmal muss man jedoch einfach akzeptieren, dass Menschen unterschiedliche Meinungen haben , daher sind die Kodierungsregeln, die jeder akzeptieren kann, in gewisser Hinsicht nachsichtig. Akzeptieren Sie das und konzentrieren Sie sich auf Bereiche, in denen Sie Dinge mit weniger Aufwand verbessern können.

Péter Török
quelle
"Einführung der automatisierten Code-Formatierung beim Einchecken gemäß den akzeptierten Regeln" ... das klingt interessant, weitere Ideen, wo ich so etwas finden kann.
TheBoyan
@bojanskr, die meisten gängigen IDEs unterstützen heutzutage Code-Formatierungsregeln in geringerem oder größerem Umfang und können Ihren Code beim Speichern oder Einchecken automatisch formatieren. Für Java, sowohl für Eclipse als auch für IntelliJ, schätze ich auch NetBeans, aber ich habe nicht viel Erfahrung damit. Informationen zu C # finden Sie oben im Kommentar von @ Job. Es gibt aber auch eigenständige Tools wie Artistic Style für C / C ++. Und die meisten mir bekannten SCCs unterstützen die Ausführung benutzerspezifischer Skripte / Trigger beim Einchecken.
Péter Török
2

Binden Sie sie in die Festlegung von Regeln ein. Dies hilft normalerweise dabei, die Menschen zu ermutigen, ihnen zu folgen.

JeffO
quelle
1

Dafür ist die Codeüberprüfung gedacht. Die Codeprüfer sollten keinen Code passieren lassen, der nicht den Standards entspricht. Stellen Sie sicher, dass Sie die Regeln für dringende Korrekturen nicht lockern. Wenn Sie einige Male unter Druck wiederholen müssen, um dies zu erreichen, werden diejenigen, die nicht bereit sind, ihre Arbeit beim ersten Mal ordnungsgemäß auszuführen, behoben.

HLGEM
quelle
1

Überall die gleiche Verbindungszeichenfolge? Die Lösung hierfür ist das Refactor, bis Sie alle Duplikate entfernt haben. Copy-Paste-Codierer sollten ins Programmierergefängnis gehen. (Nicht lachen! Steve Ballmer ist der Aufseher.)

Aber das eigentliche Problem hier ist Ihr Verb „make“ . Sie können Programmierer nicht dazu bringen, irgendetwas zu tun, und wenn Sie dies tun, verschwenden Sie ihre wertvollste Eigenschaft: das tiefe intellektuelle Engagement, das durch die Arbeit an etwas entsteht, das Ihnen wichtig ist.

So würde ich es lösen:

  1. Bestehen Sie darauf, dass das Team einen gemeinsamen Codierungsstandard hat. Es kann 5 Zeilen lang sein, aber alle müssen zustimmen.
  2. Jedes Mal, wenn Sie ein Argument bemerken, bestehen sie darauf, es zusammenzufassen und in den Codierungsstandard aufzunehmen. Wenn Sie bemerken, dass Leute Dinge neu formatieren, behandeln Sie dies als Argument.
  3. Wann immer ein Standardartikel vereinbart wird, prüfen Sie, ob es ein Tool gibt, das die gesamte Codebasis auf einmal bereinigt.
  4. Gehen Sie alle paar Monate den Codierungsstandard durch und prüfen Sie, welche noch wahr und relevant sind. Der Standard dokumentiert nur, was die Leute tun. Und es macht keinen Sinn, Elemente im Standard zu halten, die offensichtlich geworden sind.

Programmieren ist ein Mannschaftssport oder eine kollektive künstlerische Arbeit. Was die Leute vereinbaren, ist bei weitem nicht so wichtig wie das, worüber sie sich einig sind, und sie sind gut darin, bei Bedarf neue Vereinbarungen zu treffen.

William Pietri
quelle