Wird überhaupt noch ein Kodierungsstandard benötigt?

13

Ich weiß, dass es erwiesen ist, dass ein Kodierungsstandard enorm hilft. Es gibt jedoch viele verschiedene Tools und IDEs, die nach dem vom Programmierer bevorzugten Standard formatiert werden. Solange der Code ordentlich / kommentiert ist (und kein Spaghetti-Chaos), sehe ich keine Notwendigkeit für einen Kodierungsstandard.

Gibt es Argumente für die Entwicklung eines Codierungsstandards (wir haben keinen, aber ich habe versucht, einen zu erstellen)?

SomeKittens
quelle
Wenn Sie sich für die Implementierung eines Codierungsstandards entscheiden, sollten Sie ihn während der kontinuierlichen Integration durchsetzen.
Leif Carlsen
10
Sollte jeder im Team wird benötigt die gleichen IDE zu benutzen?
Keith Thompson
10
Keine Menge an Code-Neuformatierung ersetzt eine Richtlinie wie "Operatoren nicht überladen", außer unter seltenen, besonderen Umständen. . Wenn sich Ihre Codierungsstandards hauptsächlich auf die Art und Weise beziehen, wie Ihr Code formatiert ist, benötigen Sie bessere Standards.
Caleb
Nicht alle Leute benutzen eine IDE, ich benutze zum Beispiel Acme.
Dysoko

Antworten:

33

Es gibt jedoch viele verschiedene Tools und IDEs, die nach dem vom Programmierer bevorzugten Standard formatiert werden.

Viel Glück damit. Meiner Erfahrung nach gibt es eine kleine Anzahl von Tools (Null!), Die den Code von Format X in Format Y korrekt formatieren können. Es gibt einfach zu viele Dinge, die im Weg stehen. Tabulatoren gegen Leerzeichen, mehrzeilige Anweisungen usw. Schauen Sie sich nur die Implementierung der C ++ - Standardbibliotheksdateien durch GNU an. Was Sie tun können, ist, Ihre IDE dazu zu bringen, immer Leerzeichen anstelle von Tabulatoren zu verwenden und sich nur nicht darum zu kümmern, fremden Code neu zu formatieren. Jetzt sieht Ihr Code so aus, wie Sie ihn mögen, und der fremde Code sieht so aus, wie der ursprüngliche Autor ihn geschrieben hat.

Ein bestimmter Einrückungsstil ist das Letzte, was ein Codierungsstandard spezifizieren sollte. Das steht kurz davor, einen Religionskrieg zu programmieren. IMO, ein Codierungsstandard, sollte eine angemessene Reihe akzeptabler Einrückungsstile festlegen, die Einzelheiten jedoch den Autoren eines Pakets überlassen. Einrückungsstil ist oder sollte ein winziger Teil eines Codierungsstandards sein. Regel Nummer Null der Kodierungsstandards: Schwitzen Sie nicht an den kleinen Dingen. Einrückungsstil ist eine kleine Sache.

Größere Dinge:

  • Wie benenne ich Dinge?
  • Sind bestimmte Teile der Sprache gesperrt?
  • Muss der Code sauber kompiliert werden und mit welchen Compilereinstellungen?
  • Muss der Code bestimmte Metriken erfüllen?
  • Welche Art von Tests ist erforderlich?
  • Welche Art von Dokumentation wird benötigt, sowohl im Code (Kommentare) als auch anderswo?
  • Am wichtigsten ist, wie erhalte ich einen Verzicht auf den Standard?

Nachtrag
Vielleicht noch wichtiger ist, was man nicht in einen Kodierungsstandard einfügt. Themen wie das Schreiben von Anforderungen gehören nicht zu den Kodierungsstandards. Details zum Testen gehören auch nicht dazu. Ein Projekt sollte die Codierungsstandards nicht als Ersatz für den Projektmanagementplan, den Testmanagementplan, den Überprüfungs- und Validierungsplan usw. verwenden. Das Ziel der Codierungsstandards besteht darin, die Codesicherheit, Qualität, Verständlichkeit, Wartbarkeit, und andere "Fähigkeiten". Es gibt viele Möglichkeiten, um sicherzustellen, dass dies nicht geschieht. Nur ein paar: Die Standards zu einem Buch zu machen, das so komplex ist wie die Steuergesetze eines Landes, Religionskriege zu programmieren und schlechte Namenskonventionen zu haben.

