Was war die seltsamste Codierungsstandardregel, der Sie folgen mussten? [geschlossen]


173

Als ich diese Frage stellte, bekam ich fast immer ein klares Ja, Sie sollten Codierungsstandards haben.

Was war die seltsamste Codierungsstandardregel, der Sie jemals folgen mussten?

Und mit seltsamste meine ich lustigste oder schlimmste oder einfach nur seltsam.

Bitte geben Sie in jeder Antwort an, welche Sprache, wie groß Ihr Team war und welche negativen Auswirkungen dies auf Sie und Ihr Team hatte.


19
Nachdem ich diese Liste plötzlich durchgelesen habe, habe ich das Gefühl, dass ich eine sehr glückliche Karriere hatte, um diesen erzwungenen Standard-Mist zu vermeiden!
Matt B

Wenn ich das nächste Mal für einen Job interviewe, werde ich diese Frage durchsuchen, um als "Rote Fahne. Laufen!" Indikator. Tatsächlich Codierung von Standard-Anti-Mustern.
Stu Thompson

5
Und es ist mir peinlich zuzugeben, dass ich sehr früh in meiner Karriere einem Team eine der Antworten auferlegt habe. Es tut mir so leid, Leute.
JasonFruit

Antworten:


434

Ich hasse es, wenn die Verwendung mehrerer Rückgaben verboten ist.


26
Was ist der angebliche Punkt dieser Regel? Persönlich würde ich eine Codeüberprüfung für Code nicht bestehen, die durch eine weitere Rückgabe leichter lesbar gemacht werden könnte.
Mark Baker

22
Auf der anderen Seite kann das Eliminieren einer Option am Anfang wie "if (param == null) return null" Ihren Code ziemlich bereinigen, um dies zu verbieten, anstatt ihn zu ermutigen, ist etwas kriminell.
Bill K

39
Problemumgehung: if (! Initialize ()) {RetVal = ERR_BADINIT; gehe zu ReturnPoint; } (viel mehr Code) ReturnPoint: return RetVal; } Problem gelöst! ;)
Marc Bernier

9
Bis vor kurzem waren Mehrfachrückgaben verboten. Dann wurde die Tatsache enthüllt, dass dies ein Überbleibsel von C war, das von C ++ RAII überholt wurde und Funktionen mit einer Größe von weniger als 15 Zeilen aufweist. Seitdem wie Braveheart: "FREIHEIT !!!!" ... :-p ...
paercebal

122
Ihre Wahl: mehrere Rückgaben oder mehr verschachtelte if-Anweisungen. Ich werde mehrere Retouren nehmen.
Lance Fisher

333

umgekehrte Einrückung. Beispielsweise:

    for(int i = 0; i < 10; i++)
        {
myFunc();
        }

und:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }

152
Oh mein Gott ... Kann ich den Soziopathen treffen, der sich diesen ausgedacht hat? Er könnte mir ein oder zwei Dinge über Menschenfeindlichkeit beibringen.
John Rudy

23
Das kann unmöglich wahr sein.
Däne

191
Jedes Mal, wenn Sie die Einrückung umkehren, tötet Gott einen Wartungsentwickler.
Chris Vest

14
OMG, machst du Witze?
Andrea Ambu

21
spart wertvolle Bytes ... von unschätzbarem
Wert

326

Vielleicht nicht die ausgefallenste, die Sie bekommen werden, aber ich hasse es wirklich sehr, wenn ich Datenbanktabellennamen mit 'tbl' voranstellen muss.


5
Ist das nicht nur eine ungarische Notation für DBs?
ARKBAN

19
Ist das nicht so, als würde man Variablen ein Präfix voranstellen?
Brian R. Bondy

26
In ähnlicher Weise hasse ich es, wenn ID-Spalten in Datenbanken den Tabellennamen vorangestellt werden, so wie es in der Produkttabelle eine Produkt-ID-Spalte geben würde. Redundanz, die Skripten ohne ORM manchmal mehr Kopfschmerzen bereitet, als es sein muss
Andrew Ingram

30
Eigentlich bevorzuge ich, dass der ID-Spalte der Tabellenname vorangestellt wird. Erleichtert das Schreiben von Abfragen. Bei Fremdschlüsseln kann das Fremdschlüsselfeld mit dem Schlüsselfeld identisch sein.
Craig

38
In ähnlicher Weise hasse ich es, wenn Tabellennamen singulär sein müssen. Mein Instinkt ist es, eine Tabelle zu benennen, die beispielsweise Kunden enthält, "Kunden", nicht "Kunden". Klingt geringfügig, bis Sie alle Probleme erkennen, die Sie sparen würden, wenn Sie Ihre Tabelle nur "Transaktionen" anstelle von "[Transaktion]" nennen könnten.
Atario

248

Fast jede Art von ungarischer Notation.

Das Problem mit der ungarischen Notation ist, dass sie sehr oft missverstanden wird. Die ursprüngliche Idee war, der Variablen ein Präfix zu setzen, damit die Bedeutung klar war. Beispielsweise:

int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.

Aber die meisten Leute benutzen es, um den Typ zu bestimmen.

int iAppleCount = 0; // Number of apples.
int iPearCount = 0;  // Number of pears.

Das ist verwirrend, denn obwohl beide Zahlen ganze Zahlen sind, weiß man, kann man Äpfel nicht mit Birnen vergleichen.


71
In diesem Joel on Software-Beitrag erfahren
Sie,

9
Natürlich können Sie mit C ++ anstelle von C Code schreiben, sodass der Compiler beim Vergleich von Äpfeln mit Birnen einen Fehler ausgibt.
Andreas Magnusson

5
Ja, Joel hat es richtig gemacht. Ich wünschte, Compiler könnten dazu gebracht werden, Joels Version davon durchzusetzen.
Loren Pechtel

9
Sollte das nicht "int cntApples = 0; int cntPeas = 0;" sein? Dh. Das Präfix ist die Variable "Art".
Blorgbeard ist

42
Zumindest der erste ist richtig ... alles mit "Apple" muss mit dem Präfix "i" versehen werden. ;)
Johannes Charra

240

Kein ternärer Operator erlaubt, wo ich gerade arbeite:

int value = (a < b) ? a : b;

... weil nicht jeder "es versteht". Wenn Sie mir sagten: "Verwenden Sie es nicht, weil wir sie neu schreiben mussten, wenn die Strukturen zu kompliziert werden" (verschachtelte ternäre Operatoren, irgendjemand?), Dann würde ich verstehen. Aber wenn Sie mir sagen, dass einige Entwickler sie nicht verstehen ... ähm ... Sicher.


235
Mit jedem meint sich Ihr Chef.
Brian R. Bondy

13
Früher bin ich in dieses Lager gefallen ... Aber ich bin daraus gewachsen und habe gelernt, den bedingten Operator zu lieben (wenn es angebracht ist).
John Rudy

22
Wenn überhaupt, sollte die Regel lauten: "Verwenden Sie immer den ternären Operator", einen Operator von purer Schönheit :)
Bobby Jack

16
Ich liebe es, aber der Grund, warum ich am häufigsten nicht benutze, ist der gleiche wie Ihre Erfahrung "Die Leute werden es nicht verstehen". Mein Argument ist, dass sie nicht arbeiten sollten, wenn sie das Konzept nicht verstehen können ...
Aidos

