it-swarm-eu.dev

Der schlechteste Codierungsstandard, dem Sie jemals folgen mussten?

Mussten Sie jemals an Codierungsstandards arbeiten, die:

  • Ihre Produktivität stark reduziert?
  • Wurden ursprünglich aus guten Gründen aufgenommen, aber lange nachdem das ursprüngliche Anliegen irrelevant wurde, aufbewahrt?
  • Waren in einer Liste so lang, dass es unmöglich war, sich an alle zu erinnern?
  • Haben Sie gedacht, der Autor wollte nur seine Spuren hinterlassen, anstatt eine gute Codierungspraxis zu fördern?
  • Sie hatten keine Ahnung, warum sie enthalten waren?

Wenn ja, was ist Ihre am wenigsten bevorzugte Regel und warum?


Einige Beispiele hier

76
finnw

Dies mag ein paar Federn zerzaust haben, aber Standards, die Blockkommentare mit Vorlagen 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) Sie wiederholen häufig nur Informationen, die bereits im Versionsverwaltungswerkzeug enthalten sind, nur weniger genau. Beispiel: Zuletzt geändert von, Liste der Änderungsdaten/-gründe.

97
JohnFx

Hatte einmal einen Professor, der verlangte, dass wir mindestens einen Kommentar für jede Codezeile haben.

//Set x to 3
var x = 3;

//if x is greater than 2
if(x>2){

    //Print x
    Print(x);
}

Es war ziemlich lächerlich.

129
Fishtoaster

Unser Firmencodierungsstandard (C #) forderte die umfassende Verwendung von #REGIONs (für diejenigen, die es nicht wissen, markiert es Quellcodeblöcke, die in Visual Studio zu einer einzelnen Zeile zusammengefasst werden). Infolgedessen haben Sie immer eine scheinbar gut strukturierte Klasse geöffnet, nur um Haufen und Müllhaufen zu finden, die unter tief verschachtelten Teppichen von # REGION-Konstrukten gefegt wurden. Sie hätten sogar Regionen um einzelne Linien, z. Sie müssen eine LOG-Region ausklappen, um eine einzelne Deklaration des Loggers zu finden. Natürlich wurden viele Methoden, die nach der Erstellung einer Region hinzugefügt wurden, auch in den "falschen" Bereich der Region eingeordnet. Der Horror. Der Horror.

Regionen sind eine der schlechtesten Funktionen, die Visual Studio jemals hinzugefügt wurden. es fördert eher die Strukturierung der Oberfläche als die tatsächliche OO Struktur).

Heutzutage töte ich #REGIONs auf Anhieb.

103
Cumbayah

In einem Job mussten wir eine seltsame Form von ngarische Notation in der Datenbank verwenden.

Ich kann mich nicht an die Details erinnern, aber aus dem Speicher musste jeder Feldname enthalten:

  • Keine Vokale
  • Alle Großbuchstaben
  • Ein Verweis auf die Tabelle
  • Ein Datentypindikator
  • Eine Datenlänge
  • Ein nullbarer Indikator

Beispielsweise könnte die Spalte mit dem Vornamen einer Person wie folgt heißen: PRSNFRSTNMVC30X (Personentabelle, Spalte Vorname, Varchar 30 Zeichen, nicht Null)

80
Damovisa

Bestehen darauf, dass auf alle Klammern ein Kommentar folgt, was die Klammer endet:

z.B:

for (int i = 0; i < 10; i++)
{
    if (foo > bar)
    {
        printf("Foo greater than bar");
    } // End If (foo > bar)

    while (baz)
    {
       farb();
    } // End while (baz)
} // End For
48
Kris Erickson
#define AND  &&
#define OR   ||
#define EQ   ==

'nuff sagte.

37
Niall C.
  • Lokale Variablennamen sind alle in Kleinbuchstaben ohne Unterstriche

Echte Beispiele: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts, potentialmsceventref

Die New York Times wiegt :

„Worträume sollten nicht als selbstverständlich angesehen werden. Altgriechisch, das erste Alphabet mit Vokalen, könnte ohne Word-Leerzeichen entschlüsselt werden, wenn Sie es ausloten und ohne sie auskommen. […] Auch das Latein hörte im zweiten Jahrhundert auf, Wörter zu trennen. Der Verlust ist rätselhaft, weil das Auge viel härter arbeiten muss, um nicht getrennten Text zu lesen. Aber wie der Paläograph Paul Saenger erklärt hat, wollte die Antike nicht "das Lesen einfacher und schneller machen".
37
John Siracusa