Codierungsstandards können unbeabsichtigte Folgen haben. Beispiel: Einige Narren Projektingenieur wird die „keine magischen Zahlen regieren“ bedeuten , dass zu interpretieren if (index == 0) {...}und for (ii = 0; ii < 3; ++ii) {...}geändert werden muss if (ZERO == index) {}und for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}nicht lachen. Ich habe es gesehen. Wenn ich heutzutage einen Kodierungsstandard schreibe, ist dies eher eine "Richtlinie ohne magische Zahlen" als eine Regel, um dieser Art von Dummheit entgegenzuwirken.

Der Kodierungsstandard ist nicht die Verteidigung Nummer eins gegen schlechten Programmierstil / gefährliche Kodierungspraktiken. Die Codeüberprüfung ist. Trotz jahrelanger Automatisierung gibt es nichts Schöneres, als einen Teil des Codes mit einem etwas subjektiven menschlichen Blick zu betrachten und zu beurteilen.

David Hammen
quelle
+1 für eine großartige Liste - das ist meine Lieblingsantwort. Insbesondere Off-Limits-Code, Compiler-Warnungen, Tests und Dokumentation. Aber ich denke immer noch, Tabulatoren gegen Leerzeichen und Einrückungen sind wichtig. Jemand anderes erwähnte den Albtraum, den dies verursacht, wenn Änderungen in der Quellcodeverwaltung vorgenommen werden.
GlenPeterson
Eine einfache Möglichkeit, mit Tabulatoren und Leerzeichen umzugehen, besteht darin, Tabulatoren im Codierungsstandard nicht zuzulassen. Eine einfache Möglichkeit, dies zu erzwingen, besteht darin, einen Check-in-Haken zu haben, der entweder das Einchecken ablehnt oder Tabulatoren, die als Leerzeichen verwendet werden, in Leerzeichen konvertiert. Das automatische Überprüfen einiger Codierungsstandards, z. B. während eines nächtlichen Builds oder beim Einchecken (vorzuziehen aufgrund des nahezu sofortigen Feedbacks), ist eine sehr nützliche Funktion. Was passiert, wenn das Einchecken erlaubt (oder erzwungen) ist und die Konvertierung ein Chaos verursacht? Auch darauf gibt es eine einfache Antwort: Code-Überprüfung. Ein hässlicher POS sollte nicht durchgehen. es sollte nicht einmal überprüft werden.
David Hammen
Beachten Sie, dass die Regel "keine Tabulatoren" (etwas, das ich in meiner Liste vermieden habe, weil die Meinungen variieren) nicht bedeutet, dass Sie keine Tabulatoren verwenden können, wenn Sie Ihren Code eingeben. Ein anständiger Editor kann die Tabs, die der Programmierer eingibt, in Leerzeichen konvertieren. Wenn Ihr Editor das nicht kann, sollten Sie vielleicht zu einem besseren Editor wechseln.
David Hammen
Keine Argumente da. Nur sagen, dass Einrückung / Formatierung in die Liste gehört. Tabulatoren eignen sich möglicherweise für HTML oder Dateien, die zur Laufzeit heruntergeladen oder analysiert werden.
GlenPeterson
@GlenPeterson - Einrückung / Formatierung befindet sich in meiner Liste oder direkt vor meiner Liste: "IMO, ein Codierungsstandard sollte eine angemessene Reihe akzeptabler Einrückungsstile angeben, die Einzelheiten jedoch den Autoren eines Pakets überlassen." Und ja, es gibt Ausnahmen von der Regel "Nein". Makefiles zum Beispiel.
David Hammen
60

Bei Codierungsstandards geht es nicht nur um die bevorzugten Parameter, indentsondern auch um Namenskonventionen, Kommentarkonventionen und eine Vielzahl möglicher Empfehlungen für Redewendungen, die Verwendung von Sprachfunktionen usw.

Um es auf den Punkt zu bringen, müssen Sie das alles noch irgendwo dokumentieren. Und schließlich möchte nicht jeder eine IDE verwenden, die Code auf diese Weise neu formatiert ...