7
Wie sonst würden Sie eine konstante Variable bedingt initialisieren, ohne eine ganz neue Funktion zu schreiben (was der Lesbarkeit nicht viel nützt). Die Verwendung von const für lokale "Variablen" ist viel besser für das Verständnis und das Befolgen des Codes als ein Verbot des ternären Operators.
Andreas Magnusson

239

NIEMALS Code entfernen, wenn Änderungen vorgenommen werden. Wir wurden aufgefordert, alle Änderungen zu kommentieren. Denken Sie daran, dass wir die Quellcodeverwaltung verwenden. Diese Richtlinie hielt nicht lange an, da die Entwickler darüber in Aufruhr waren und wie sie den Code unlesbar machen würden.


3
Ich hasse das wirklich ... es gibt ein paar Leute, die das hier machen (es ist aber kein Standard oder so)
chills42

7
Regeln wie diese sind der Grund, warum ich den Quellcode, den ich von anderen erbe, in Farbe drucken muss. Auf einen Cent pro Seite ist das nicht sehr schön für mein Unternehmen - aber nur so kann ich es lesen, wenn ich es drucken muss. (Wir haben viel geerbt, was dieser Regel folgte ...)
John Rudy

3
Klingt nach einer Regel, die vor der Quellcodeverwaltung entwickelt wurde. Oder weil Programmierer nur einmal pro Woche einchecken.
Craig

6
Ich liebe es, diese Antworten zu lesen, weil mein Job dadurch 100-mal besser erscheint.
rjh

2
Fühlen Sie sich für Sie ... wir sind seit mehr als 4 Jahren bei SVN, aber der leitende Entwickler hasst es und checkt ungefähr alle zwei Monate ein und verbringt die nächsten drei Tage damit, sich über fehlerhaften Code zu beschweren: /
Viktor Svub

204

Ich habe einmal unter der Tyrannei des Mighty VB King gearbeitet .

Der VB King war der reine Meister von MS Excel und VBA sowie von Datenbanken ( daher sein Nachname: Er spielte mit Excel, während die Entwickler mit Compilern arbeiteten, und das Herausfordern von Datenbanken konnte sich nachteilig auf Ihre Karriere auswirken ... ).

Seine immensen Fähigkeiten gaben ihm natürlich eine einzigartige Vision von Entwicklungsproblemen und Projektmanagementlösungen: Der VB King war zwar nicht genau im engeren Sinne codierend, hatte aber regelmäßig neue Ideen zu "Codierungsstandards" und "Best Practices", die er ausprobierte (und oft gelungen), uns aufzuzwingen. Beispielsweise:

  • Alle C / C ++ - Arrays beginnen bei Index 1 anstelle von 0. Tatsächlich ist die Verwendung von 0 als erster Index eines Arrays veraltet und wurde durch die aufschlussreiche Array-Indexverwaltung von Visual Basic 6 ersetzt.

  • Alle Funktionen müssen einen Fehlercode zurückgeben: In VB6 gibt es keine Ausnahmen. Warum sollten wir sie überhaupt benötigen? ( dh in C ++ )

  • Da "Alle Funktionen müssen einen Fehlercode zurückgeben" für Funktionen, die aussagekräftige Typen zurückgeben, nicht praktikabel ist, müssen alle Funktionen einen Fehlercode als ersten [In / Out] -Parameter haben.

  • Unser gesamter Code überprüft die Fehlercodes ( dies führte zum schlimmsten Fall von VBScript-Einrückungen, die ich jemals in meiner Karriere gesehen habe ... Da die "else" -Klauseln nie behandelt wurden, wurde natürlich erst zu spät ein Fehler gefunden ).

  • Da wir ab diesem Tag mit C ++ / COM arbeiten, werden wir alle unsere DOM-Dienstprogrammfunktionen in Visual Basic codieren.

  • ASP 115-Fehler sind böse. Aus diesem Grund verwenden wir On Error Resume Next in unserem VBScript / ASP-Code, um sie zu vermeiden.

  • XSL-T ist eine objektorientierte Sprache. Verwenden Sie Vererbung, um Ihre Probleme zu lösen ( dumme Überraschung hat mir eines Tages fast den Kiefer aufgebrochen ).

  • Ausnahmen werden nicht verwendet und sollten daher entfernt werden. Aus diesem Grund werden wir das Kontrollkästchen deaktivieren und nach einem Destruktoraufruf fragen, falls die Ausnahme abgewickelt wird ( es dauerte Tage, bis ein Experte die Ursache für all diese Speicherlecks gefunden hatte, und er wurde fast wütend, als er herausfand, dass sie bereitwillig ignoriert wurden (und) versteckt) sein technischer Hinweis zur erneuten Überprüfung der Option, der einige Wochen zuvor gesendet wurde ).

  • Fangen Sie alle Ausnahmen in der COM-Schnittstelle unserer COM-Module ab und entsorgen Sie sie stillschweigend (auf diese Weise scheint ein Modul nicht abzustürzen, sondern nur schneller zu sein ... Glänzend! ... Da wir die oben beschriebene Über-Fehlerbehandlung verwendet haben, Wir haben sogar einige Zeit gebraucht, um zu verstehen, was wirklich geschah ... Sie können nicht sowohl Geschwindigkeit als auch korrekte Ergebnisse erzielen, oder? ).

  • Ab heute wird unsere Codebasis in vier Zweige aufgeteilt. Wir werden ihre Synchronisation verwalten und alle Fehlerkorrekturen / -entwicklungen von Hand integrieren.

Alle außer den C / C ++ - Arrays , den VB DOM-Dienstprogrammfunktionen und XSL-T als OOP-Sprache wurden trotz unserer Proteste implementiert. Natürlich wurden im Laufe der Zeit einige entdeckt, ähm , gebrochen und ganz aufgegeben.

Natürlich hat die Glaubwürdigkeit des VB-Königs nie darunter gelitten: Im höheren Management blieb er ein technischer Experte der "Top Gun" ...

Dies führte zu einigen amüsanten Nebenwirkungen, wie Sie sehen können, wenn Sie dem Link folgen. Was ist der beste Kommentar im Quellcode, auf den Sie jemals gestoßen sind?


28
Betreff: 1-Indizierung. Manchmal muss man einfach aufstehen und etwas Starkes sagen wie "das ist dumm und falsch". Zeichne eine Linie in den Sand. Vergessen Sie beschwichtigende Egos und sagen Sie es einfach. Ich kann fast garantieren, dass jeder andere lohnende Programmierer sofort anfängt zu nicken und
mitzumachen

31
@jrista: Wenn Sie die Schreibweise meines Textes NICHT kommentieren, ignorieren Sie bitte Folgendes ... ... ... ... ... ... ... ... Wenn Sie meinen Text kommentieren, bitte Überlegen Sie, (1) Korrekturen vorzuschlagen, (2) die Rechtschreibung selbst zu korrigieren oder (3) zu berücksichtigen, dass nicht jeder Entwickler auf der Welt (weit davon entfernt) Englisch als Muttersprache spricht. oder beweisen Sie, dass Sie es besser machen können, indem Sie mir die richtige Übersetzung auf
Französisch