Ich wurde vom Software-Leiter eines Unternehmens gebeten, "einfach, rendundanter Code ". Es war beispielsweise verboten, einer vorhandenen Funktion einen neuen Parameter hinzuzufügen. Stattdessen mussten Sie die Funktion duplizieren und das Original unberührt lassen, um Regressionen zu vermeiden. Natürlich keine formalen Tests (Verschwendung von Zeit).

Es war uns auch verboten, Merge-Software zu verwenden. Jede Datei konnte jeweils nur von einem Programmierer geändert werden. Revisionskontrollsoftware war natürlich Science-Fiction.

Der glücklichste Tag meines Lebens war, als er entlassen wurde (bedenken Sie, dass es sehr, sehr schwierig ist, jemanden in Italien zu entlassen).

36
Wizard79

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:

  • Ihre Produktivität stark reduziert? PRÜFEN. Bitte - benutze einfach ein ORM .
  • Wurden ursprünglich aus guten Gründen aufgenommen, aber lange nachdem das ursprüngliche Anliegen irrelevant wurde, aufbewahrt? PRÜFEN. Der Manager war vor 1000 Jahren Entwickler für einen Datenbankserver und hat diesen Codierungsstandard eingeführt.
  • Waren in einer Liste so lang, dass es unmöglich war, sich an alle zu erinnern? PRÜFEN. Dies beinhaltete "so viel Logik wie möglich in der Datenbank gespeichert werden".
  • Haben Sie gedacht, der Autor wollte nur seine Spuren hinterlassen, anstatt eine gute Codierungspraxis zu fördern? PRÜFEN. Kommt immer wieder auf den Manager zurück, der ein ehemaliger Entwickler von Datenbankservern ist.
  • Sie hatten keine Ahnung, warum sie enthalten waren? PRÜFEN.
36
Jaco Pretorius

Die STL oder andere Standard-C++ - Bibliotheken dürfen nicht verwendet werden, da der CTO der Ansicht war, dass 'wir' es besser und schneller machen könnten. Auch grundlegende Konstrukte wie Listen und die String-Klasse.

33
David B

Ungarische Notation

Beispiel aus " Charles Simonyis Erklärung der Namenskonvention für ungarische Notationskennungen " auf MSDN.

1 #include “sy.h” 
 2 extern int * rgwDic; 
 3 extern int bsyMac; 
 4 struct SY * PsySz (char sz []) 
 6 {
 7 char * pch; 
 8 int cch; 
 9 struct SY * psy, * PsyCreate (); 
 10 int * pbsy; 
 11 int cwSz; 
 12 ohne Vorzeichen wHash = 0; 
 13 pch = sz; 
 14 während (* pch! = 0 
 15 wHash = (wHash11 +) * pch ++; 
 16 cch = pch-sz; 
 17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash]; 
 18 für (; * pbsy! = 0; pbsy = & psy -> bsyNext) 
 19 {
 20 char * szSy; 
 21 szSy = (psy = (struct SY *) & rgwDic [* pbsy]) -> sz; 
 22 pch = sz; 
 23 while (* pch == * szSy ++) 
 24 {
 25 if (* pch ++ == 0) 
 26 return (psy); 
 27} 
 28} 
 29 cwSz = 0; 
 30 wenn (cch> = 2) 
 31 cwSz = ( cch-2/sizeof (int) +1; 
 32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) -rgwDic; 
 33 Null ((int *) psy, cwSY); 
 34 bltbyte (sz, psy-> sz, cch + 1); 
 35 return (psy) ; 
 36}
31
JD Frias

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.

28

Fast vergessen dieses:

Zitat eines Managers:

Beheben oder dokumentieren Sie keine Fehler, die Sie in Ihrem eigenen Code finden. Der Kunde wird uns bezahlen, um sie in den nächsten Jahren zu identifizieren und zu reparieren.

Dies war nicht für Consumer-Software gedacht, sondern für eine einzelne große Organisation. Unnötig zu erwähnen, dass der Kunde jahrelang danach bezahlt hat. Mag trivial erscheinen, aber es ist schwieriger, Fehler zu ignorieren, als sie zu finden.

26
David B

Erzwungene XML-Kommentare zu allen nicht privaten Methoden, Konstanten, Aufzählungen und Eigenschaften.

Es führte zu ziemlich überladenem Code, zumal das Endergebnis darin bestand, dass die Leute entweder nur /// drückten, um einen leeren Kommentar-Stub für alles zu erstellen, oder GhostDoc installierten und automatisch generierte Kommentare hinzufügten:

/// <summary>
/// Validations the handler.
/// </summary>
/// <param name="propertyName">The property name.</param>
public void ValidationHandler(string propertyName) 
{
   // whatever
}