kommendes Gewitter
quelle
1
Gute Antwort, es erweiterte mein Wissen mit einer guten Erklärung für die Dinge, an die ich nicht gedacht hatte. +1
SomeKittens
Sie können auch Themen wie den Umgang mit der plattformübergreifenden Kompatibilität behandeln, was äußerst wichtig ist, wenn ein neuer Entwickler keine Erfahrung im Schreiben von plattformübergreifendem Code hat.
Velociraptors
3
Wenn Sie der Meinung sind, dass diese Antwort gut ist und Ihre Frage beantwortet, markieren Sie sie einfach als solche.
Marktani
3
Ganz zu schweigen davon, dass eine Massen-Neuformatierung zu Kopfschmerzen führen kann, wenn Sie einen anderen guten Standard verwenden: die Quellcodeverwaltung.
Matthew Scharley
1
@MatthewScharley im Allgemeinen drücken Sie den geänderten Code durch den Formatierer und dann begehen (nach vielleicht einen letzten Testlauf den Formatierer , um sicherzustellen , hat nichts kaputt machen) , so dass nur formatiert Code get auf dem Repo
Ratsche Freak
13

Wenn Sie innerhalb eines Teams einen einheitlichen Stil verwenden, ist Ihr Code leichter zu lesen. Wenn Ihr Code leichter zu lesen ist, ist Ihr Team produktiver. Sie sind produktiver, weil sie den Code nicht mental analysieren müssen und sich bei der Überprüfung und Pflege des Codes eher auf die Logik als auf die Syntax konzentrieren können.

Wenn die IDE den Code von jeder Person neu formatieren lässt, haben Sie eines von zwei Problemen: Entweder müssen Sie sicherstellen, dass Sie ihn beim Speichern immer wieder in das ursprüngliche Format konvertieren, oder Sie leiden unter der Tatsache, dass Ihre Diffs viel Rauschen zeigen. Dadurch wird es schwieriger zu erkennen, was sich in der Logik des Codes geändert hat.

Bryan Oakley
quelle
4
Diffs! Daran hatte ich nicht gedacht.
SomeKittens
1
Ja, auf jeden Fall lassen Sie sich nicht jeder umformatieren den Code so , wie sie , wie es jedes Mal , wenn sie daran arbeiten. Das ist nur Pandemonium. Sogar ein schlechter Standard ist besser. Wenn ich die Wahl habe, würde ich versuchen, das zu tun, was in der Sprache am beliebtesten ist, damit neue Entwickler schnell auf den neuesten Stand kommen können. Verwenden Sie das Internet, um den Standardstandard für Ihre Sprache zu ermitteln.
GlenPeterson
5

Kurze Antwort: Ja, es spiegelt die Qualität wider .

Was ist es und warum brauchen wir es?

Codierungsstandards sind ein sehr wichtiges Stück hochwertiger Software. Sie steigern die Produktivität im Entwicklungsprozess, vereinfachen die Pflege des Codes und verhindern, dass der Code an eine Person oder ein Team gebunden ist. Konsistenz im Codierungsstandard unterscheidet auch vorzeitig erstellten Code von gut gemachter Kunst.

Bildbeschreibung hier eingeben

OK, jeder Entwickler weiß, dass Codierungskonventionen gut sind. Aber woher sollen Standards kommen?

Es wird hauptsächlich vom Verkäufer bestimmt, dem das Produkt gehört. Jeder Entwickler kann aus vielen branchenüblichen Codierungsstandards auswählen. Einige Unternehmen, Microsoft, Oracle und Sun Microsystems, bieten Richtlinien an.

Gibt es Argumente für die Entwicklung eines Codierungsstandards (wir haben keinen, aber ich habe versucht, einen zu erstellen)?

Ja, es gibt Industriestandards, deren Verwendung empfohlen wird. Jeder Codierungsstandard ist jedoch spezifisch für die Entwicklungsplattform. Daher sind Codierungsstandards meist sprachspezifisch. Beispielsweise hat Java einen anderen Standard als .NET. Zum Beispiel verwendet C # .NET diese Standards in dieser Referenz .

Gemeinsame Standards

Die gängigen Standards sind von keiner Programmiersprache abhängig. Zusätzlich zu den vom Hersteller angebotenen Standards, auch bekannt als Industry Coding Standards, gibt es verschiedene Programmiernotationen wie Ungarische Notation oder CamelCase . Ich denke, Microsoft .NET-Codierungsstandards basierten ursprünglich auf CamelCase-Notationen.