4
Wenn dieser Typ mein Chef wäre, wäre ich mit einer gut geschriebenen und dokumentierten Liste von Beschwerden direkt zu jedem Mitglied des höheren Managements gegangen und hätte ihn entlassen. -1 dafür, dass du nicht die Bälle hast, um für dich selbst aufzustehen.
Muusbolla

34
@ Muusbolla: Wer hat dir gesagt, dass wir uns nicht beschwert haben? Es eskalierte, bis eine Delegation von zwei Personen (einschließlich mir) direkt zum CEO ging, um das Problem zu erklären. Aber es tut mir leid, Ihnen sagen zu müssen, dass es einen Unterschied zwischen einer idealistischen Welt gibt, in der Gerechtigkeit herrscht, und der realen Welt, in der einige Chefs glauben, "das Management ist niemals falsch, selbst wenn es so ist", und die jeden vernichten wird Ich werde es wagen, diesem Dogma zu widersprechen. Das einzige glückliche Andenken, das ich aus dieser Zeit habe, ist der Tag, an dem ich vor fast drei Jahren zurückgetreten bin, und ich bin seit diesem Tag ein glücklicherer Mann. Wie auch immer, wenn das stimmt, ist dein Downmod-Grund lahm. Es tut uns leid.
Paercebal

7
@paercebal: En générale, c'est Korrektur écrit, sauf que quelques petits erreurs: «squatch»: ça doit être «squash»; «Dieser eine Tag»: en ce context-là, auf dirait «an diesem Tag»; «Lagerverfahren»: «Lagerverfahren»; «Erstickt» s'écrit «erstickt». Aussi, dans les commentaires, vous utilisez ° erwähnt », ce qui doit être« erwähnt »Mais vraiment, tout ça ne justifie pas une telle plainte. Au contraire, vous y montrez une excellente maîtrise de l'anglais; félicitations!
Intuitiert

131

In den 80ern / 90ern arbeitete ich für eine Flugzeugsimulatorfirma, die FORTRAN verwendete. Unser FORTRAN-Compiler hatte ein Limit von 8 Zeichen für Variablennamen. Die Codierungsstandards des Unternehmens reservierten die ersten drei für Informationen zum ungarischen Notationsstil. Also mussten wir versuchen, aussagekräftige Variablennamen mit nur 5 Zeichen zu erstellen!


17
Luxus: Wir hatten nur 6 Charaktere; das Paket hatte Namen, die mit g beginnen; die internen Funktionen starteten alle gk; Es gab Workstation-Treiber mit Codes wie 0p (also war gk0p der Anfang), so dass wir für den Rest des Fortran-Namens zwei Zeichen hatten. gk0paa, gk0pab, ...
Jonathan Leffler

103
"Als ich in deinem Alter war, hatten wir nur 2 Charaktere! Und es wurde ohne Berücksichtigung der Groß- und Kleinschreibung!"
pookleblinky

53
Früher mussten wir 3 Stunden vor dem Schlafengehen um 2 Uhr morgens aufstehen, dann unsere eigenen Compiler schreiben und die Firma für das Privileg bezahlen, zur Arbeit zu gehen. Wir durften nur den Buchstaben A für unsere Variablennamen verwenden. Dann würde unser Chef unseren Code löschen und auf unseren Listen tanzen und Halleluja singen.
David Arno

12
"50 mögliche Identifikatoren sollten für jeden ausreichen": p
Chris Vest

5
Heck, die BASIC-Interpreter, mit denen wir vor langer Zeit gearbeitet haben, hatten zweistellige Variablennamen. Warum sich über 5 beschweren?
David Thornley

107

Ich habe an einem Ort gearbeitet, an dem zwei Unternehmen fusionierten. Der "dominante" hatte einen großen Server in K & R C (dh vor ANSI) geschrieben. Sie zwangen die Java-Teams (aus beiden Büros - wahrscheinlich insgesamt 20 Entwickler), dieses Format zu verwenden, das die beiden Säulen der "Klammerdebatte" freudig ignorierte und direkt verrückt wurde:

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }

18
Ich würde denken, dass eine größere visuelle Unterscheidung zwischen C und Java die Übergänge erleichtern würde. (+1 für "und geht direkt zu verrückt.")
Jeffrey L Whitledge

4
Sieht aus wie der Whitesmiths-Stil, der in den ursprünglichen 'Programmierfenstern' von Petzold verwendet wurde - go figure! ;)
Bobby Jack

7
Ich finde das der intelligenteste Zahnspangenstil. Leider benutzen die meisten Leute es nicht. Wenn geschweifte Klammern eine semantische Bedeutung haben, sollten sie so behandelt werden, nicht am Ende einer Zeile hängen bleiben und ignoriert werden.
Ryan Lundy

7
@ Kyralessa. Ich bin anderer Meinung ... Ich weiß nicht, ob geschweifte Klammern eine semantische Bedeutung haben, aber sie können sicherlich die Musterübereinstimmung und das Raumgefühl beeinflussen. IMO, diese Version verliert das komplett. zB möchte ich, dass mein Lesezeichen außerhalb des Buches steckt und nicht bündig mit den Seiten ist.
Michael Easter

6
Dies ist eigentlich mein bevorzugter Stil, aber alles auf der Welt (insbesondere Visual Studio) verwendet standardmäßig andere Modi, daher habe ich aufgegeben. Warum mag ich es? Die geschweiften Klammern sind "Teil" des enthaltenen Codes - sie zwingen ihn, wie eine einzelne Anweisung zum if "auszusehen", was erwartet wird.
Atario

104

Verboten:

while (true) {

Erlaubt:

for (;;) {

4
Andere haben argumentiert, dass dies for (;;) {zum ersten Mal ein C-Idiom ist.
Robert P

69
Wenn ich moderne Smileys mit neuen Reißzähnen richtig verstehe, bringt dieser Standard die Armen dazu, überfordert zu weinen!
Ben Blank

15
Dies ist hier de facto eine Regel. VC6 gibt eine Compiler-Warnung über while (true) aus, jedoch nicht über for (;;). Ansonsten sind sie gleichwertig. Also wählen wir die warnungsfreie aus.
user9876

22
Bjarne S. sagte in seinem Buch: "Denn (;;) sollte für immer gelesen werden." Wenn es für den Ersteller von C ++ gut genug ist, sollte es für Sie gut genug sein. :-)
Frank Krueger

58
In dem allerersten C-Programm, an dem ich gearbeitet habe, hatte jemand #define ever (;;) hinzugefügt, so dass man "for ever {...}" sagen konnte
James Curran

101

Ein Freund von mir - wir nennen ihn CodeMonkey - hat seinen ersten Job am College [vor vielen Jahren] mit der internen Entwicklung in COBOL bekommen. Sein erstes Programm wurde als "nicht unseren Standards entsprechend" abgelehnt, weil es ... [Schauder!] Verschachtelte IF-Anweisungen verwendete

Die Kodierungsstandards untersagten die Verwendung verschachtelter IF-Anweisungen

Jetzt war CodeMonkey nicht schüchtern und war sich seiner Fähigkeiten sicher. Deshalb bestand er darauf, alle an der Kette und im Gang zu fragen, warum diese Regel existierte. Die meisten behaupteten, sie wüssten es nicht, einige erfanden Dinge über 'Lesbarkeit', und schließlich erinnerte sich eine Person an den ursprünglichen Grund: Die erste Version des von ihnen verwendeten COBOL-Compilers hatte einen Fehler und behandelte verschachtelte IF-Anweisungen nicht richtig.

Dieser Compiler-Fehler war natürlich seit mindestens einem Jahrzehnt behoben, aber niemand hatte die Standards in Frage gestellt . [baaa!]

CodeMonkey war erfolgreich darin, die Standards zu ändern - schließlich!


7
Steven, das erinnert mich an die Affenexperiment-
Nick Dandoulakis

5
@ [Nick D]: Ja, ich auch - daher der Codename "CodeMonkey" ;-)
Steven A. Lowe


Der Grund könnte falsch gewesen sein, aber es ist immer noch gut, verschachtelte ifs zu vermeiden - c2.com/cgi/wiki?ArrowAntiPattern
manojlds

97

Einmal an einem Projekt gearbeitet, bei dem Unterstriche verboten wurden. Und ich meine total verboten. Wenn wir in der ac # winforms-App einen neuen Ereignishandler hinzufügen (z. B. für eine Schaltfläche), müssen wir den Standardmethodennamen von buttonName_Click () in etwas anderes umbenennen, um das Ego desjenigen zu befriedigen, der die Codierung geschrieben hat Standards. Bis heute weiß ich nicht, was er gegen den bescheidenen Unterstrich hatte


23
Vielleicht war _ auf seiner Tastatur kaputt;)
Roman Plášil

139
buttonNameUnderscoreClick ()
vitule

9
Hat den unglücklichen Nebeneffekt, die Verwendung von FILE und LINE zum Debuggen zu verhindern. Und #if __cplusplus extern "C" in Header-Dateien. Und die integralen Typen in stdint.h. Und size_t.
Steve Jessop

8
Gut, dass dies damals C # war
Konfigurator

4
Ich rate ernsthaft von Unterstrichen ab (obwohl nicht in dem oben aufgeführten OP-Fall. Es sind zwei zusätzliche Tastenanschläge (Umschalt + _), die ich lieber nicht auf mich genommen habe, wenn der Pascal- oder
Kamelfall

92

Völlig nutzlose Namenskonventionen für Datenbanken. Jeder Tabellenname muss mit einer Nummer beginnen. Die Zahlen zeigen, welche Art von Daten in der Tabelle enthalten sind.

  • 0: Daten, die überall verwendet werden
  • 1: Daten, die nur von einem bestimmten Modul verwendet werden
  • 2: Nachschlagetabelle
  • 3: Kalender, Chat und Mail
  • 4: Protokollierung

Dies macht es schwierig, eine Tabelle zu finden, wenn Sie nur den ersten Buchstaben ihres Namens kennen. Da es sich um eine MSSQL-Datenbank handelt, müssen wir Tabellennamen überall mit eckigen Klammern umgeben.

-- doesn't work
select * from 0examples;

-- does work
select * from [0examples];

65
Es tut mir leid, so schrecklich leid ...
Kirk Strauser

1
Wow - gut. Ich denke, die Verwendung von Briefen kam nicht in Frage? Nicht, dass DAS eine gute Idee wäre, aber zumindest müssen Sie nicht alle Tabellennamen zitieren.
Mark Brittingham

umwerfend ... wer hat das erfunden? die dba?
Dotjoe

90

Wir machten ein C ++ - Projekt und der Teamleiter war ein Pascal-Typ.

Wir hatten also eine Codierungsstandard-Include-Datei, um all diese lästigen C- und C ++ - Syntax neu zu definieren:

#define BEGIN {
#define END }

aber warte, es gibt noch mehr!

#define ENDIF }
#define CASE switch

usw. Nach all dieser Zeit ist es schwer, sich zu erinnern.

Dies nahm den perfekt lesbaren C ++ - Code und machte ihn für niemanden außer dem Teamleiter unleserlich.

Wir mussten auch die umgekehrte ungarische Notation verwenden, dh

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

obwohl mir das seltsamerweise gefallen hat.


22
Erstellen von nicht wartbarem Code für die Zukunft
rshimoda

2
Die ungarische Notation ist in Ordnung. Falsch gemacht ... ick. Ein geeignetes Typensystem schlägt beide.
Thelema

5
Weißt du, ich glaube ich bin bei dir. Die ungarischen Warzen sind bei weitem nicht so verwerflich, wenn sie so am Ende angeheftet werden.
TED

haha bringt mich zurück zu den Tagen, als ich von Pascal zu C ++ gewechselt bin (vor ungefähr 16 Jahren). Jedes Mal, wenn ich ein {sah, musste ich mir mental sagen "{bedeutet ANFANG". Zumindest für mich war es nur in meinem Kopf.
Thomasrutter

6
Als ich im MS VC ++ - Support arbeitete, ließen wir mehrere Kunden Repro-Code einreichen, der so geschrieben war. Es dauerte eine Weile, bis wir merkten, dass es sich tatsächlich um C ++ handelte (die #defines waren nicht enthalten).
JBRWilkinson

88

Bei einem früheren Job:

  • "Normale" Tabellen beginnen mit T_
  • "System" -Tabellen (normalerweise Lookups) beginnen mit TS_ (außer wenn dies nicht der Fall ist, weil sich an diesem Tag jemand nicht danach gefühlt hat).
  • Querverweistabellen beginnen mit TSX_
  • Alle Feldnamen beginnen mit F_

Ja, das ist richtig. Alle Felder in jeder einzelnen Tabelle. Damit wir erkennen können, dass es sich um ein Feld handelt.


und du hattest kein spezielles Präfix für Primärschlüsselfelder ???
Czimi

2
@ Czimi: Das habe ich vergessen zu erwähnen. Jede Tabelle hat ein Feld namens FI_ID, das als Primärschlüssel verwendet wird.
Jeromy Irvine

31
Holy sh ... Der T_guy, der diesen Albtraum erfunden hat, sollte mit einer F_gun getötet und an TSX_hell geschickt werden.
Sergey Skoblikov

3
Wir hatten tbl und fld für alle Felder und Tabellen. Völlig nutzlos ...
Konfigurator

5
@configurator: Sie hatten "tbl" für alle Felder und "fld" für alle Tabellen? :-)))
Timwi

84

Ein Kumpel von mir ist auf diese Regel gestoßen, als er in einem Regierungsjob arbeitete. Die Verwendung von ++ (vor oder nach) wurde vollständig verboten. Der Grund: Verschiedene Compiler können es unterschiedlich interpretieren.


5
Nun, an diesem Punkt könnten Sie genauso gut aufgeben, oder?
Kirk Strauser

90
Jemand wurde gebissen, weil er den Unterschied zwischen Postfix und Präfix nicht verstand, einen Compiler-Fehler behauptete und ihn dann anderen Leuten zufügte, denke ich.
Bernard

5
Tatsächlich hatten sie unter bestimmten Umständen Recht. Das Verbot scheint allerdings etwas übertrieben. Nehmen wir zum Beispiel die Zeile: a [i] = i ++; Ich kann inkrementiert werden, bevor es verwendet wird, um ein oder danach zu indizieren. Die Sprache definiert dies nicht.
TED

