Mussten Sie jemals an Codierungsstandards arbeiten, die:
- Ihre Produktivität stark verringert?
- Wurden sie ursprünglich aus guten Gründen aufgenommen, aber lange nachdem die ursprüngliche Besorgnis irrelevant wurde, beibehalten?
- Waren sie so lange in einer Liste, dass es unmöglich war, sich an alle zu erinnern?
- Haben Sie gedacht, der Autor wollte nur Spuren hinterlassen, anstatt eine gute Codierungspraxis zu fördern?
- Sie hatten keine Ahnung, warum sie aufgenommen wurden?
Wenn ja, welche Regel gefällt Ihnen am wenigsten und warum?
Einige Beispiele hier
Antworten:
Dies mag ein paar Federn zerzaust haben, aber Standards, die Blockkommentare am Anfang jeder Methode vorschreiben, nerven mich immer.
1) Sie sind immer veraltet, da sie zu weit von dem Code entfernt sind, der die eigentliche Arbeit erledigt, um zu bemerken, wenn Sie Dinge aktualisieren. Schlechte Kommentare sind schlimmer als keine Kommentare.
2) Oft wiederholen sie nur Informationen, die bereits im Versionsverwaltungs-Tool enthalten sind, nur ungenauer. Zum Beispiel: Zuletzt geändert von, Liste der Änderungsdaten / -gründe.
quelle
Hatte einmal einen Professor, der verlangte, wir hätten mindestens einen Kommentar für jede Codezeile.
Es war ziemlich lächerlich.
quelle
// comment
davor eine Verbindung herstellen?Unser C # -Codierungsstandard forderte die umfassende Verwendung von #REGIONs (für diejenigen, die es nicht wissen, markiert er Quellcodeblöcke, die in Visual Studio zu einer einzelnen Zeile zusammengefasst werden). Infolgedessen haben Sie immer eine Klasse geöffnet, die anscheinend gut strukturiert war, und nur Stapel von Müll gefunden, die unter tief verschachtelten Teppichen aus #REGION-Konstrukten gefegt wurden. Es gibt sogar Bereiche um einzelne Zeilen, z. B. muss ein LOG-Bereich ausgeklappt werden, um eine einzelne Deklaration des Loggers zu finden. Natürlich wurden viele Methoden, die hinzugefügt wurden, nachdem eine Region erstellt wurde, ebenfalls in den Bereich "falsche" Region gestellt. Der Horror. Der Horror.
Regionen sind eine der schlimmsten Funktionen, die Visual Studio jemals hinzugefügt wurde. Es fördert eher die Strukturierung der Oberfläche als die eigentliche OO-Struktur.
Heutzutage töte ich #REGIONs auf Anhieb.
quelle
In einem Job mussten wir eine seltsame Form der ungarischen Notation in der Datenbank verwenden.
Ich kann mich nicht an die Details erinnern, aber aus dem Gedächtnis musste jeder Feldname enthalten:
Beispielsweise könnte die Spalte mit dem Vornamen einer Person aufgerufen werden:
PRSNFRSTNMVC30X
(Personentabelle, Spalte Vorname, Varchar 30 Zeichen, Nicht Null)quelle
Bestehen Sie darauf, dass nach allen Klammern ein Kommentar für das Ende der Klammer folgt:
z.B:
quelle
'nuff sagte.
quelle
#define BEGIN {
und#DEFINE END }
?Reale Beispiele:
paymentmethodtotalshtml
,contracttypechangecontexts
,customsegmentspectexts
,potentialmsceventref
Die New York Times wiegt in :
quelle
Ich war von der Software Führer eines Unternehmens gefragt „zu tun , einfach, re n dundante Code “. Es war beispielsweise verboten, einer bestehenden Funktion einen neuen Parameter hinzuzufügen. Sie mussten stattdessen die Funktion duplizieren und das Original unberührt lassen, um Regressionen zu vermeiden. Natürlich keine formellen Tests (Zeitverschwendung).
Wir durften auch keine Merge-Software verwenden. Jede Datei kann jeweils nur von einem Programmierer geändert werden. Revisionskontrollsoftware war natürlich Science-Fiction.
Der glücklichste Tag meines Lebens war, als er gefeuert wurde (bedenken Sie, dass es sehr, sehr schwierig ist, jemanden in Italien zu feuern).
quelle
Alle Interaktionen mit der Datenbank müssen über gespeicherte Prozeduren erfolgen . Es könnte sinnvoll sein, wenn wir 1997 und nicht 2010 leben.
Ich habe gerade festgestellt, dass dies tatsächlich alle Kriterien der ursprünglichen Frage abdeckt:
quelle
Es ist uns nicht gestattet, die STL oder andere Standard-C ++ - Bibliotheken zu verwenden, da der CTO der Ansicht war, wir könnten das besser und schneller machen. Sogar grundlegende Konstrukte wie Listen und die String-Klasse.
quelle
Ungarische Notation
Beispiel aus " Charles Simonyis Erklärung der Namenskonvention für ungarische Notationskennungen " auf MSDN.
quelle
Ich habe einmal an einem Projekt gearbeitet, bei dem der Projektleiter vorschrieb, dass jeder Variablen - JEDER Variablen - das Präfix "v" vorangestellt wird. Also, vCount, vFirstName, vIsWarranty usw.
Warum? "Weil wir in VBScript arbeiten und sowieso alles eine Variante ist".
WTF.
quelle
f
Vor-Funktion setzen müssen, dann ist Ihr Code wirklichfUcked (vUp)
.Habe das fast vergessen:
Zitat eines Managers:
Dies war nicht für Consumer-Software gedacht, sondern für eine einzelne große Organisation. Selbstverständlich hat der Kunde danach jahrelang gezahlt. Mag trivial erscheinen, aber es ist schwieriger, Fehler zu ignorieren, als sie zu finden.
quelle
Erzwungene XML-Kommentare für alle nicht privaten Methoden, Konstanten, Enums und Eigenschaften.
Dies führte zu ziemlich unübersichtlichem Code, vor allem, da das Endergebnis war, dass die Leute entweder nur /// gedrückt haben, um einen leeren Kommentarstub für alles zu erstellen, oder GhostDoc installiert haben und automatisch generierte Kommentare hinzugefügt haben:
[Bearbeiten] Der Grund, warum ich dies als lächerlichen Standard erwähne, liegt nicht darin, dass ich Methodenkommentare für dumm halte, sondern dass die Qualität dieser Kommentare in keiner Weise erzwungen wurde und nur eine Menge Durcheinander in den Codedateien erzeugt hat . Es gibt bessere Möglichkeiten, aussagekräftige Codedokumente zu erstellen, als die Build-Anforderung blind "muss einen Kommentar haben".
quelle
Validations the handler
' - uh-ohNicht wirklich ein Codierungsstandard, aber wir hatten eine Datei in der Quellcodeverwaltung namens "changelog.txt"
Jedes Mal, wenn Sie einchecken, müssen Sie dieser Datei manuell einen Eintrag hinzufügen. Dieser Eintrag war die Subversion-Revisionsnummer und Ihr Check-in-Kommentar.
Als der neue CTO anfing und jemand ihm dies mitteilte, traf er umgehend eine Entscheidung der Geschäftsleitung und sagte: "Wir werden das nicht mehr tun" und löschte die Datei. Das war schon seit Jahren so.
quelle
svn log
?Einige der Orte, mit denen ich zusammengearbeitet habe, bestanden darauf, nicht verwendeten oder veralteten Code zu kommentieren, anstatt ihn zu löschen. Anstatt dem VCS für den Verlauf usw. zu vertrauen, wurde es durch auskommentierten Code schmerzhaft in den Dateien festgehalten.
Das große Problem dabei ist, dass Sie oft keine Ahnung hatten, warum der Code auskommentiert wurde. War es, weil ein Entwickler aktiv Änderungen vornahm und diese als Referenz behalten wollte, oder wurde sie nicht mehr benötigt?
quelle
Der schlechteste Codierungsstandard, an dem ich jemals teilgenommen habe, sind Codebasen, die überhaupt keine hatten. Ich würde lieber einem Codierungsstandard folgen, mit dem ich überhaupt nicht einverstanden bin, als in Codebasen zu arbeiten, in denen es überhaupt keinen gibt. Es macht es sehr viel schwieriger, neue Teile der Codebasis zu lernen.
quelle
Das Erzwingen von Inline-Kommentaren für die Versionskontrolle war der sinnloseste Codierungsstandard, den ich ignoriert habe.
Der Oracle-Datenbankadministrator, der auf der korrekten Verwendung von Leerzeichen bestand, während eine Datenbank mit einer stark umkämpften Tabelle mit über 200 Feldern und 40 Triggern "gepflegt" wurde, kommt dem nahe.
quelle
Ich habe Codeüberprüfungen für ein Projekt durchgeführt, das von einem C ++ - Erstauslöser geleitet wurde. Dieser entschied, dass allen Klassenmitgliedsfunktionen der Klassenname und die Sichtbarkeit vorangestellt werden sollten:
quelle
Muss den gesamten Code um vier Leerzeichen einrücken;)
quelle
Ich hatte vor Jahren einen Job, bei dem unser gesamter Code linksbündig sein musste - ohne Einrückungen. Der Typ, der diese Richtlinie entwickelte, mochte es nicht, horizontal hin und her zu scrollen, wenn er lange Codezeilen betrachtete, und das Ping-Pong-Spielen mit seinen Augen gleichzusetzen.
quelle
Dies ist eher ein Beispiel dafür, wie das Fehlen von Codierungsstandards schaden kann.
Ein Auftragnehmer, der bei einer großen Bank arbeitete, bestand darauf, dass die Einhaltung der Standards die besten sei, die es je gab. Die Anwendung wurde in dBase / Clipper geschrieben, für die er der einzige Entwickler war, und natürlich hat er den Standard entwickelt.
Zu diesem Zeitpunkt war ich ein sehr neuer Autodidakt, wusste aber genug, um nicht auf den verrückten Wissenschaftler zu hören und die Hölle loszuwerden, bevor ich darum bat, das Projekt zu übernehmen.
Und ja, wir sagten dem Management, wie schlecht diese Praktiken waren, bekamen aber immer das Übliche: "Bezahle diesem Bauunternehmer den höchsten Dollar, von dem er wissen muss, wovon er spricht."
quelle
\07
jetzt am Anfang jeder Datei hinzufügen .i
Array, mit dem ein Array in einer Prozedur indiziert wird, kanni
eine aufrufende Prozedur stören . Sie müssen verwendenPRIVATE ALL LIKE m*
undPRIVATE i
um dieses "Abschatten" zu verhindernNoch eine Explosion von meiner Vergangenheit.
Zitat des Firmeninhabers:
Das Java-Projekt war ein Aktienhandelssystem, das für einige Dutzend Aktien entwickelt wurde und nun zur Verarbeitung von Tausenden verwendet wurde. Anstatt die Designmängel oder die schlechte Hardware zu beheben, musste das gesamte Unternehmen alle Nicht-C / C ++ - Anwendungen auf C / C ++ umstellen, und alle Neuentwicklungen mussten in C / C ++ erfolgen. Interpretierende Sprachen bedeuteten alles, was nicht kompiliert war, und der Eigentümer betrachtete Assembler, C und C ++ nur als kompiliert.
Für ein Unternehmen mit 800 Mitarbeitern, in dem der größte Teil des Codes in Java und Perl war, bedeutete dies, dass das gesamte Unternehmen in den nächsten Jahren den größten Teil seiner Zeit damit verbrachte, perfekten Code in C / C ++ umzuschreiben.
Lustigerweise war ich ungefähr zwanzig Jahre vor diesem Fiasko in einer anderen Firma, in der der technische Leiter entschied, dass unsere Sortierlogik (es war eine Blasensortierung) in Assembler neu codiert werden musste, anstatt durch Quick Sort ersetzt zu werden, weil - Algorithmen dies tun Leistung nicht verbessern. Die einzige Möglichkeit, die Leistung zu verbessern, bestand darin, dieselbe Logik in Assembler neu zu schreiben.
In beiden Fällen bin ich kurz nach dem Diktat gegangen.
quelle
Wie viele Programmierer (aber nicht genug) hasse ich Code-Dekoration. Es macht mich wütend, wenn ich ein Dollarzeichen ($) als Präfix für Variablennamen oder Unterstriche für private Variablen verwenden muss, auch ohne Getter / Setter. Wenn Sie Ihren Code dekorieren müssen, um ihn zu verstehen, müssen Sie die Hölle loswerden!
quelle
Ich arbeite seit einiger Zeit mit einem Web-System, bei dem alle übergebenen Parameter P1, P2, P3 usw. heißen mussten. Keine Chance in der Hölle zu wissen, wozu sie dienen, ohne umfangreiche Dokumentation.
Außerdem sollte - obwohl dies kein strikter Kodierungsstandard ist - im selben System jede einzelne Datei den Namen xyz0001.ext, xyz0002.ext, xyz0003.ext usw. tragen, wobei xyz der Code für die Anwendung an sich war.
quelle
Dies war vor langer Zeit - 1976 um genau zu sein. Mein Chef hatte noch nie von Edsger Dijkstra gehört oder eine Ausgabe von CACM gelesen, aber er hatte irgendwo das Gerücht gehört, dass "GOTO ist schlecht", so dass wir GOTO nicht in unseren COBOL-Programmen verwenden durften. Dies geschah, bevor COBOL das "end if" hinzufügte, also zu der Zeit nur zweieinhalb der drei klassischen Kontrollstrukturen (Sequenz, if / then / else, perform (dh do while)). Er erlaubte widerwillig GOTO in unseren Basisprogrammen und Verzweigungsanweisungen in unseren Assembler-Sprachprogrammen.
Tut mir leid, dass dies eine Art "Du musstest da sein" -Geschichte ist. Soweit ich weiß, verfügt jede seit 1976 erfundene Sprache über angemessene Kontrollstrukturen, sodass Sie GOTO niemals verwenden müssen. Der Chef wusste jedoch nie, WARUM GOTO als schädlich eingestuft wurde oder welche Sprache die kindliche Störung und welche die tödliche Krankheit war.
quelle
Ich arbeitete in einem Projekt, in dem der Chefarchitekt (auch) expliziten Code schreiben wollte. Eines der schlimmsten Beispiele, die ich im Code gefunden habe (und er stimmte dem erfreut zu), war das Folgende.
Sogar ReSharper hat dir gesagt, dass das falsch ist!
quelle
else
) - Zweig ausgeführt werden soll.return verbose ? someString : someOtherString;
?Bei meinem letzten Job wäre "Standards" ein sehr starker Ausdruck für das, was mir der Typ gegeben hat, der mich eingestellt hat. Beim Programmieren von Websites in ColdFusion und SQL wurden mir folgende Codierungsanforderungen gestellt:
Ich fing an, diese zu ändern, sobald er aufhörte.
quelle
In meinem Leben als C ++ - Programmierer wurden zwei wirklich üble "Regeln" durchgesetzt:
quelle
O(n^2)
DOS-Angriffe geöffnet wird (Zuführung von Worst-Case-Eingaben). Auch, warum es nicht möglich war, zu wechseln - es war selbst eine gültige Entschuldigung, STL nicht zu verwenden.Ich bin gezwungen, XML-Dokumentation für alle Klassen und Klassenmitglieder zu haben. Einschließlich privat. Es wird empfohlen, standardmäßige Ghostdoc-Kommentare zu verwenden.
quelle