Dieser Artikel Wie man nicht wartbaren Code schreibt, behandelt einige der brillantesten Techniken, die der Mensch kennt . Einige meiner Favoriten sind:
Neue Verwendungen für Namen für Baby
Wenn Sie eine Kopie eines Babynamenbuchs kaufen, werden Sie bei Variablennamen nie ratlos sein. Fred ist ein wunderbarer Name und leicht zu tippen. Wenn Sie nach einfach zu tippenden Variablennamen suchen, versuchen Sie es mit adsf oder aoeu, wenn Sie mit einer DSK-Tastatur tippen.
Kreative Rechtschreibfehler
Wenn Sie beschreibende Variablen- und Funktionsnamen verwenden müssen, schreiben Sie diese falsch. Durch die falsche Schreibweise in einigen Funktions- und Variablennamen und die korrekte Schreibweise in anderen (z. B. SetPintleOpening SetPintalClosing) wird die Verwendung von Grep- oder IDE-Suchtechniken effektiv negiert. Es funktioniert erstaunlich gut. Fügen Sie ein internationales Flair hinzu, indem Sie Tory oder Tori in verschiedenen Theatern / Theatern buchstabieren.
Sei abstrakt
Verwenden Sie beim Benennen von Funktionen und Variablen häufig abstrakte Wörter wie alles, Daten, Handle, Stuff, Do, Routine, Perform und die Ziffern, z. B. RoutineX48, PerformDataFunction, DoIt, HandleStuff und do_args_method.
Kapitalisierung
Großschreibung des ersten Buchstabens einer Silbe in der Mitte eines Wortes nach dem Zufallsprinzip. Zum Beispiel ComputeRasterHistoGram ().
Kleinbuchstaben l Sieht der Ziffer 1 sehr ähnlich
Verwenden Sie Kleinbuchstaben l, um lange Konstanten anzugeben. zB wird 10l eher mit 101 verwechselt als mit 10L. Verbieten Sie alle Schriftarten, die eindeutig von uvw wW gq9 2z 5s il17 |! J oO08 `'";,. M nn rn {[()]} unterscheiden. Seien Sie kreativ.
Recyceln Sie Ihre Variablen
Wo immer die Bereichsregeln dies zulassen, verwenden Sie vorhandene nicht verwandte Variablennamen wieder. Verwenden Sie dieselbe temporäre Variable in ähnlicher Weise für zwei nicht miteinander verbundene Zwecke (angeblich zum Speichern von Stapelsteckplätzen). Verwandeln Sie für eine teuflische Variante die Variable, weisen Sie beispielsweise einer Variablen am Anfang einer sehr langen Methode einen Wert zu und ändern Sie dann irgendwo in der Mitte die Bedeutung der Variablen auf subtile Weise, z. B. durch Konvertieren von eine 0-basierte Koordinate zu einer 1-basierten Koordinate. Stellen Sie sicher, dass Sie diese Bedeutungsänderung nicht dokumentieren.
Cd wrttn wtht vwls s mch trsr
Wenn Sie Abkürzungen in Variablen- oder Methodennamen verwenden, brechen Sie die Langeweile mit mehreren Varianten für dasselbe Wort und buchstabieren Sie sie gelegentlich sogar in Langschrift. Dies hilft dabei, die faulen Penner zu besiegen, die die Textsuche verwenden, um nur einen Aspekt Ihres Programms zu verstehen. Betrachten Sie abweichende Schreibweisen als eine Variante des Tricks, z. B. das Mischen internationaler Farben mit amerikanischer Farbe und kulerz mit Dude-Sprache. Wenn Sie die Namen vollständig buchstabieren, gibt es nur eine Möglichkeit, jeden Namen zu buchstabieren. Diese sind für den Wartungsprogrammierer zu leicht zu merken. Da es so viele verschiedene Möglichkeiten gibt, ein Wort mit Abkürzungen abzukürzen, können Sie mehrere verschiedene Variablen verwenden, die alle denselben offensichtlichen Zweck haben. Als zusätzlichen Bonus bemerkt der Wartungsprogrammierer möglicherweise nicht einmal, dass es sich um separate Variablen handelt.
Obskure Filmreferenzen
Verwenden Sie konstante Namen wie LancelotsFavouriteColour anstelle von Blau und weisen Sie ihm einen Hex-Wert von $ 0204FB zu. Die Farbe sieht auf dem Bildschirm identisch mit reinem Blau aus, und ein Wartungsprogrammierer müsste 0204FB (oder ein grafisches Werkzeug) berechnen, um zu wissen, wie es aussieht. Nur jemand, der mit Monty Python und dem Heiligen Gral bestens vertraut ist, würde wissen, dass Lancelots Lieblingsfarbe Blau war. Wenn ein Wartungsprogrammierer nicht ganze Monty Python-Filme aus dem Speicher zitieren kann, hat er oder sie nichts damit zu tun, Programmierer zu sein.
Dokumentieren Sie das Offensichtliche
Pepper den Code mit Kommentaren wie / * addiere 1 zu i * / dokumentiere jedoch niemals wolliges Zeug wie den Gesamtzweck des Pakets oder der Methode.
Dokumentieren Sie, wie nicht warum
Dokumentieren Sie nur die Details dessen, was ein Programm tut, nicht was es zu erreichen versucht. Auf diese Weise hat der Fixierer im Fehlerfall keine Ahnung, was der Code tun soll.
Nebenwirkungen
In C sollen Funktionen idempotent sein (ohne Nebenwirkungen). Ich hoffe dieser Hinweis reicht aus.
Verwenden Sie Octal
Schmuggeln Sie Oktalliterale in eine Liste von Dezimalzahlen wie folgt:
array = new int []
{
111,
120,
013,
121,
};
Erweitertes ASCII
Erweiterte ASCII-Zeichen sind als Variablennamen gültig, einschließlich der Zeichen ß, Ð und ñ. Sie können kaum kopiert werden, ohne sie in einem einfachen Texteditor zu kopieren / einzufügen.
Namen aus anderen Sprachen
Verwenden Sie fremdsprachige Wörterbücher als Quelle für Variablennamen. Verwenden Sie zum Beispiel den deutschen Punkt für Punkt. Wartungscodierer genießen ohne Ihre festen Deutschkenntnisse die multikulturelle Erfahrung, die Bedeutung zu entschlüsseln.
Namen aus der Mathematik
Wählen Sie Variablennamen, die sich als mathematische Operatoren tarnen, z.
openParen = (slash + asterix) / equals;
Code, der sich als Kommentar tarnt und umgekehrt
Fügen Sie Codeabschnitte ein, die auskommentiert sind, aber auf den ersten Blick nicht zu sein scheinen.
for(j=0; j<array_len; j+ =8)
{
total += array[j+0 ];
total += array[j+1 ];
total += array[j+2 ]; /* Main body of
total += array[j+3]; * loop is unrolled
total += array[j+4]; * for greater speed.
total += array[j+5]; */
total += array[j+6 ];
total += array[j+7 ];
}
Würden Sie ohne die Farbcodierung feststellen, dass drei Codezeilen auskommentiert sind?
Beliebige Namen, die sich als Schlüsselwörter tarnen
Wenn Sie dokumentieren und einen beliebigen Namen benötigen, um einen Dateinamen darzustellen, verwenden Sie "Datei". Verwenden Sie niemals einen offensichtlich willkürlichen Namen wie "Charlie.dat" oder "Frodo.txt". Verwenden Sie in Ihren Beispielen im Allgemeinen beliebige Namen, die so ähnlich wie möglich nach reservierten Schlüsselwörtern klingen. Gute Namen für Parameter oder Variablen wären beispielsweise "bank", "leer", "Klasse", "const", "konstant", "Eingabe", "Schlüssel", "Schlüsselwort", "Art", "Ausgabe". , "Parameter" "Parameter", "System", "Typ", "Wert", "Var" und "Variable". Wenn Sie tatsächlich reservierte Wörter für Ihre beliebigen Namen verwenden, die von Ihrem Befehlsprozessor oder Compiler abgelehnt würden, umso besser. Wenn du das gut machst,
Codenamen dürfen nicht mit Bildschirmnamen übereinstimmen
Wählen Sie Ihre Variablennamen so aus, dass sie absolut keinen Bezug zu den Beschriftungen haben, die verwendet werden, wenn solche Variablen auf dem Bildschirm angezeigt werden. ZB auf dem Bildschirm das Feld "Postleitzahl" beschriften, aber im Code die zugehörige Variable "zip" aufrufen.
Auswahl des besten Überlastungsoperators
Überladen Sie in C ++ +, -, *, /, um Dinge zu tun, die nichts mit Addition, Subtraktion usw. zu tun haben. Wenn die Stroustroup den Shift-Operator für E / A verwenden kann, warum sollten Sie dann nicht gleichermaßen kreativ sein? Wenn Sie + überladen, stellen Sie sicher, dass Sie dies so tun, dass i = i + 5; hat eine ganz andere Bedeutung als i + = 5; Hier ist ein Beispiel für die Erhöhung der Verschleierung von Überlastungsoperatoren auf eine hohe Kunst. Überladen Sie das '!' Operator für eine Klasse, aber die Überlastung haben nichts mit Invertieren oder Negieren zu tun. Lassen Sie es eine ganze Zahl zurückgeben. Um einen logischen Wert dafür zu erhalten, müssen Sie '! ! '. Dies kehrt jedoch die Logik um, sodass Sie [Trommelwirbel] verwenden müssen '! ! ! '. Verwechseln Sie das nicht! Operator, der eine boolesche 0 oder 1 mit dem ~ bitweisen logischen Negationsoperator zurückgibt.
Ausnahmen
Ich werde Sie in ein wenig bekanntes Codierungsgeheimnis einweihen. Ausnahmen sind ein Schmerz im Hinterkopf. Richtig geschriebener Code schlägt nie fehl, sodass Ausnahmen eigentlich nicht erforderlich sind. Verschwenden Sie keine Zeit mit ihnen. Ausnahmen für Unterklassen gelten für Inkompetente, die wissen, dass ihr Code fehlschlägt. Sie können Ihr Programm erheblich vereinfachen, indem Sie nur einen einzigen Versuch / Fang in der gesamten Anwendung (hauptsächlich) ausführen, die System.exit () aufruft. Kleben Sie einfach einen Standardsatz von Würfen auf jeden Methodenheader, ob sie tatsächlich Ausnahmen auslösen könnten oder nicht.
Magic Matrix Locations
Verwenden Sie spezielle Werte an bestimmten Matrixpositionen als Flags. Eine gute Wahl ist das [3] [0] -Element in einer Transformationsmatrix, die mit einem homogenen Koordinatensystem verwendet wird.
Magic Array Slots überarbeitet
Wenn Sie mehrere Variablen eines bestimmten Typs benötigen, definieren Sie einfach ein Array davon und greifen Sie dann über die Nummer darauf zu. Wählen Sie eine Nummerierungskonvention, die nur Sie kennen, und dokumentieren Sie sie nicht. Und definieren Sie keine # define-Konstanten für die Indizes. Jeder sollte nur wissen, dass das globale Variablen-Widget [15] die Schaltfläche zum Abbrechen ist. Dies ist nur eine aktuelle Variante der Verwendung absoluter numerischer Adressen im Assembler-Code.
Verschönern Sie niemals
Verwenden Sie niemals einen automatisierten Quellcode-Aufräumer (Verschönerer), um Ihren Code auszurichten. Lobby, damit sie sie aus Ihrem Unternehmen verbannen, weil sie falsche Deltas in PVCS / CVS (Versionskontroll-Tracking) erstellen oder weil jeder Programmierer seinen eigenen Einrückungsstil für jedes Modul, das er geschrieben hat, für immer heilig halten sollte. Bestehen Sie darauf, dass andere Programmierer diese eigenwilligen Konventionen in "seinen" Modulen beachten. Das Verbot von Verschönerungen ist recht einfach, obwohl sie die Millionen von Tastenanschlägen beim manuellen Ausrichten sparen und Tage damit verschwenden, schlecht ausgerichteten Code falsch zu interpretieren. Bestehen Sie nur darauf, dass alle das gleiche aufgeräumte Format verwenden, nicht nur zum Speichern im gemeinsamen Repository, sondern auch während der Bearbeitung. Dies startet eine RWAR und der Chef wird, um den Frieden zu bewahren, das automatische Aufräumen verbieten. Ohne automatisiertes Aufräumen, Es steht Ihnen jetzt frei, den Code versehentlich falsch auszurichten, um die optische Täuschung zu erzeugen, dass Schleifen- und Wenn-Körper länger oder kürzer sind als sie wirklich sind oder dass Klauseln mit einem anderen Wenn übereinstimmen, als sie es tatsächlich tun. z.B
if(a)
if(b) x=y;
else x=z;
Testen ist für Feiglinge
Ein mutiger Programmierer wird diesen Schritt umgehen. Zu viele Programmierer haben Angst vor ihrem Chef, Angst, ihren Job zu verlieren, Angst vor Hasspost von Kunden und Angst, verklagt zu werden. Diese Angst lähmt das Handeln und verringert die Produktivität. Studien haben gezeigt, dass die Eliminierung der Testphase bedeutet, dass Manager die Versanddaten frühzeitig festlegen können. Dies ist eine offensichtliche Hilfe im Planungsprozess. Wenn die Angst weg ist, können Innovation und Experimente aufblühen. Die Rolle des Programmierers besteht darin, Code zu erstellen, und das Debuggen kann durch eine Zusammenarbeit des Helpdesks und der Legacy-Wartungsgruppe erfolgen.
Wenn wir volles Vertrauen in unsere Codierungsfähigkeit haben, sind Tests nicht erforderlich. Wenn wir dies logisch betrachten, kann jeder Dummkopf erkennen, dass das Testen nicht einmal versucht, ein technisches Problem zu lösen, sondern dass dies ein Problem des emotionalen Vertrauens ist. Eine effizientere Lösung für dieses Problem des mangelnden Vertrauens besteht darin, Tests vollständig zu eliminieren und unsere Programmierer zu Kursen zum Selbstwertgefühl zu schicken. Wenn wir uns für das Testen entscheiden, müssen wir schließlich jede Programmänderung testen, aber wir müssen die Programmierer nur zu einem Kurs schicken, um das Selbstwertgefühl zu stärken. Der Kostenvorteil ist ebenso erstaunlich wie offensichtlich.
Kehren Sie die übliche Richtig-Falsch-Konvention um
Kehren Sie die üblichen Definitionen von wahr und falsch um. Klingt sehr offensichtlich, funktioniert aber hervorragend. Sie können verstecken:
#define TRUE 0
#define FALSE 1
Irgendwo tief im Code, so dass er aus einer Datei, die niemand mehr betrachtet, aus dem Darm des Programms ausgebaggert wird. Dann zwingen Sie das Programm zu Vergleichen wie:
if ( var == TRUE )
if ( var != FALSE )
Jemand ist verpflichtet, die offensichtliche Redundanz zu "korrigieren" und var auf die übliche Weise an anderer Stelle zu verwenden:
if ( var )
Eine andere Technik besteht darin, TRUE und FALSE auf den gleichen Wert zu bringen, obwohl die meisten dies als Betrug betrachten würden. Die Verwendung der Werte 1 und 2 oder -1 und 0 ist eine subtilere Methode, um Menschen zu stolpern und trotzdem respektabel auszusehen. Sie können dieselbe Technik in Java verwenden, indem Sie eine statische Konstante namens TRUE definieren. Programmierer sind möglicherweise misstrauischer, dass Sie nichts Gutes tun, da in Java ein integriertes Literal true vorhanden ist.
Schizophrenie ausnutzen
Java ist in Bezug auf Array-Deklarationen schizophren. Sie können sie mit dem alten C, Way String x [] (mit gemischter Prä-Postfix-Notation) oder mit dem neuen Way String [] x mit reiner Präfix-Notation ausführen. Wenn Sie die Leute wirklich verwirren möchten, mischen Sie die Notationse.g.
byte[ ] rowvector, colvector , matrix[ ];
was äquivalent ist zu:
byte[ ] rowvector;
byte[ ] colvector;
byte[ ][] matrix;