9
Er hat Recht - die Reihenfolge der Operationen kann nicht garantiert werden, wenn Sie dieselbe Variable an anderer Stelle in der Anweisung verwenden. Verbieten Sie einfach potenziell mehrdeutigen Code, aber nicht alle Verwendungen davon!
Loren Pechtel

2
Könnte genauso gut verbieten, =wie es verwendet werden kann, um undefiniertes Verhalten zu verursachen.
Konfigurator

81

Die Hälfte des Teams befürwortete die Einrückung mit vier Feldern. Die andere Hälfte befürwortete eine Einrückung mit zwei Leerzeichen.

Wie Sie sich vorstellen können, hat der Codierungsstandard drei vorgeschrieben, um "alle gleichermaßen zu beleidigen" (ein direktes Zitat).


42
Deshalb ist die Tab-Identifikation so großartig. Jeder kann die Größe in seinem Editor ändern;)
xardias

41
Ja, das Einrücken von Registerkarten ist großartig ... bis Sie tatsächlich die Datei eines anderen öffnen und feststellen, dass die Dinge falsch ausgerichtet sind, weil Leerzeichen dort gemischt wurden, wo sie nicht sein sollten, oder nicht dort, wo sie haben sollten. Dann formatieren Sie sich automatisch neu und die Unterschiede in der Versionskontrolle werden hässlich. Pfui.
Alan Hensel

41
Aus diesem Grund sollten Sie nur Tabulatoren zum Einrücken und nur Leerzeichen zum Ausrichten verwenden, und niemals werden sich die beiden treffen. und wenn Sie eine Änderung am Leerzeichen in einer Datei vornehmen möchten, muss dies die einzige Änderung sein, die Sie für diesen bestimmten Check-in vornehmen.
joh6nn

16
... und das funktioniert nie. : P
Robert P

10
"Alle gleich beleidigen" ... ich liebe es. Ich werde mich daran erinnern müssen, wenn ich das nächste Mal irgendwie in einen Einrückungsstandardisierungskrieg verwickelt bin.
Michael Burr

74

Reflection nicht verwenden zu können, da der Manager behauptete, es sei zu viel "Magie".


10
Ja, Magie ist anscheinend schwer aufrechtzuerhalten;) LOL.
Rik

19
Das ist wahrscheinlich die richtige Regel aus den falschen Gründen :)
Bobby Jack

71
Für 'Magie' lesen Sie die Leistung, die nicht wartbaren, obskuren Albtraumcode tötet. Er hat recht.
Gbjbaanb

4
Ich denke, Sie durften damals überhaupt nicht in .Net codieren. Schließlich erfolgt ein Großteil der Ausführung des Frameworks durch Reflexion.
NotMe

5
Nieder mit diesen Zauberern !! Immer da, mit ihrer Magie , die unsere Jobs stiehlt, unsere Frauen verführt und unsere Kinder korrumpiert!
ZJR

71

Das seltsamste, das ich hatte und das mich einige Zeit zum Sturz gekostet hat, war, als der Eigentümer unseres Unternehmens verlangte, dass unser neues Produkt nur IE ist. Wenn es unter FireFox funktionieren konnte, war das in Ordnung, aber es musste nur IE sein.

Dies mag bis auf einen kleinen Fehler nicht allzu seltsam klingen. Die gesamte Software war für ein maßgeschneidertes Server-Softwarepaket gedacht, das unter Linux ausgeführt wurde, und alle Client-Boxen, die unser Kunde kaufte, waren Linux. Ohne herauszufinden, wie man Wine (damals sehr unzuverlässig) auf all diesen Boxen zum Laufen bringt und ob wir den IE zum Laufen bringen und ihre Administratoren darin schulen können, wie man Weinprobleme debuggt, war es einfach nicht möglich um die Anfrage des Besitzers zu erfüllen. Das Problem war, dass er das Webdesign machte und einfach nicht wusste, wie man Websites mit FireFox kompatibel macht.

Es wird Sie wahrscheinlich nicht schockieren zu wissen, dass unser Unternehmen bankrott gegangen ist.


1
Ich würde sagen, das ist ziemlich seltsam.
Brad Gilbert

14
Ein Hoch auf den Kapitalismus!
Starblue

46
Yay für das Überleben der Stärksten ... dieser Typ hatte es nicht verdient, sein eigenes Software-Geschäft zu führen.
Mark Brittingham

10
Der letzte Satz war großartig. Wie kann jemand ernst genommen werden, wenn er solche Entscheidungen trifft?
Mr. Shickadance

54

Verwenden von generischen nummerierten Bezeichnernamen

Bei meiner aktuellen Arbeit haben wir zwei Regeln, die wirklich gemein sind:

Regel 1: Jedes Mal, wenn wir ein neues Feld in einer Datenbanktabelle erstellen, müssen wir zusätzliche Reservefelder für die zukünftige Verwendung hinzufügen. Diese Reservefelder sind nummeriert (da niemand weiß, welche Daten sie eines Tages enthalten werden). Wenn wir das nächste Mal ein neues Feld benötigen, suchen wir zuerst nach einem nicht verwendeten Reservefeld.

Am Ende customer.reserve_field_14enthalten wir also die E-Mail-Adresse des Kunden.

Eines Tages dachte unser Chef darüber nach, Reservetische einzuführen , aber glücklicherweise konnten wir ihn davon überzeugen, es nicht zu tun.

Regel 2: Eines unserer Produkte ist in VB6 geschrieben und VB6 hat ein Limit für die Gesamtzahl der verschiedenen Bezeichnernamen. Da der Code sehr groß ist, stoßen wir ständig auf dieses Limit. Als "Lösung" sind alle lokalen Variablennamen nummeriert:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

Obwohl dies die Bezeichnergrenze effektiv umgeht, führen diese beiden Regeln zusammen zu einem schönen Code wie diesem:

...

If Lvarbool1 Then
  Lvarbool2 = True
End If

If Lvarbool2 Or Lvarstr1 <> Lvarstr5 Then
  db.Execute("DELETE FROM customer WHERE " _ 
      & "reserve_field_12 = '" & Lvarstr1 & "'")
End If

...

Sie können sich vorstellen, wie schwierig es ist, alten oder fremden Code zu reparieren ...

Letztes Update: Jetzt verwenden wir auch "Reserveverfahren" für private Mitglieder:

Private Sub LSub1(Lvarlong1 As Long, Lvarstr1 As String)
  If Lvarlong1 >= 0 Then 
    Lvarbool1 = LFunc1(Lvarstr1)
  Else
    Lvarbool1 = LFunc6()
  End If
  If Lvarbool1 Then
    LSub4 Lvarstr1
  End If
End Sub

EDIT: Es scheint, dass dieses Codemuster immer beliebter wird. Weitere Informationen finden Sie in diesem täglichen WTF- Beitrag: Astigmatismus :)


10
Im Ernst. Ich wette, es hat ewig gedauert, all diese SQL-Injektionen zu entfernen. ;-)
Kirk Strauser

