„Ich lasse mich von Fakten nicht beirren!“

15.03.2012

„Ich lasse mich von Fakten nicht beirren!“ – so lautet ein (mehr oder weniger running) Gag aus meinem Bekanntenkreis über Menschen, die auch dann noch auf ihren Ansichten beharren, wenn das Gegenteil längst bewiesen ist. Aller Witzigkeit zum Trotze gibt es diese wirklich und in aller Regel pflegen sie keine großen Bemühungen sich zu verstecken. Ich frage mich, wie es wohl wäre, als solch ein Mensch zu leben, kann es aber nicht nachvollziehen. Natürlich irre ich mich wie jeder andere auch bisweilen, aber lerne daraus. Eine Minderheit (hoffentlich) ist dazu allerdings nicht in der Lage, wobei ich nicht entscheiden kann, ob sie nicht wollen (warum?) oder tatsächlich nicht können.

Erst kürzlich hatte ich wieder eine solche Begegnung. Aber der Reihe nach. Es gibt eine Firefox-Erweiterung namens „Binnen-I be gone“. Diese entfernt das bisweilen in Texten verwendete, den üblichen Rechtschreibregeln zuwiderlaufende Binnen-I, z.B. in „SchülerInnen“, und ersetzt das Wort durch das generische Maskulinum, z.B. „Schüler“.

Technische Kritik an einem solchen Projekt kann man auf unterschiedliche Art und Weise üben (Liste natürlich nicht vollständig):

  1. Man reicht einen Patch ein. Insbesondere bei freier Software (laut Addon-Seite steht die Erweiterung unter GNU GPL v3) gerne gesehen.
  2. Man übt sachliche Kritik, die man auch dem Urheber mitteilt, damit dieser eine Chance hat, Verbesserungen vorzunehmen.
  3. Man lästert, ohne dem Autor der Software Bescheid zu geben, in hämischer Art und Weise über die Umsetzung.

dT ~ dieTilde {°°} – ich werde im Folgenden nur „dieTilde“ schreiben – scheint weder mit Intention noch Qualität der Erweiterung zufrieden und entscheidet sich für Variante 3.

Dabei schreibt sie zur Qualität unter anderem:

Mit dem Nicht-Benutzen von Sprachkonstrukten wie Schleifen und Variablentypen wie Arrays, gepaart mit dem Missverständnis regulärer Ausdrücke, hast du uns nämlich etwas serviert, was wir Programmier_innen gar nicht leiden mögen:

Spaghetti-Code.
Pfui.
Setzen.
6.

Dazu gab es eine Anmerkung eines klugen Kommentators:

Zum Spaghetti-Code – im von dir selbst verlinkte Wikipedia-Artikel steht im allerersten Satz:

Spaghetticode ist ein abwertender Begriff für Software-Quellcode, der komplexe und verworrene Kontrollstrukturen aufweist.

Die Betonung liegt dabei auf komplexe und verworrene Kontrollstrukturen, ein Mangel solcher, insbesondere bei einem relativ kleinen Skript wie dem kritisierten, kann daher natürlich kein Spaghetti-Code sein.

Nun könnte die Autorin des Artikels natürlich einfach zugeben, dass sie mit dieser Bezeichnung daneben lag. Es handelt sich nur um eine Marginalie, die grundsätzliche Kritik an dem Code ändert sich dadurch nicht. Eine andere Möglichkeit ist, stur darauf zu beharren, dass es eben doch Spaghetti-Code ist. DieTilde entschied sich für Letzteres. Es folgte eine kurze Diskussion, die mit einem trotzigen Das tue ich nicht. (bezogen darauf, dass sie den Begriff anders verwendet als üblich) und der Nicht-Freischaltung mindestens einer weiteren Antwort endete.

Doch natürlich konnte dieTilde das Ganze nicht auf sich sitzen lassen, sie war sauer (oder ist es vielleicht immer noch):

Und ja: ich bin sauer.

(Zu finden fast am Ende des Beitrags)

Daher konnte sie sich wohl auch nicht verkneifen, vier Links „wahllos“ auszuwählen, bezüglich dessen, was Spaghetti-Code ausmacht:

Und übrigens (wahllos ausgewählt): Spaghetti-Code ist nicht unbedingt Spaghetti-Code.

Deutlich sieht man, dass der vermeintlich kluge Kommentator wohl im Unrecht war. Oder doch nicht? Folgen wir mal den Links:

Copy Paste Programming
Auf eine Beschreibung, was Copy-Paste-Programmierung ist, folgt dieser Satz:

This works, and it's a great way to increase the total number of Lines of Code that you are able to produce, but it results in Spaghetti Code, Technical Debt, and is probably the biggest way in which the Don't Repeat Yourself principle is violated.

Dort steht also nicht, was Spaghetti-Code ist, sondern nur, dass Copy-Paste-Programmierung dazu führt. Glücklicherweise ist unter „See Also“ ein Link zu Spaghetti Code, dort steht:

(…), Spaghetti Code refers to that has a tangled and hard to follow structure, especially one in which following the actual flow of the program is difficult.

Damit wären wir wieder bei den komplexen und verworrenen Kontrollstrukturen, was die Aussage des klugen Kommentators bekräftigt.

DRY vs. WET und The New Spaghetti (eigentlich zwei Artikel)
In DRY vs. WET heißt es:

Historical Note: Spaghetti code originally referred to the overuse of GOTO (or branch) statements in FORTRAN or Assembler programs, but any program which has a high ratio of Control Transfer statements to Useful Work is really Spaghetti - because it reads like all the code was written on the sides of noodles and then all mixed up.

Auch hier ist es wieder die hohe Rate von Kontrollstrukturen, nicht das Fehlen solcher, die Spaghetti-Code ausmacht.

In The New Spaghetti wiederum wird beschrieben, dass die übertriebene Anwendung des DRY-Prinzips dafür sorgen kann, dass eine riesige Anzahl sehr kurzer Methoden entsteht, so dass vor lauter Methodenaufrufen kaum noch erkannt werden kann, wie überhaupt etwas ausgeführt wird. Auch das bekräftigt nur die bereits bekannte Vorstellung, was Spaghetti-Code ist, nur diesmal in einer etwas moderneren Ausprägung.

Codeigniter - making my controllers more DRY
Spaghetti-Code findet hier nur in den Kommentaren Erwähnung:

@DavidNguyen, it means Don't Repeat Yourself, a pattern where you avoid copypasta spaghetti.

@Esailija repeated code is not necessarly "spaghetti code"

Repeated (and then slightly modified) code is normally called spaghetti code. Or the Big Ball Of Mud antipattern.

Zumindest uneins scheinen sich die Kommentatoren zu sein, was man nun tatsächlich unter Spaghetti-Code verstehen sollte. Interessant ist der Link zum Big Ball Of Mud antipattern von Nummer 3 – dort wird der „Big Ball of Mud“, ein Klumpen unverständlichen und nicht zu entwirrenden Codes, mit Spaghetti-Code gleichgesetzt.

Ich lasse aber dennoch mal ein Unentschieden gelten.

Big Ball of Mud
Greift auf die noch vom vorigen Link bekannte Definition des
Big Ball of Mud
zurück und verweist außerdem auf den Wikipedia-Artikel zu Spaghetti-Code (siehe oben). Ergo bestätigt auch dieser Link, dass der Kommentator mit seiner Kritik Recht hatte.

Insgesamt zeigen von vier „wahllos ausgewählten“ Links mindestens drei, dass es sehr wohl eine gebräuchliche Vorstellung davon gibt, was mit Spaghetti-Code gemeint ist (beim vierten wird es schlicht und ergreifend nicht deutlich) und sie entspricht nicht dem, was dieTilde dafür hält. Insbesondere ist Spaghetti-Code entgegen ihrer Behauptung sehr wohl Spaghetti-Code!

Nun frage ich mich, ob sie ihren eigenen Links nicht gefolgt ist, und daher gar nicht wusste, was dort steht, dann wäre lediglich unklug, in dieser Art auf sie zu verweisen, oder – und das ist, was ich befürchte – sie ist ihnen sehr wohl gefolgt und hält sie für eine Bestätigung ihrer Ansichten. Dann würde sie sich tatsächlich von Fakten nicht beirren lassen.