[Bearbeiten] Der Grund, warum ich dies als lächerlichen Standard erwähne, ist nicht, dass ich Methodenkommentare für dumm halte, sondern dass die Qualität dieser Kommentare in keiner Weise erzwungen wurde und nur dazu führte, dass in den Codedateien nur sehr viel Unordnung entstand . Es gibt bessere Möglichkeiten zum Erstellen aussagekräftiger Codedokumente als die blinde Erstellungsanforderung "muss einen Kommentar haben".

24
Adam Lear

Nicht 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 ihm jemand dies sagte, 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.

23
Jim A

Einige der Orte, mit denen ich gearbeitet 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 in den Dateien durch auskommentierten Code schmerzhaft gepflegt.

Das große Problem, das ich dabei festgestellt habe, ist, dass Sie oft keine Ahnung hatten, warum der Code auskommentiert wurde. War es, weil ein Entwickler aktiv Änderungen vornahm und es als Referenz behalten wollte, oder wurde es nicht mehr benötigt?

20
Jeremy Wiebe

Der schlechteste Codierungsstandard, an dem ich je 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 keine gibt. Es macht es viel schwieriger, neue Teile der Codebasis zu lernen.

17
JaredPar

Das Erzwingen von Inline-Kommentaren zur Versionskontrolle war ungefähr der sinnloseste Codierungsstandard, den ich ignorierte.

//Changed on 2/2/2004 By Ryan Roberts for work item #2323332
Dim Some Horrendous VB
//End Changed

Der Oracle-DBA, der auf der korrekten Verwendung von Leerzeichen bestand und gleichzeitig eine Datenbank mit einer stark umkämpften Tabelle mit über 200 Feldern und 40 Triggern "pflegte", kommt dem nahe.

16
Ryan Roberts

Ich habe Codeüberprüfungen für ein Projekt durchgeführt, das von einem C++ - Erstauslöser geleitet wurde, der entschied, dass allen Klassenmitgliedsfunktionen der Klassenname und die Sichtbarkeit vorangestellt werden sollten:

class MyClass
{
   public:
      void MyClass_Public_setValue(int value);
}
14
user1006

Ich hatte vor Jahren einen Job, bei dem unser gesamter Code linksbündig ausgerichtet werden musste - kein Einrücken. Der Typ, der sich diese Richtlinie ausgedacht hatte, mochte es nicht, horizontal hin und her scrollen zu müssen, wenn er lange Codezeilen betrachtete, was es gleichsetzte, Ping-Pong mit seinen Augen zu spielen.

9
Jeremy

Der gesamte Code muss um vier Leerzeichen eingerückt werden;)

9
RedFilter

Noch eine Explosion aus meiner Vergangenheit.

Zitat des Firmeninhabers:

Es wird keinen Code geben, der mit interpretierenden Sprachen geschrieben wurde, da ich bei diesem in Java geschriebenen {expletiven} Projekt 25 Millionen verloren habe.

Das Projekt Java] war ein Aktienhandelssystem, das für die Verarbeitung einiger Dutzend Aktien ausgelegt war und nun zur Verarbeitung von Tausenden verwendet wurde. Anstatt die Konstruktionsfehler oder die schlechte Hardware zu beheben, musste das gesamte Unternehmen Konvertieren Sie alle Nicht-C/C++ - Anwendungen in C/C++, und alle Neuentwicklungen mussten in C/C++ erfolgen. Interpretierende Sprachen bedeuteten alles, was nicht kompiliert wurde, und der Eigentümer betrachtete nur Assembler, C und C++ als kompiliert.

Für ein Unternehmen mit 800 Mitarbeitern, in dem sich der größte Teil des Codes in Java und Perl) befand, bedeutete dies, dass das gesamte Unternehmen in den nächsten Jahren die meiste Zeit damit verbrachte, perfekt funktionierenden Code in C/neu zu schreiben. C++.

Komischerweise war ich ungefähr zwanzig Jahre vor diesem Fiasko bei einer anderen Firma, in der der technische Leiter entschied, dass unsere Sortierlogik (es war eine Blasensortierung) im Assembler neu codiert werden musste, anstatt durch Quick Sort ersetzt zu werden, weil - - Algorithmen verbessern die Leistung nicht. Die einzige Möglichkeit, die Leistung zu verbessern, bestand darin, dieselbe Logik in Assembler neu zu schreiben.

In beiden Fällen ging ich kurz nach dem Ende des Diktats.

8
David B

Dies ist eher ein Beispiel dafür, wie es schaden kann, keine Codierungsstandards zu haben.