Das ist reine Bösartigkeit. Ich bin sicher, Ihr Chef / TL ist ein Overlord, der nur auf seine Gelegenheit wartet.
Manuel Ferreria

5
omg, wer zum Teufel würde sich solche Regeln einfallen lassen ??? Am wichtigsten ist: Wie zum Teufel schafft es Ihr Team, Code zu schreiben?
hasen

2
Ich denke, er meinte, dass Sie standardmäßig alle Felder auswählen würden, damit Sie auch alle 'Reserve'-Felder erhalten, ohne sie alle angeben zu müssen.
Mr. Shickadance

2
Sie könnten die Code-Vorverarbeitung verwenden, bei der Sie Ihren Code mit aussagekräftigen Variablennamen schreiben und dann durch die "richtigen" ersetzen, bevor Sie etwas wie '% s / email / Reserve_field_12 / g' kompilieren;)
João Portela

53

In meinen C ++ - Tagen durften wir ==,> =, <=, && usw. nicht verwenden. Es gab Makros dafür ...

if (bob EQ 7 AND alice LEQ 10)
{
   // blah
}

dies war offensichtlich mit der „alten zufälligen Zuordnung in bedingten Fehler“, aber wir beschäftigen auch hatte die Regel „setzen Konstanten vor Variablen“, so

if (NULL EQ ptr); //ok
if (ptr EQ NULL); //not ok

Ich erinnere mich nur, dass der einfachste Codierungsstandard, den ich je gehört habe, "Code schreiben, als ob der nächste Betreuer ein bösartiger Psychopath ist, der weiß, wo Sie leben."


1
rofl .. schreiben fortran in C.
Robert Paulson

Ich mache immer noch null == Variable in c #. Ich weiß, ich muss mir keine Sorgen machen, aber ich kann mir nicht helfen. Wenn ich es anders sehe, bin ich nervös. alte Gewohnheiten sind schwer abzulegen.
Troy Howard

Der letzte über den Psychopathen würde einige Menschen fast sofort töten lassen.
Mr. Shickadance

31
+1 für den bösartigen Psychopathen.
Collyer

Wenn ich Code in Foren poste, verwende ich manchmal Dinge wie LT und SHL, um zu vermeiden, dass die Operatoren als HTML munged werden.
Supercat

45

Ungarische Notation im Allgemeinen.


11
Nun, ich mag H / N zur Kontrolle auf einer Seite. Es ist viel einfacher, alle Textfeldsteuerelemente in einer IntelliSense-Dropdown-Liste zu finden, wenn ich nur nach txtFooBar suchen muss.
cciotti

20
HUngarian Notation ist nicht böse, muss nur richtig verwendet werden joelonsoftware.com/articles/Wrong.html
Czimi

1
Ich werde in Bezug auf Kontrollen zugeben. Dann kann die ungarische Notation hilfreich sein. Im Allgemeinen halte ich die ungarische Notation jedoch für veraltet und werde im Allgemeinen missbraucht. Es ist von seiner ursprünglichen Absicht abgewichen.
Vfilby

9
Schrecklich missbraucht, ja. Falsch, nein.
Loren Pechtel

2
Viele Leute beginnen einen Schnittstellennamen mit einem I, IEnumerable, IList ... Im .NET-Framework beginnen alle Schnittstellen mit einem I.
Tuinstoel

43

Ich hatte viele dumme Regeln, aber nicht viele, die ich für geradezu seltsam hielt.

Das albernste war ein NASA-Job, an dem ich Anfang der 90er Jahre gearbeitet habe. Dies war ein riesiger Job mit weit über 100 Entwicklern. Die erfahrenen Entwickler, die die Codierungsstandards geschrieben haben, entschieden, dass jede Quelldatei mit einem Akronym aus vier Buchstaben beginnen sollte und der erste Buchstabe für die Gruppe stehen musste, die für die Datei verantwortlich war. Dies war wahrscheinlich eine großartige Idee für die alten FORTRAN 77-Projekte, an die sie gewöhnt waren.

Dies war jedoch ein Ada- Projekt mit einer schönen hierarchischen Bibliotheksstruktur, sodass es überhaupt keinen Sinn ergab . Jedes Verzeichnis war voll von Dateien, die mit demselben Buchstaben begannen, gefolgt von drei weiteren Unsinnbuchstaben, einem Unterstrich und einem Teil des Dateinamens, der wichtig war. Alle Ada-Pakete mussten mit derselben Warze mit fünf Zeichen beginnen. Ada „Verwendung“ Klauseln wurden entweder nicht erlaubt (wohl eine gute Sache , die unter normalen Umständen), so dass alle Verweise auf die Kennung gemeint , die nicht lokal auf diese Quelldatei war auch diese nutzlose Warze hatte aufzunehmen. Es hätte wahrscheinlich einen Aufstand darüber geben sollen, aber das gesamte Projekt wurde von Junior-Programmierern besetzt und frisch vom College eingestellt (ich selbst bin letzterer).

Eine typische Zuweisungsanweisung (in Ada bereits ausführlich) würde am Ende ungefähr so ​​aussehen:

NABC_The_Package_Name.X := NABC_The_Package_Name.X + 
  CXYZ_Some_Other_Package_Name.Delta_X;

Zum Glück waren sie zumindest so aufgeklärt, dass wir mehr als 80 Spalten haben konnten! Trotzdem wurde die Warze der Einrichtung so gehasst, dass sie zu einem Code auf der Oberseite aller Quelldateien wurde, um Ada-Umbenennungen zu verwenden, um die Warze loszuwerden. Für jedes importierte ("withed") Paket gibt es eine Umbenennung. So was:

package Package_Name renames NABC_Package_Name;
package Some_Other_Package_Name renames CXYZ_Some_Other_Package_Name;
--// Repeated in this vein for an average of 10 lines or so

Was die kreativeren unter uns nahm zu tun versucht , zu verwenden , die Warze einen acutally sinnvoll (oder dumm) Paketnamen zu machen. (Ich weiß, was Sie denken, aber Sprengsätze waren nicht erlaubt und schämen Sie! Das ist widerlich). Zum Beispiel war ich in der C ommon Codegruppe, und ich brauchte ein Paket an Schnittstelle mit dem machen , W o rkstation Gruppe. Nach einer Brainstorming-Sitzung mit dem Workstation-Mitarbeiter haben wir beschlossen, unsere Pakete so zu benennen, dass jemand, der beide benötigt, schreiben muss:

with CANT_Interface_Package;
with WONT_Interface_Package;

1
Mit all dem konnte die NASA immer noch nicht herausfinden, ob sie in Kilometern oder Meilen
rechnen sollte

16
Verdammt, und ich dachte wirklich, Sie würden alles daran setzen, eine CUN * _- und W * NK_-Paketnamenskonvention zu verwenden. Entschuldigung, ich habe langsam brennende, explosive, textuelle Touretten. Aber deine waren viel, viel lustiger!
defmeta

41

Als ich an einem Ort anfing zu arbeiten und meinen Code in die Quellcodeverwaltung eingab, kam mein Chef plötzlich auf mich zu und bat mich, nicht mehr so ​​viel zu tun. Er sagte mir, es sei nicht ratsam, mehr als 1 Commit pro Tag für einen Entwickler durchzuführen, da dies die Quellcodeverwaltung beeinträchtigt. Ich starrte ihn einfach an ...

