Wer den Quellcode hat, der weiß wie ein Programm arbeitet – vorausgesetzt er versteht den Code. Doch genau hier scheitern viele Entwickler. Nicht, weil sie nicht programmieren könnten, sondern weil die Sourcen unverständlich geschrieben sind, oft sogar mit Absicht.
Inhalt |
|
96 | IOCCCThe International Obfuscated C Code Contest: Gesucht wird das schönste undurchschaubare Programm. 99 | Coffee-ShopBildbearbeitung mit dem Java-API von Image Magick. 102 | STL im Shared MemoryObjekte der Standard Template Library gleichzeitig in vielen Prozessen nutzen. 106 | Perl-SnapshotEine ausgefallene Kombination: Kasinospiel und Quantenphysik. |
Wenn sie deinen Code verstehen, brauchen sie dich nicht – das behauptet zumindest die Programmierer-Anleitung “How to write unmaintainable code”[1]. Mit einem deutlichen Augenzwinkern beschreibt dieser Essay Hunderte von Techniken, die den eigenen Job sichern. So geschriebener Code sieht zwar einfach und übersichtlich aus, die verborgenen Fallen sind dafür um so teuflischer. Sie sorgen dafür, dass außer dem Originalautor niemand die Zusammenhänge versteht, er scheitert selbst an trivialen Änderungen.
Das Versteckspiel beginnt bei der Namenswahl. Eine gute Quelle für kreative Bezeichner sind Bücher wie “20001 Namen für ein Baby”, aber auch einzelne Buchstaben, Akronyme oder absichtlich falsch geschriebene Wörter bewähren sich. Besonders fies: identische Namen für grundverschiedene Aufgaben verwenden. Verräterischer ist es, wenn eine Methode das Gegenteil von dem berechnet, was ihr Name andeutet. Gezielter Unfug gelingt auch gut mit Define- und Typedef-Anweisungen.
Tausend Techniken
Die komplexen Sprachen wie C++ bieten ein wahres Arsenal an Techniken, um Code völlig unverständlich zu gestalten. Beliebte Spielwiesen sind überladene Methoden, die je nach Klasse völlig unterschiedliche Aufgaben erfüllen. Mit überladenen Operatoren sind besonders elegante Tricks möglich.
Ein ganzes Kapitel geht auf Kommentare ein, schließlich ist falsche Dokumentation schlimmer als überhaupt keine. Der erste Tipp lautet hier: “Lüge in den Kommentaren. Du musst nicht einmal aktiv lügen, verzichte einfach nur drauf, die Kommentare anzupassen, wenn sich der Code ändert.”
Das Kapitel “Coding Obfuscation” verweist an erster Stelle auf Obfuscated-C-Contests: Die Teilnehmer treiben es hier auf die Spitze und schreiben Quellcode, dessen Layout künstlerischen Ansprüchen genügt und dessen Funktionsweise ohne zusätzliche Tools praktisch nicht zu ermitteln ist. Dennoch funktionieren diese Programme, wie der folgende Artikel anschaulich belegt.
Perl genießt bereits den Ruf, sich besonders für unverständliche Programme zu eignen. Das CPAN-Modul Quantum::Superpositions führt eine völlig neue Variante ein: Hier nehmen die Variablen gleichzeitig mehrere Zustände an. Die Idee dafür stammt aus der Quantenphysik. So kann es durchaus passieren, dass »if (a==23 && a==42)« wahr ist … – der Perl-Snapshot verrät, dass das Modul auch sinnvolle Aufgaben erledigt.
Infos |
|
[1] Roedy Green, “How to write unmaintainable code”: [http://mindprod.com/unmain.html] |
Programmierer-Software |
|
Versionsnummern der aktuellen stabilen Releases am 16.10.2003 und Änderungen gegenüber dem Vormonat. Skriptsprachen Guile 1.6.4 Object Rexx 2.3.3 Perl 5.8.1 PHP 4.3.3 Python 2.3.2 Ruby 1.8.0 Tcl 8.4.4 Java Blackdown 1.4.1-01 IBM Java2 SDK 1.4.1 Kaffee 1.0.7 Sun SDK 1.4.2_01 Compiler Binutils 2.14 Clisp 2.31 Free Pascal 1.0.10 GCC 3.3.1 GForth 0.6.2 GNU Pascal 2.1 Intel C++ 7.1 Libraries Coin 2.1.0 FLTK 1.1.4 glibc 2.3.2 glut 3.7 GTK+ 2.2.4 libpng 1.2.5 libsdl 1.2.6 libxml 2.5.11 Mesa 5.0.2 OpenSSL 0.9.7c QT 3.2.2 wxWindows 2.4.2 zlib 1.1.4 Debugger Code Medic 1.1.3 DDD 3.3.7 GDB 6.0 Insight 5.3 Mpatrol 1.4.8 Valgrind 20031012 Build-Tools Autoconf 2.57 Automake 1.7.8 Libtool 1.5 GNU Make 3.80 SWIG 1.3.19 IDEs Anjuta 1.0.2 Code Crusader 3.0.3 C-Forge 3.5 CodeWarrior 6 Eclipse 2.1.1 Emacs 21.3 KDevelop 2.1.5 Kylix 3 Motor 3.2.4 Source-Navigator 5.1.4 VIDE 2.0 VIM 6.2 XEmacs 21.4.14 |