Ein Auftragnehmer einer großen Bank bestand darauf, dass die Einhaltung der Standards die beste war, 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.

  • Alles ist in Großbuchstaben. Ich meine alles, einschließlich der seltenen Kommentare, die er gemacht hat.
  • Keine Einrückung.
  • Die Benennung von Variablen entsprach in etwa APRGNAME. A = Gültigkeitsbereich der Variablen, z. B. P für public, PRG = die ersten drei Zeichen der Quelldatei, die die Variable erstellt hat, NAME = Variablenname in den verbleibenden 6 Zeichen, die dBase/Clipper zulässt.
  • Die ersten 4 und letzten 4 Zeilen des Quellcodes waren 80 * lang. Warum? So konnte er hören, wie der Nadeldrucker den Druck einer Datei startete und beendete. Speicher ist das gesamte Programm wurde wöchentlich über den Mainframe gedruckt, 20.000 Seiten.
  • Ich bin sicher, es gab noch viel mehr, die ich aus meinem Gehirn entfernen konnte.

Ich war zu diesem Zeitpunkt 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 "zahlten diesem Auftragnehmer den höchsten Dollar, von dem er wissen muss, wovon er spricht".

8
Tim Murphy

Wie viele Programmierer (aber nicht genug) hasse ich Code-Dekoration. Es macht mich wütend, wenn ich ein Dollarzeichen ($) 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!