Später verstand ich, dass der Grund, warum er überhaupt auf mich zukam, darin bestand, dass der SVN-Server ihm (und 10 weiteren Führungskräften) für jedes Commit, das jemand macht, eine E-Mail schickte. Und indem er die Quellcodeverwaltung verschmutzte, vermutete er, dass er seine Mailbox erwähnte.



Ich bin definitiv kein Fan von sogenannten "Chunky Check-Ins". Festschreiben, wenn Ihre Änderung abgeschlossen ist, so einfach ist das. Ich möchte mich auch am Ende des Arbeitstages verpflichten, da ich der Meinung bin, dass mein Code kompilierbar sein und am nächsten Morgen zumindest mit dem Rest des Projekts für andere Programmierer ausgeführt werden kann.
Jesse C. Slicer

2
Holen Sie sich das Beste aus beiden Welten - Wenden Sie sich an Ihre lokale Niederlassung, wenn Sie nichts verlieren möchten. Starten und quetschen Sie diese Commits neu, wenn Sie bereit sind, sie in den Master zu übernehmen. (Verzeihen Sie die Git-Terminologie - ich bin sicher, dass es in Quecksilber und einer Reihe anderer Systeme auch möglich ist)
Michael Anderson

Ich stimme all dem zu. Es ist ein verwurzeltes Problem, sich der Versionskontrolle zu nähern. Es gibt keine technologische Lösung. Ich überlegte, zu git-svn zu wechseln, um mit einem lokalen Repository zu arbeiten und dann Dinge in das SVN-Repository zu verschieben, aber das hätte nur die E-Mails für alle Commits meines Tages in einem großen Stapel gesendet und gelöst nichts für meine Chefs.
Avihu Turzion

34

Alle Datenbankabfragen über gespeicherte Prozeduren in SQL Server 2000 ausführen. Von komplexen Abfragen mit mehreren Tabellen bis zu einfachen Abfragen wie:

select id, name from people

Die Argumente für Verfahren waren:

  • Performance
  • Sicherheit
  • Wartbarkeit

Ich weiß, dass das Verfahrensthema ziemlich kontrovers ist, also zögern Sie nicht, meine Antwort negativ zu bewerten;)


2
Die Wartbarkeit könnte verbessert werden, wenn die Tabellen- und Spaltennamen nicht eindeutig sind, die SP-Namen jedoch. Dies könnte das Auffinden von Code-Referenzen erleichtern. Wenn es andere, bessere Wartbarkeitsvorteile gibt, sind mir diese nicht bekannt. Sicherheit ist der Hauptgrund für die Verwendung von SPs.
Jeffrey L Whitledge

2
Ich bin damit einverstanden, dass es für allgemeine Zwecke nicht 100% wtf ist, aber siehe diesen Link: Kodierunghorror.com/blog/archives/000292.html
Azkotoki

2
"Sicherheit ist der Hauptgrund für die Verwendung von SPs" Nein. Nichts an SPs in SQL Server ist sicherer. Sie sind nur dann sicher, wenn sie als paremeterisierte Abfragen aufgerufen werden, was mit dynamischem SQL genauso gut möglich ist.
Flory

4
Nee: Sprocs sind nützlich. Obwohl es manchmal schmerzhaft sein kann, schreiben Sie am Ende eine bessere, wiederverwendbarere Datenbankschnittstelle. Ihre Datenbankbauten können auch Leistungsprobleme leichter analysieren und ein Produktionssystem ohne Änderung des App-Codes aktualisieren. Ich befürworte jedoch keine Geschäftslogik in Sprocs.
Robert Paulson

4
Das Vergraben von Abfragen in kompiliertem Code ist so schmerzhaft, dass ich 100% hinter der 100% Sprocs-Richtlinie allein für die Abstraktion
zurückbleibe

33

Pro 1000 Codezeilen müssen 165 Unit-Tests (nicht unbedingt automatisiert) vorhanden sein. Das klappt bei einem Test für ungefähr alle 8 Zeilen.

Es ist unnötig zu erwähnen, dass einige Codezeilen ziemlich lang sind und Funktionen diese Zeiger zurückgeben, um eine Verkettung zu ermöglichen.


Wie wird ein Unit-Test nicht automatisiert?
Pupeno

Wie sind sie auf die magische Nummer 8 gekommen?
Rohit

1
Was passiert, wenn Sie 164 haben? 166?
Daniel Daranas

8
Eher wie 6 Zeilen.
rekursiv

1
Es hängt davon ab, wie feinkörnig Ihre Tests auch sind, denke ich. Ich würde es als function(x).should == 2einen einzelnen Test betrachten, während andere 10 davon zusammenfassen und es einen einzelnen Test nennen würden.
Orion Edwards

30

Wir mussten alle Funktionen in Klassen alphabetisch sortieren, um sie "leichter zu finden" zu machen. Egal, die Idee hatte einen Dropdown. Das waren zu viele Klicks.

(Der gleiche technische Leiter hat eine App geschrieben, um alle Kommentare aus unserem Quellcode zu entfernen.)


3
Na klar, denn Kommentare sind doch nur Unordnung ... und überlegen Sie, wie viele Zyklen der Vorprozessor beim Kompilieren spart! (Die App ist noch lustiger als die Regel. Gut.)
Ojrac

7
Natürlich! Entwickler sollen Code schreiben, keine Zeit damit verschwenden, Kommentare zu schreiben :)
Daniel Rikowski

2
Ja! Und Kommentare machen den Build langsamer!
Greg D

2
Trotzdem halte ich es für eine gute Regel, Mitglieder nach Typ (Felder, Eigenschaften, Methoden) und nach Namen zu
sortieren

3
Ich sortiere Methoden, Mitglieder usw. alphabetisch innerhalb ihrer jeweiligen Gruppen, sowohl in der Kopfzeile als auch in der Quelle ... aber nur, weil ich besessen bin.
Jon Purdy

29

Ungefähr 1987 nahm ich eine Stelle bei einer Firma an, die mich anstellte, weil ich einer von wenigen Leuten war, die wussten, wie man Offenbarung einsetzt. Offenbarung, wenn Sie noch nie davon gehört haben, war im Wesentlichen eine PC-basierte Implementierung des Pick-Betriebssystems - das, wenn Sie noch nie davon gehört haben, seinen Namen von seinem Erfinder, dem fabelhaften Namen Dick Pick, erhielt. Über das Pick-Betriebssystem kann viel gesagt werden, das meiste davon ist gut. Eine Reihe von Supermini-Anbietern (zumindest Prime und MIPS) verwendeten Pick oder ihre eigenen benutzerdefinierten Implementierungen davon.

Diese Firma war ein Prime-Shop und für ihre internen Systeme verwendeten sie Informationen. (Nein, das war wirklich der Name: Es war die Implementierung von Pick durch Prime.) Sie hatten einen Vertrag mit dem Staat über den Bau eines PC-basierten Systems und hatten ungefähr ein Jahr in ihr Offenbarungsprojekt investiert, bevor der Typ die ganze Arbeit erledigte. der auch ihr MIS-Direktor war, entschied, dass er nicht mehr beide Jobs machen konnte und stellte mich ein.

