Gefällt dir dieser Artikel?

Humor für Informatiker: ein IT-Witz erklärt

erschienen in der Kategorie Software, am 14.04.2018
Schnatterente
Man sagt ja, dass ein Witz, den man erklären muss, kein guter Witz ist …

Aber was soll's, ich mach's heute trotzdem mal, weil von einem Leser die Bitte per Mail rein kam, ich möge doch mal die Logik hinter diesem Bild erklären:
falsch programmierte Roboter sind gefährlich
Was sehen wir hier?
Scheinbar falsch programmierte Roboter, die gegen die Robotergesetze verstoßen, indem sie Menschen Schaden zufügen.

Was hat es mit dem Quellcode auf sich?
Um den Witz zu verstehen, braucht man natürlich grundlegende Programmierkenntnisse. Es gibt hier im gezeigten Quellcode eine Variable (isCrazyMurderingRobot), die festlegt, ob es sich um einen irren, mordenden Roboter handelt oder nicht. Wird die Variable auf wahr (engl. "true") gesetzt, dann soll der Roboter Menschen töten. Ist sie hingegen als falsch (engl. "false") definiert, soll er nett zu Menschen sein.

Warum töten die Roboter ihre Erfinder?
Auf den ersten Blick sieht im Quellcode alles gut aus, denn die besagte Variable ist ja auf den Wert "false" gesetzt. Somit sollte also keine Gefahr von den Robotern ausgehen. Warum also töten sie ihre Erfinder?
Die Antwort lautet: Weil der Programmierer einen recht typischen Flüchtigkeits- oder auch Anfängerfehler gemacht hat. Die Anweisung
if (isCrazyMurderingRobot = true)

überprüft nicht, ob der Wert der Variable isCrazyMurderingRobot auf "true" gesetzt ist, sondern setzt diesen selbst auf "true" und wertet ihn anschließend aus, was zur Folge hat, dass die Roboter die kill()-Methode ausführen. Blöd für die Menschen.

Richtigerweise hätte der Programmierer
if (isCrazyMurderingRobot == true)

in die Anweisung schreiben müssen. Dies hätte den Wert nur verglichen und ihn nicht neu definiert.

Der Witz zeigt sehr schön, dass ein fehlendes Gleichheitszeichen in der Informatik böse, ja manchmal sogar tödliche Folgen haben kann.

Geschnatter

6 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
Mark, am 14.04.2018 um 21:01 Uhr
Da der Programmierer nicht nur

if(isCrazyMurderingRobot)

geschrieben hat, wohl tatsächlich hier eher ein Anfänger- als ein Schlüsselfehler.
Tom, am 14.04.2018 um 21:49 Uhr
oder

if (true = isCrazyMurderingRobot)

dann fällt sowas beim Kompilieren auf.
der Fragensteller, am 14.04.2018 um 21:50 Uhr
Danke für die ausführliche Erläuterung! Ohne dieses Blog würde ich wohl dumm sterben. ;)

Eine Frage habe ich aber noch: Warum funktioniert das überhaupt mit dem einfachen Istgleich? Also könnte man das nicht irgendwie softwaremäßig unterbinden, dass das geht?
Antwort: Dass diese Syntax so funktioniert, ist gewollt und bringt in manchen Fällen Vorteile. Man kann damit kompakteren, besser lesbaren Code schreiben und in einigen Fällen auch den Speicherverbrauch der Software minimieren.

Bei dem Beispielcode im Bild oben, muss man aber vielleicht noch dazu sagen, dass die meisten Compiler wohl zumindest eine Warnung ausspucken würden, da sie beim Übersetzen des Quellcodes merken, dass da in jedem Fall true im if-Statement steht und der else-Zweig somit nie genutzt wird.
Anonym, am 14.04.2018 um 23:10 Uhr
"Der Witz zeigt sehr schön, dass ein fehlendes Gleichheitszeichen in der Informatik böse, ja manchmal sogar tödliche Folgen haben kann."

--> oder ein vergessenes oder zu viel gesetztes Ausrufezeichen!
Daniel, am 16.04.2018 um 18:31 Uhr
Eine Anmerkung: Es gibt aber auch Sprachen (Python), die diese Syntax konsequent verbieten und hier nur das == erlauben.
Ulli, am 18.04.2018 um 17:59 Uhr
Das Gleichheitszeichen ist aber auch gut für Nicht-Anfängerfehler. Soll es ein > sein, oder doch ein >= ? Das ergibt typischerweise einen off-by-one Fehler. Den kann man auch noch steigern: for(unsigned i=100;i>=0;i—)