Team Kodierungsstandards und Richtlinien

In think sollte sich jedes Entwicklungsteam bei Projektstart auf Kodierungsstandards einigen. Die Kodierungsrichtlinien werden normalerweise vom Teamleiter oder Chefarchitekten des Unternehmens erstellt. Es ist normalerweise ein offenes Dokument, das befolgt und bei Bedarf verbessert werden muss. In unserem Unternehmen gibt es beispielsweise Wiki-Seiten, auf denen dieses Dokument hochgeladen und für die Entwickler des Unternehmens verfügbar ist.

Yusubov
quelle
Ich denke, die Frage ist, warum diese Dinge wichtig sind. Sie beschreiben, was ein Codierungsstandard abdeckt, aber die Frage ist, warum er benötigt wird.
Bryan Oakley
Ich habe meine Antwort noch nicht beendet
Yusubov
Das While Notsollte total a sein Do Until.
Ry
2

Ich werde die kontroverse Meinung vertreten und nein sagen, Sie brauchen keinen Kodierungsstandard . Entweder sind die Regeln, wie Sie sagen, IDE-durchsetzbare Richtlinien, allgemeine Best Practices, die jeder in jedem Unternehmen befolgen sollte, oder es handelt sich um Fall-zu-Fall-Entscheidungen pro Team, die von mehr als einer Person in einem fähigen Team getroffen werden sollten über Paarprogrammierung oder Code-Reviews.

Dinge wie Wie sollen wir diese Variable benennen? Welche Sprachfunktionen sollten wir verwenden? Sollten wir vermeiden? Welches Testen ist am besten? Diese bleiben am besten unbeantwortet, bis wir auf das eng umrissene Problem stoßen, an dem wir gerade arbeiten .

Aus diesen winzigen Entscheidungen können sich informelle Standards / Muster innerhalb der Teams ergeben, die auf der Überschneidung mit dem aktuellen Problembereich und den verwendeten Technologien beruhen. Die Kodierung bedeutet, dass wir der Meinung sind, dass Dinge wie der Benennungsstandard, die geeignete Sprachuntermenge usw., die für diese Projekte verwendet werden und auf Hunderten von Mikroentscheidungen basieren und von diesen Teams informell übernommen werden, die Grundlage für jedes weitere Projekt bilden sollten.

Im Prinzip klingt es wie eine großartige Sache, aber in Wirklichkeit wird es nur ein Magnet für die Politik. Welche Tools können wir jeden zum Einsatz zwingen? Was möchte ich andere Menschen zwingen, zu vermeiden? Wenn sich alle auf diese Fragen einigen würden, bräuchten wir keinen Standard. Wir würden es einfach tun. Meiner Erfahrung nach entspringen Standards dem Wunsch, dass eine Teilmenge der Entwickler die Kontrolle über eine andere Teilmenge ausübt. Typischerweise erstickt diese Art von Politik und die darauf folgende technologische Polizeiarbeit Innovationen, anstatt sie anzuleiten.

Wenn Sie echte Anleitung benötigen , anstatt einen Standard mit einer Reihe von nicht hilfreichen Regeln zu lesen, suchen Sie nach fähigen Mitgliedern Ihres Teams und fragen Sie sie, was sie denken. Wovon wurden sie verbrannt? Wie schlagen sie vor, dass Sie Code schreiben? Sie erhalten eine Vielzahl nützlicher Antworten mit vielen wertvollen Erfahrungen, um diese zu sichern. Sie werden eine Menge Überschneidungen sehen, die auf gemeinsamen Erfahrungen basieren. Anstelle der durch den Standard erzwungenen Monokultur werden Sie auch eine große Vielfalt feststellen, die Ihnen nur helfen kann, viele gültige Wege zur Lösung von Problemen zu finden.

Und wenn jemand Ihnen sagt, dass Sie keine Regelgrundlage im "Standard" haben sollen, aber keine Erfahrung oder angemessene Unterstützung für ihre Behauptung haben, ignorieren Sie sie. Hier hat der Standard niemandem geholfen oder jemanden zu einem besseren Entwickler gemacht.