6
Adam Harte

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 ein Gerücht gehört, dass "GOTO ist schlecht", so dass wir GOTO nicht in unseren COBOL-Programmen verwenden durften. Dies war, bevor COBOL das "end if" hinzufügte, so dass es zu der Zeit nur zweieinhalb der drei klassischen Kontrollstrukturen hatte (Sequenz, wenn/dann/sonst, ausführen (d. H. 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 nie verwenden müssen. Aber der Punkt ist, der Chef wusste nie, WARUM GOTO als schädlich angesehen wurde oder welche Sprache die kindliche Störung und welche die tödliche Krankheit war.

6
Mark Lutton

Ich habe in einem Projekt gearbeitet, in dem der Chefarchitekt (viel zu) expliziten Code schreiben wollte. Eines der schlimmsten Beispiele, die ich im Code gefunden habe (und die er gerne angenommen hat), war das folgende.

private string DoSomething( bool verbose )
{
    if ( verbose ) { return someString; }
    else if ( !verbose ) { return otherString; }
    else { return string.Empty; }
}

Sogar ReSharper hat dir gesagt, dass das falsch ist!

6
Jax

Ich habe eine Weile mit einem Web-System gearbeitet, bei dem alle übergebenen Parameter P1, P2, P3 usw. heißen mussten. Keine Chance in der Hölle zu wissen, wozu sie da sind, ohne umfangreiche Dokumentation.

Auch - obwohl dies kein strikter Codierungsstandard ist - sollte im selben System jede einzelne Datei den Namen xyz0001.ext, xyz0002.ext, xyz0003.ext usw. haben - wobei xyz der Code für die Anwendung an sich war.

6
CB Du Rietz

Bei meinem letzten Job wäre "Standards" ein sehr starker Begriff für das, was mir von dem Mann gegeben wurde, der mich eingestellt hat. Beim Programmieren von Websites in ColdFusion und SQL wurden mir Codierungsanforderungen wie:

  • Verwenden Sie keine Includes. Ich mag eine große Seite
  • Trennen Sie Wörter in Variablen- und Spaltennamen immer durch Unterstriche (außer isaktiv, Vorname usw.).
  • Verwenden Sie niemals Abkürzungen - schreiben Sie immer den Vornamen aus (er schrieb häufig fname und so weiter)
  • Verwenden Sie keine verwirrenden Namen (wie Betrag_Geladen und Lade_Betrag, die verschiedene, aber verwandte Dinge gemessen haben).
  • Verwenden Sie nicht DIVs und verwenden Sie minimal CSS - verwenden Sie stattdessen verschachtelte Tabellen (ich habe einmal sechs Ebenen tief gefunden) .
  • Zwischenspeichern Sie keine Abfragen. Je.
  • Möchten Sie eine Variable auf mehr als einer Seite verwenden? Anwendungsbereich.
  • Jede Seite ist ein eigener Try/Catch-Block. Wir brauchen/wollen keinen globalen Fehlerbehandler.

Ich fing an, diese zu ändern, sobald er aufhörte.

6
Ben Doom

Fast jede Art von Variablennamenskonvention, die den Variablentyp, die Veränderlichkeit, den Bereich/die Speicherklasse und/oder deren Referenz wiederholt. Grundsätzlich jedes der Sprache innewohnende Konstrukt. Dies ist im 21. Jahrhundert mit modernen IDEs nicht mehr erforderlich (und meiner Meinung nach wurden ursprünglich nur schlechte Codelayouts/-praktiken behoben). Dies beinhaltet die ungarische Notation und ihre Varianten:

  • bigBlobStr - Eine Zeichenfolge.
  • bigBlobStrCurLocPtr - Ein Zeiger auf den "aktuellen Speicherort" in dieser Zeichenfolge.
  • someIntArray - Array von Ganzzahlen

oder Dinge wie:

  • e_globalHeading - Externe Variable
  • sg_prefPoolSz - Statische globale Variable

und natürlich einer der am weitesten reichenden Schandflecken in OOP, m_ für alle Mitglieder. Wenn Sie nicht sicher sind/verfolgen können, welche Variablen lokal, Mitglieder, global, statisch oder final/const sind, schreiben Sie möglicherweise unklar , schlecht faktorisierter Spaghetti-Code.

Dies unterscheidet sich erheblich von der Angabe einer Präfix-/Suffix-Konvention für Dinge wie min, max, avg, Größe, Anzahl, Index usw., was in Ordnung ist.

4
charstar

Ich bin gezwungen, XML-Dokumentation für alle Klassen und Klassenmitglieder zu haben. Einschließlich privat. Ich bin bereit, Standard-Ghostdoc-Kommentare zu verwenden.

public class User 
{
    /// <summary>
    /// the _userID
    /// </summary>
    private int _userID;
}
4
Carl Bergquist

Der schlechteste Standard, dem ich jemals begegnen musste:

StyleCop für C #

Nehmen Sie jeden sinnlosen Standard und fügen Sie ihn in ein Tool ein, das zur Kompilierungszeit ausgeführt wird, anstatt in der IDE zur Entwurfszeit).

//this is not a legal comment.
//  nor is this

// muss von einem einzelnen Leerzeichen gefolgt werden. Wenn Sie debuggen, verwenden Sie ////, um Code zu kommentieren. Eigenschaften müssen außerdem 'Triple Slash'-Kommentare enthalten und "Gets or Sets xxxxx" mit einem Punkt am Ende und ordnungsgemäßer Großschreibung enthalten.

Pfui. Vielleicht gibt es einen Punkt mit weit verbreiteten APIs, aber mein Hauptproblem ist, dass sie es sicherlich als Plugin a la R # hätten bauen können.

4
MIA

Ich habe kurze Zeit in Japan gearbeitet. Ich habe komplexe mathematische Codierungen durchgeführt. Der Firmencodierungsstandard sollte absolut keine Kommentare enthalten. Es war schwierig, da ich gerne einige Kommentare hinzugefügt hätte, um die komplexen Berechnungen zu erklären und mich nach einigen Wochen nicht zu vergessen. Schade, dass der nächste Typ, der nach mir kommt, versteht, was der Code tat.

Es war das erste Mal, dass ich sah, dass Codierungskommentare verboten waren.

4
softveda

Bei einem früheren Job sollte der C # -Standard mindestens zwei Leerzeichen zwischen Typname und Variablenname in Deklarationen enthalten. Der Methodenname muss in der nächsten Zeile der Zugriffsmodifikatoren und des Rückgabetyps beginnen. Vor jeder offenen Interpunktion muss ein Leerzeichen stehen (Klammer oder Klammer), alle Variablendeklarationen am Anfang der Methode, Deklarationen getrennt von der Zuweisung und der Einzug waren 3 Leerzeichen. Beispiel:

private static int
ThisIsTheMethod (int  code, string  message)
{
   int  i;
   int  j;
   int  k;

   for (i = 0; i < message.Length; i++)
   {
      if (message [i] == '!') return -1;
   }

   j = SomeMethod (code);
   k = OtherMethod (j);

   return k;
}

Obwohl es hässlich war, funktionierte es mit der Ausnahme, dass Visual Studio die Dinge wirklich nicht so wollte, und es war eher ein zusätzlicher Schritt nach dem "normalen" Codieren, um es so neu zu formatieren.

3
Jesse C. Slicer

bei meinem vorherigen Job, den ich gerne vor 3 Monaten gekündigt habe:

datenbank:

  • Tabellennamen mussten in Großbuchstaben geschrieben werden.
  • Tabellennamen mussten TBL_ vorangestellt werden
  • Felder mussten vorangestellt werden: DS_ (für varchar, was keinen Sinn machte) NU_ für Zahlen CD_ für ("Bitfelder") DT_ für Datumsangaben
  • datenbankfelder mussten auch in Großbuchstaben geschrieben werden [CD_ENABLED]
  • gleiches gilt für die sp-Namen [SP_INFINITY_USER_GROUPS_QRY] und die Datenbanknamen [INFINITY].
  • habe ich schon erwähnt, dass SP-Namen tatsächlich so sind? SP_ Präfix, dann Datenbankname SP_INFINITY_ dann Tabellenname, SP_INFINITY_USER_GROUPS dann, was der SP tatsächlich tun sollte (QRY, UPD, DEL, INS) Jesus, lassen Sie mich nicht einmal mit Abfragen beginnen, die nicht nur CRUD-Abfragen waren.
  • alle Textfelder mussten eindeutig varchar (MAX) sein.
  • zahlen waren entweder int oder double, selbst wenn Sie einen anderen Typ hätten verwenden können.
  • "boolesche" Felder (Bit) waren int, kein Grund.
  • gespeicherte Prozeduren mussten mit dem Präfix sp_productname_ versehen werden

asp.net/c #/javascript

  • JEDE einzelne Funktion musste in try {} catch {} eingeschlossen werden, damit die Anwendungen nicht "explodieren" (zumindest war dies der offizielle Grund), selbst wenn dies dazu führte, dass Dinge nicht funktionierten und keine Ahnung hatten, warum.
  • parametern muss p vorangestellt werden, z. B. pCount, pPage
  • bereichsvariablen mussten w vorangestellt werden (wie in "Arbeiten", was zum Teufel bedeutet das überhaupt?)
  • statik mit g usw.
  • alles, was nach Framework 1.1 veröffentlicht wurde, war Off-Limits, so wie Sie es ohnehin für Linq und Generika getan hatten. (Ich habe es mir zum Ziel gesetzt, sie zu zwingen, mir die Verwendung von jquery zu erlauben, aber das ist mir zumindest gelungen).
3
bevacqua

Obligatorische Aufnahme, Erweiterung von $ Log $ -Informationen, wenn unsere SCC war eine veraltete Version von PVCS. Wir hatten einige Dateien, in denen die $ Log $ -Informationen viel, viel länger waren als der tatsächliche Code in der Datei.

3
Ian C.

Alle Ausgaben in einem PHP Skript müssen Zeile für Zeile wiederholt werden.

<?php
echo "<div id=\"foo\">";
echo "<h1>" . $title . "</h1>";
echo paragraphs($body); // just an example
echo "</div>";
?>

(Haftungsausschluss: Ich musste ihm nicht folgen, aber ein Team, mit dem ich zusammengearbeitet habe, hat es getan.)

3
sholsinger

Das schlechteste war ein Projekt (C++), bei dem Klassen Modulabkürzungen vorangestellt wurden.

Wenn sich beispielsweise etwas im MessagePassing-Modul befindet und Teil des Antwortmechanismus ist, kann es als MESPAS_RESSomeobject Bezeichnet werden.

Als ich an diesem Code arbeitete, wollte ich mir die Augen ausstechen.


Nicht das Schlimmste, aber mein aktueller Job erfordert ein Präfix c_ Für Klassen und ein Präfix e_ Für Aufzählungen. Nichts für Strukturen. aber _t Postfix auf typedefs. Es ist auch ziemlich hässlich.

Oh, und Funktionsheaderkommentare in BEIDEN .h und .cpp (Deklaration und Definition), die natürlich fast nie übereinstimmen.

3
µBio

Mein Favorit ist die Regel "Keine magischen Zahlen", die ahnungslos angewendet wird. Zum Beispiel habe ich einmal einen Kommentar in einer Codeüberprüfung gesehen, der besagt, dass die Regel "Keine magischen Zahlen" durch diese Codezeile verletzt wurde:

if (fscanf(file, "%s %hd",name, nbrObject ) != 2 )

Ich denke, der Rezensent wollte eine Konstante anstelle von 2, wie z. B. #define TWO 2

3
Chalie Wax

Unsere Methodennamen mussten das Format 'Get/Set/Add/Delete' + Name des Zielobjekts + Namen aller Parameter haben.

GetUserById(userId);
InsertUser(user);
DeleteUser(user);

Fair genug - aber die Regel sehr streng. Komplexe Objekttypen durften nicht abgekürzt werden, und Operationen mussten immer jeden Anforderungsparameter auflisten, egal wie lächerlich:

GetCustomerOrderDeliveryDetailsByCustomerIdAndDeliveryDateAndOrderStatus(...

Nachdem Sie die vollständigen Variablennamen hinzugefügt haben (die auch nicht gekürzt werden durften), können Sie sich vorstellen, wie lange einige einfache Methodenaufrufe gedauert haben. Wort umhüllend lang.

3
Kirk Broadhurst

Wo ich jetzt arbeite, ist der Prozess zur Benennung von Variablen für alles, was mit der Datenbank zu tun hat:

  • $ sql für Anweisungen
  • $ result für Abfrageergebnisse

Was jedoch Sinn macht, als ich den Punkt ansprach, dass die Konvention zu allgemein war und dass dies zu einer variablen Überlappung führen würde, lautete die Antwort "use result_alt oder sql_alt". Meine Gefühle beim Kommentieren: Wenn Sie geeignete Variablennamen verwenden, die den Zweck angeben, würden Sie keine oder so viele Kommentare benötigen.

2
chrisw

Der schlechteste Codierungsstandard, dem ich jemals folgen musste, war "Allen Objektvariablennamen muss 'obj' vorangestellt werden". Dies war ein großes Java Projekt, also war fast alles ein Objekt. Das Schlimmste war, dass fast jeder eine Richtlinie zum Benennen von Variablen durch einfaches Voranstellen von "obj" übernahm. zum Klassennamen. Wir haben mit Sachen wie Person objPerson1 im gesamten Code. Ich habe einmal Einwände erhoben und eine der anderen Entwicklerinnen einwerfen lassen, dass sie die Konvention mochte, "weil ich dann nicht über meine Variablennamen nachdenken muss". Dieser Ort war eine echte Horrorshow ...

2
TMN

Möglicherweise der Codierungsstandard der Huawei Software Company. Sie möchten, dass Sie alle Mitglieder für öffentlich erklären :))