Auf jeden Fall hatte er eine Reihe von Codierungsstandards für ihre Prime-basierte Software festgelegt, von denen viele auf zwei Grundbedingungen beruhten: 1) die Verwendung von dummen Terminals mit 80 Spalten und 2) die Tatsache, dass Prime dies nicht tat. Ich hatte keinen visuellen Editor, er hatte seinen eigenen geschrieben. Aufgrund der magischen Portabilität von Pick-Code hatte er seinen Editor in Revelation heruntergebracht und das gesamte Projekt auf dem PC damit erstellt.

Revelation war natürlich PC-basiert, hatte einen perfekt guten Vollbild-Editor und hatte keine Einwände, als Sie an Spalte 80 vorbeikamen. In den ersten Monaten, in denen ich dort war, bestand er jedoch darauf, dass ich seinen Editor und seine Standards.

Der erste Standard war also, dass jede Codezeile kommentiert werden musste. Jede Linie. Keine Ausnahmen. Seine Begründung dafür war, dass selbst wenn Ihr Kommentar genau das sagte, was Sie gerade im Code geschrieben hatten, das Kommentieren bedeutete, dass Sie zumindest zweimal über die Zeile nachdachten. Außerdem hatte er, wie er fröhlich betonte, dem Editor einen Befehl hinzugefügt, der jede Codezeile so formatierte, dass Sie einen Zeilenende-Kommentar einfügen konnten.

Oh ja. Wenn Sie jede Codezeile kommentierten, gab es Kommentare am Zeilenende . Kurz gesagt, die ersten 64 Zeichen jeder Zeile waren für Code, dann gab es ein Semikolon, und dann hatten Sie 15 Zeichen, um zu beschreiben, was Ihre 64 Zeichen taten. Kurz gesagt, wir haben eine Assembler-Konvention verwendet, um unseren Pick / Basic-Code zu formatieren. Dies führte zu Dingen, die so aussahen:

EVENT.LIST[DATE.INDEX][-1] = _         ;ADD THE MOST RECENT EVENT
   EVENTS[LEN(EVENTS)]                 ;TO THE END OF EVENT LIST

(Eigentlich habe ich nach 20 Jahren endlich die Zeilenfortsetzungssyntax von R / Basic vergessen, so dass es vielleicht anders ausgesehen hat. Aber Sie haben die Idee.)

Wenn Sie mehrzeilige Kommentare einfügen mussten, lautete die Regel außerdem, dass Sie einen Blumenkasten verwenden:

************************************************************************
**  IN CASE YOU NEVER HEARD OF ONE, OR COULDN'T GUESS FROM ITS NAME,  **
**  THIS IS A FLOWER BOX.                                             **
************************************************************************

Ja, diese schließenden Sternchen in jeder Zeile waren erforderlich. Wenn Sie seinen Editor verwendet haben, war es schließlich nur ein einfacher Editorbefehl, um einen Blumenkasten einzufügen.

Ihn zum Nachgeben zu bringen und mich den eingebauten Editor von Revelation verwenden zu lassen, war ein ziemlicher Kampf. Zuerst bestand er darauf, einfach weil das die Regeln waren. Als ich beanstandete, dass a) ich den Revelation-Editor bereits kannte, b) er wesentlich funktionaler war als sein Editor, c) andere Revelation-Entwickler die gleiche Perspektive hätten, erwiderte er, dass ich es nicht tun würde, wenn ich nicht auf seinem Editor trainieren würde jemals in der Lage sein, an der Prime-Codebasis zu arbeiten, was, wie wir beide wussten, nicht passieren würde, solange die Hölle nicht gefroren war. Schließlich gab er nach.

Aber die Kodierungsstandards waren die letzten, die gingen. Insbesondere die Kommentare zu den Blumenkästen waren eine blöde Zeitverschwendung, und er kämpfte gegen mich und sagte, dass es ganz einfach wäre, sie mit dem richtigen Editor zu pflegen. (Das Ganze wurde ziemlich passiv-aggressiv.) Schließlich gab ich leise nach und von da an hatte der gesamte Code, den ich zu Code-Reviews brachte, seine wertvollen Kommentare zu Blumenkästen.

Eines Tages, einige Monate nach Beginn des Jobs, als ich mich als mehr als kompetent erwiesen hatte (insbesondere im Vergleich zu der bemerkenswerten Parade anderer Programmierer, die durch dieses Büro gingen, während ich dort arbeitete), sah er mir über die Schulter arbeitete, und er bemerkte, dass ich keine Kommentare zu Blumenkästen verwendete. Oh, sagte ich, ich habe einen Quellcode-Formatierer geschrieben, der meine Kommentare beim Ausdrucken in Ihren Stil umwandelt. Es ist einfacher, als sie im Editor zu verwalten. Er öffnete den Mund, dachte einen Moment nach, schloss ihn, ging weg und wir sprachen nie wieder über Codierungsstandards. Danach wurden unsere beiden Jobs einfacher.


14
+1 für den Kommentarformatierer beim Drucken
BradC

1
Der Blumenkasten sollte NIEMALS überbeansprucht werden. Ich hasse es, wenn ich Code mitlese, okay, netter Kommentar, dann sehe ich einen Blumenkasten, der schreit: "DAS MACHT DAS UND DAS UND DAS"
TheLQ

26

Bei meinem ersten Job hatten alle C-Programme, egal wie einfach oder komplex, nur vier Funktionen. Sie hatten die Hauptfunktion, die die anderen drei Funktionen der Reihe nach aufrief. Ich kann mich nicht an ihre Namen erinnern, aber sie waren etwas in der Art von begin (), middle () und end (). begin () öffnete Dateien und Datenbankverbindungen, end () schloss sie und middle () erledigte alles andere . Unnötig zu erwähnen, dass middle () ein sehr war lange Funktion war.

Und nur um die Dinge noch besser zu machen, mussten alle Variablen global sein.

Eine meiner stolzesten Erinnerungen an diesen Job war die allgemeine Revolte, die zur Zerstörung dieser Standards führte.


2
Ich denke, auf dem Papier in einem Besprechungsraum klang es gut, aber ich bedaure den Programmierer, der ihm folgen musste
TheLQ

Muss von einem Englischlehrer entworfen worden sein.
Jodie

Muss von einem COBOL-Programmierer entworfen worden sein.
Bruno

Muss viele verwendet haben goto.
new123456

26

Ein extern geschriebener C-Codierungsstandard mit der Regel "Verlassen Sie sich nicht auf die Vorrangstellung des Operators, verwenden Sie immer Klammern".

Fairerweise war die offensichtliche Absicht zu verbieten:

a = 3 + 6 * 2;

zugunsten von:

a = 3 + (6 * 2);

Dies wurde durch ein Tool erzwungen, das den C-Syntaxregeln '=', '==', 'folgte.' und Array-Zugriff sind Operatoren. Also Code wie:

a[i].x += b[i].y + d - 7;

musste geschrieben werden als:

((a[i]).x) += (((b[i]).y + d) - 7);

2
vielleicht (((a) [(i)]). x) + = (((((b) [(i)]). y) + (d)) - (7)); ?
Behrooz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.