Doug T.
quelle
Fein von mir - eine Sache weniger, um Zeit zu verschwenden, besonders wenn alle Entwickler eine Resharper-Lizenz haben und fxcop / stylecop auf dem Build-Server ausgeführt wird.
StuartLC
1
Standards sollten und sind in der Regel der Höhepunkt und die Festigung der Erfahrungen der Menschen. Die sehr "fähigen Leute", auf die Sie sich beziehen. Wenn sie sich irren, entwickeln Sie sie weiter, aber unvorbereitet abzuweisen ist ein Rezept für Anarchie.
Andrew
@ Andrew Diese Erfahrungen treffen möglicherweise nicht zu und binden Sie möglicherweise nur an viele Ideen, die nichts mit dem aktuellen Problem zu tun haben, das Sie lösen
Doug T.
1
+1 für die Unterdrückung von Innovation, die Kontrolle von Teilmengen, allgemeinen Best Practices und Politik. Aufklären, nicht regulieren!
kirk.burleson
"Kein schriftlicher Kodierungsstandard, vertraue auf Konventionen und bitte um Anleitung" funktioniert ziemlich gut in kleinen Teams (weniger als, ich weiß nicht, 50? 100?). Wenn Sie Tausende von Menschen haben, die innerhalb einer Codebasis zwischen Projekten hin und her migrieren, ist es wirklich hilfreich, schriftliche Richtlinien für den Code zu haben.
Vatine
1

Jetzt, da kommerzielle Flugzeuge Fly-by-Wire sind, würden Sie hoffen, dass die Programme, die das Flugzeug fliegen, auf der Grundlage der Piloteneingabe funktionieren. Wenn die Programmierer solchen Code schreiben, hoffen Sie, dass sie sich an strenge Regeln halten, um häufig vermeidbare Programmierfehler zu vermeiden. Ein Weg, dies zu tun, ist mit einem Kodierungsstandard.

Siehe: Vorgeschlagene Codierungsstandards für C und C ++ der Federal Aviation Administration

Muss ich mehr sagen.

Hinweis: Ich konnte den aktuellen Standard von der FAA online nicht finden, habe ihn aber gesehen.

Guy Coder
quelle
Das ist ein prototypisch schlechter Kodierungsstandard. Es ist zu lang, wirft religiöse Fragen auf und läuft vor allem der modernen C ++ - Programmierung zuwider. Zum Beispiel schließt es POD (Plain Old Data) aus und seine Regeln für Ausnahmen reichen von schlecht bis archaisch. Schlecht: Der Versuch, std :: bad_alloc zu fangen, stellt sich als sehr schlechte Idee heraus. Archaisch: Die Java-Idee, alle möglicherweise ausgelösten Ausnahmen anzugeben und alle von aufgerufenen Funktionen ausgelösten Ausnahmen abzufangen, funktioniert in C ++ einfach nicht. Viel besser ist es, ausnahmesicheren Code zu schreiben, der auf den Konzepten der Ausnahmegarantien von David Abrahams basiert.
David Hammen
1

Für mich ist es eine Frage der Disziplin und es hilft immer, diszipliniert zu sein. Es spiegelt die Qualität Ihrer Arbeit wider.

Allerdings würde ich den Kodierungsstandard so gestalten, dass die verwendete IDE und / oder die verwendeten Tools im Blick bleiben. Darüber hinaus sollte die IDE für jeden Entwickler identisch konfiguriert sein (z. B. sollte die IDE jedes Entwicklers entweder alle Tabulatoren oder alle Leerzeichen zum Einrücken verwenden und die IDE jeder sollte dieselbe Tabulatorenlänge haben), damit jeder dem Standard problemlos folgen kann ...

Es könnten auch Check-In-Skripte entwickelt und verwendet werden, die in gewissem Umfang dazu beitragen können, die Kodierungsstandards einzuhalten, z.

Neugierig
quelle
1

Codierungsstandards könnten NICHT wichtiger sein! Ich bin ein begeisterter CakePHP-Benutzer und überprüfe gerne die Änderungssätze von Version zu Version, und die Entwickler befolgen dort keine Standards.

Tatsächlich war ich von den Stilunterschieden so verärgert, dass ich einen kurzen Rant über Kodierungskonventionen schreiben musste . Es kostet viel Zeit und Geld, neue Entwickler in ein bestehendes Team zu holen. Stellen Sie sich vor, Sie bringen einen neuen Entwickler ohne Standards auf den Markt. Das Erlernen des Codes wäre als nächstes zu unmöglich.

endyourif
quelle