2
LostMohican

Schreiben Sie etwas in Fortran ( WATFOR , FORTRAN 77 ), wobei in Spalte 1 ein Nicht-Leerzeichen steht war ein Kommentar, und der Compiler hat Sie nicht gewarnt, wenn Sie über Spalte 72 hinausgingen. Er würde ihn einfach stillschweigend ignorieren.

Zumindest habe ich nur sieben Jahre damit verbracht.

2
Mark Thalman

Mit C-Header-Dateien in einem Java -Projekt).

Schnittstellen existieren aus guten Gründen, aber dieser Standard schreibt eine Schnittstelle vor (foo.Java) für jede einzelne Klasse (fooImpl.Java) ob es Sinn machte oder nicht. Viele Dinge, die synchron gehalten werden müssen, vollständige Unterbrechung der Eclipse-Click-in-Methode, sinnlose Arbeit.

Das Build-System hat es durchgesetzt, aber ich kann mir nicht vorstellen, was der ursprüngliche Zweck war. Glücklicherweise haben wir es für neuen Code verworfen, als wir auf ein neues Versionskontroll- und Build-System umgestiegen sind, aber es gibt immer noch viel davon.

Gleichzeitig haben wir auch die blöde Gewohnheit der Versionskontrolle-Info-in-Datei-Kommentare aufgegeben, die obligatorisch gewesen war.

2
user763

Ich arbeite derzeit in einer Firma, in der SQL-Abfragen über eine sogenannte "Anforderungsklasse" durchgeführt werden. Wie lächerlich:

In "include/request.class.php"

class RequestClass
{
    // ... some code.

    public function getUser($where)
    {
        global $initrequest

        $sql = $initrequest['users']
        $sql.= $where;

        return execute($sql);
    }
}

In initrequest.php:

$initrequest['users'] = 'SELECT * FROM users WHERE ';

Und es wurde aus der Anwendung folgendermaßen aufgerufen:

$request = new request();
$tmpquery = "username = $username AND password = $password";
$request->getUsers($tmpquery);

Und sie haben ein ähnliches Vorlagensystem, das auf "Blöcken" basiert, aber nachdem ich verstanden hatte, was ich hier zeige, drückte ich weiter darauf, unsere gesamte Software in den Papierkorb zu werfen und sie in Symfony neu zu schreiben.

2
Arie Deckelmann

In Main () ist nicht mehr als eine Codezeile zulässig

Eine Professorin an meiner Universität, die das Glück hatte, nicht darauf bestanden zu haben, dass ihre Junior-C # -Studenten nicht mehr als eine Codezeile in den Einstiegspunkt ihrer Konsolenanwendungen einfügen dürfen.

Dies ist bei der Entwicklung einer professionellen Anwendung sinnvoll, aber wenn das Programm nur die Absicht hat, nur wenige grundlegende Eingaben zu verwenden und eine einzige Ausgabe zu erstellen (d. H. MultiplyTwoNumbers.exe), ist eine solche Anforderung mehr schmerzhaft als gut.

Zusätzlich zu der "Hauptzeile des Codes" bestand der Professor darauf, dass jede Codezeile einen beschreibenden Kommentar und jedes Klassenmitglied ein wörtlich hat. beschreibender Name. Punkte verloren, wenn der Professor nicht der Meinung war, dass diese Anforderungen "angemessen" erfüllt wurden.

Die Studenten, die gezwungen waren, sich an diese Regeln zu halten, waren (fast) alle Neulinge in der Programmierung, und daher kann ich den Wert der Durchsetzung von Verhaltensweisen wie der Benennung und Trennung von Bedenken erkennen. Trotzdem half ich als .NET-Tutorin an meiner Universität ihren Studenten ständig, diese alltäglichen und abscheulichen Anforderungen zu erfüllen, lange nachdem sie ihren Code zum Laufen gebracht hatten .

Meiner Meinung nach sollte bei der Schulung von Personen, die neu in einer Programmiersprache sind, das erste Anliegen darin bestehen, wie Code erstellt wird und nicht, wie standardbasierte Code.

1
Nathan Taylor

"Verwenden Sie keinen C++ - Kommentarstil für C-Code".

Dies hat zwar immer noch einen geringen Wert, wenn das Risiko besteht, dass Ihr Programm auf einen veralteten Compiler portiert werden muss, ist jedoch meist nur ein Aufwand. Mein größter Einwand ist, dass es wirklich schwierig ist, /*, um das Auskommentieren einer großen Region während der Entwicklung oder beim Testen von Einheiten zu blockieren. */

1
AShelly

Mein ADA-Dozent an der Uni bestand darauf, dass jede Methode einen Kommentar enthielt, in dem die Voraussetzungen, Nachbedingungen und das große O dargelegt waren. Das größte Problem dabei war, dass er sich nie die Mühe machte zu erklären, was großes O tatsächlich bedeutete, und nie überprüfte, ob sie korrekt waren, so dass ich mich beim Kopieren und Einfügen dieses Kommentarblocks hunderte Male.

-- Method_Name
-- PRECONDITIONS: none
-- POSTCONDITIONS: none
-- O(n) = n
1
Christopher

(C++)

Alle Rückgabewerte mussten HRESULTS sein (die Standardwerte - keine benutzerdefinierten Ergebnisse)

Das war erst vor ein paar Jahren. Die älteren Menschen waren immer noch so verliebt in COM und haben nie andere Best Practices gelesen oder davon erfahren. Es war eine erstaunlich geschlossene Umgebung.

Der gleiche Ort erlaubte auch nicht die Verwendung von STL.

Ich ging kurz nachdem ich diesen Leckerbissen herausgefunden hatte.

1
Tim

In Visual Basic 6. mussten wir jeder einzelnen Methode Fehlerbehandlungsblöcke hinzufügen. Keine Ausnahmen. Also haben wir es getan.

Dann mussten wir erklären, warum Teile der Anwendung langsam waren.

1
Chris Brandsma

Der begrenzte Platz für Variablen-/Objektnamen ist wahrscheinlich meine größte Irritation. Ich habe in einer relativ modernen, proprietären Sprache gearbeitet, die nur 10 Zeichen zulässt. Dies ist ein Überbleibsel aus den Originalversionen.

Das Nettoergebnis ist, dass Sie am Ende lustige Namenskonventionen haben, die definieren, was jedes Zeichen Ihrer erlaubten 10 darstellen soll. Etwas wie:

  • 1-3: Anwendungspräfix
  • 4-6: Modulpräfix
  • 7-9: Benutzerdefinierter Abschnitt
  • 10: eine Zahl für den Fall, dass zwei ... oder 9 dasselbe heißen.
1
Brad Gardner

Mein Favorit müsste die Datenbank-Benennungsrichtlinie sein, an die wir uns derzeit halten wollen. Alle Tabellen, die für viele-viele-Beziehungen verwendet werden, sollten mit den Namen der verknüpften Tabellen benannt und mit dem Suffix "Link" versehen werden. Und natürlich keine Pluralisierung von Tabellennamen.

  • Bestellpositionen? Nee. Es sollte OrderProductLink heißen
  • Freunde? Nee. Es sollte PersonPersonLink sein
1
CodingInsomnia

Es ist gezwungen, jeder Datei eine Dateibeschreibung hinzuzufügen (es ist ein C # Projekt).

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="User.cs" company="Company">
//   Copyright (C) 2009 Company. All rights reserved.
// </copyright>
// <summary>
//   The user.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
0
Carl Bergquist

In einem Unternehmen mussten wir technische Dokumentationen schreiben, in denen erklärt wurde, wie wir eine Funktionalität schreiben werden. Es wurde schnell veraltet, da Sie beim Programmieren in UML nicht an alles denken.

0
IAdapter