Marc Chéhab ist Informatiklehrer an der Kantonsschule Wettingen. Anhand von eigens formulierten Fragen führt er uns durch die Welt der Maschinensprachen.
Wieso gibt es mehrere Programmiersprachen?
Aus einem ähnlichen Grund, wieso es auch sonst mehrere Sprachen gibt: Durch Raum und Zeit haben Menschen immer wieder Sprachen geschaffen und weiterentwickelt, um Probleme zu lösen, mit denen sie konfrontiert waren.
Als beispielsweise Tim Berners-Lee anfangs der 1990er am CERN in Genf die Grundlagen des modernen Webs entwickelte, suchte er nach einer Möglichkeit, eine damals revolutionär neue Art von Dokument zu beschreiben und zu übertragen: Ein Dokument, das mit klickbaren Links vernetzbar war! «Mehr» als nur Text eben, «Hypertext»!
Das Ergebnis war HTML, die Hypertext Markup Language, die die Struktur jeder Webseite beschreibt, die Sie je besucht haben, und HTTP, das Hypertext Transfer Protocol, mit dem jede dieser Seiten übertragen wurde.
Beides sind zwar keine eigentlichen Programmiersprachen, aber sie veranschaulichen den Prozess der Sprachentstehung – und jetzt wissen Sie, dass diese Grundsteine des «World Wide Web» am CERN gelegt wurden.
Was sind denn «echte» Programmiersprachen?
Nicht jede Sprache, die auf Computern verwendet wird, ist automatisch eine Programmiersprache. Eine echte Programmiersprache erlaubt es, mit logischen Befehlen Abläufe zu steuern, Entscheidungen zu treffen und Daten zu verändern. HTML beschreibt nur, wie ein Dokument gegliedert ist, und HTTP definiert bloss den Kommunikationsablauf zwischen Server und Client – deswegen gelten sie nicht als Programmiersprachen.
Ein Computer nutzt unzählige grössere und kleinere solche Sprachen, die spezifische Probleme lösen. Auch echte Programmiersprachen gibt es zuhauf – je nach Zählart Hunderte oder Tausende. Ein Schüler der KSWE hat letztes Jahr als Maturarbeit eine neue erschaffen!
Am populärsten sind rund ein Dutzend Allzweck-Programmiersprachen. Diese könnte man in einer Reihe sortieren, je nachdem wie nahe sie dem Menschen oder der Maschine sind.
• Menschennah: Sprachen wie Python und Javascript sind intuitiv relativ gut verständlich und flexibel. Man kann bereits mit wenig Wissen schöne Dinge bauen. Damit das möglich ist, muss allerdings einiges an Mehraufwand betrieben werden, um die menschennahe Sprache für die Maschine brauchbar zu interpretieren.
• Maschinennah: Sprachen der C-Familie oder Rust sind viel technischer und ohne Vorwissen kaum einsetzbar. Diese Sprachen greifen dem Menschen viel weniger unter die Arme. Man kann so zwar die volle Leistung eines Computers direkt nutzen, kann aber auch leichter Fehler machen und muss viel mehr über die Maschine wissen.
In Wettingen lernen wir im Grundjahr Informatik Python. Vergleichen wir ein Miniprogramm in Python und in C: Wir wollen die Zahlen 10, 11 und 12 in einer Liste speichern, dann zwischen 10 und 11 die Zahl 42 einfügen, und das Resultat in der Konsole ausgeben.
In Python ist das Programm drei Instruktionen lang, wie auf Deutsch und Englisch auch (nach # in grün stehen Kommentare zum Verständnis):

In C müssen wir hingegen weit mehr Instruktionen schreiben, um dem Computer genau zu sagen, wie er das tun soll (nach // in grün stehen Kommentare zum Verständnis):

Python ist also deutlich kürzer und mit wenig Vorwissen gut verständlich. Ein Mensch würde das Python-Programm schneller und fehlerfreier verstehen, schreiben und ändern können. Beim C-Programm hingegen hätte man ohne Vorwissen keine Chance!
Die Krux ist, dass für den Computer das Gegenteil gilt: Das C-Programm ist viel näher an den tatsächlichen Maschinenoperationen. Bei Python wurde eine ganze Architektur von Hilfsprogrammen gebaut, damit diese wenigen Zeilen Code für die Maschine brauchbar interpretiert werden können, ohne dabei die Einfachheit und Flexibilität der Sprache zu verlieren. Doch diese Architektur wird das Programm nie so effizient in Maschinenoperationen übersetzen können, wie wir unser C-Programm geschrieben haben.
Nehmen wir gleich die erste Operation als Beispiel: Wir erstellen in C direkt eine Art Liste aus Zahlen mit vier Positionen, weil wir unsere Absicht für das Programm kennen. Aber der Python-Interpreter weiss nichts davon! Anstatt einer Liste aus Zahlen baut er deswegen im Speicher ein kompliziertes Datenkonstrukt, damit er später auch Wörter und andere Objekte in der Liste abspeichern könnte – obwohl das in unserem Fall völlig unnötig ist. Auch dass die Liste letztlich vier Elemente brauchen wird, kann er gar nicht wissen, ohne das Programm auszuführen. Er baut deswegen das Datenkonstrukt so, dass die Anzahl Elemente variabel verändert werden könnte.
Diese Datenstruktur könnten wir in C auch implementieren, aber wir müssten sie einfach selbst bauen. Vernünftigerweise würden wir das in unserem Fall nie tun, weil wir erkennen, dass es unnötig kompliziert und ineffizient wäre.
Kurzum: Die Einfachheit und Flexibilität von Python werden in Rechenleistung bezahlt. Das ist der Grund, wieso C-Programme typischerweise deutlich effizienter ausgeführt werden – oft Dutzende Male schneller!
Was glaubst du, ist die grösste Herausforderung für Schülerinnen und Schüler, wenn sie eine Programmiersprache erlernen?
In meiner Erfahrung ist es vor allem die Syntax, die am Anfang herausfordert – also die formalen Regeln, wie Python geschrieben sein muss, damit der Computer das Programm versteht. So wie man bei einer neuen Fremdsprache erst ein Gefühl für Satzbau und Grammatik entwickeln muss, lernt man auch beim Programmieren allmählich, wie die Bausteine zusammenpassen.
Zur natürlichen Sprache gibt es aber einen gewaltigen Unterschied: Unsere Programme liest am Ende kein Mensch, sondern der Computer – und der ist ein ausgesprochen pingeliger Korrekturleser. Fehlt irgendwo ein Komma, bricht er sofort ab und weigert sich partout weiterzulesen. Auch wenn Python oft als die Sprache mit der schönsten oder elegantesten Syntax gehandelt wird, führt kein Weg daran vorbei, sie zu üben.
Was ich dabei im Unterricht zu vermitteln versuche, ist ein offener Umgang mit dem Umstand, dass unsere mentale Kapazität beschränkt ist. Es ist völlig normal, dass man ohne Übung und ohne Hilfe einen fehlenden Doppelpunkt auf Linie 22 übersieht. Man muss Strategien und Hilfsmittel finden, um seine wertvolle Kopfarbeit fokussiert einsetzen zu können. Deswegen verwenden wir professionelle Programmierwerkzeuge, die ähnlich einer Rechtschreibprüfung solche Syntaxfehler rot markieren.

Wo fehlt wohl der Doppelpunkt?
Welches ist deine Lieblingsprogrammiersprache und was zeichnet diese in deinen Augen aus?
Meine zurzeit stärkste Sprache ist wohl Typescript, weil ich gern Webapps baue – wie z.B. mein interaktives Unterrichtsskript auf informatikgarten.ch. Webdevelopment verbindet Programmieren direkt mit kreativem Design und einem interaktiv nutzbaren Resultat, das mag ich sehr.
Bildschirmaufnahme des interaktiven Unterrichtsskripts auf informatikgarten.ch
An der Sprache selbst gefallen mir die eleganten Vereinfachungen. Man spricht hier von «syntaktischem Zucker»: Wenn eine Programmiersprache Schreibweisen anbietet, die eigentlich komplizierte Abläufe einfach und für Menschen intuitiv zusammenfassen. So kann man beispielsweise zwei Wörter addieren, um sie zusammenzuhängen, oder man kann Informationen aus komplexen Datenstrukturen mit den richtigen Symbolen einfach extrahieren. All das erleichtert das Leben ungemein.
Beispiel: Eine Hilfsfunktion auf nur einer Linie definiert – wie schön!
Was gefällt dir am Programmieren?
Programmieren ist eine Art Spiegel für unser Denken. Wenn mein Programm nicht das tut, was ich will, dann meist, weil ich einen Denkfehler gemacht habe. Wenn ich die Programme von Schülerinnen und Schülern anschaue, sehe ich gewissermassen ihre Gedanken – und ihre Logikfehler.
Programmieren ist einmalig insofern, als dass man seine Gedanken speichern und weiterbenutzen kann, selbst wenn man sie bereits vergessen hat! Man löst ein kniffliges Problem einmal, speichert den Ablauf als Unterprogramm, und kann es auf Lebzeiten verwenden, selbst wenn man die Logik der Lösung längst nicht mehr weiss. Würde man das Menschen vor zweihundert Jahren erzählen, würden sie vielleicht denken, das sei eine Art Magie.
Man kann das auch so sehen: Sobald man seine Gedanken in ein Programm übersetzt hat, hat man Zugang zu einer schier unendlichen Rechenleistung, die unsere Gedanken für uns ausführt.
Welches ist der Befehl (in Form einer Tastenkombination auf dem Computer) den Du am liebsten verwendest und weshalb?
Ich schreibe Notizen in Markdown in einem Programm namens Obsidian. Nun habe ich das so eingerichtet, dass ich die Inhalte meines Unterrichtskripts auf informatikgarten.ch direkt in Obsidian schreiben kann. Mit Ctrl+Shift+G kann ich dann die Veränderungen hochladen («git push»), was wiederum auslöst, dass die Webseite mit den neuen Inhalten aktualisiert wird. So kann ich im Zug beispielsweise letzten Änderungen vornehmen, bevor ich vor die Klasse stehe – und die gesamte Arbeit, daraus eine Webseite zu machen, läuft vollautomatisch ab und wird mit Ctrl+Shift+G ausgelöst.
Links: Inhalte in Obsidian, rechts: die Webseite
Worüber kannst du dich mit einer Informatikollegin bzw. einem Informatikkollegen besser unterhalten als mit einer Freundin oder einem Freund?
Wie in vielen MINT-Fächern ist es schön, dass die Informatik eine Tiefe in der objektiven Realität besitzt, die prinzipiell für alle Menschen zugänglich und transzendent ist. Ich kann mich also mit irgendwelchen Personen über vertiefte Fragen der Informatik unterhalten, was mir grosse Freude bereitet. Besonders schön finde ich, dass dabei eine sehr egalitäre Kultur entstanden ist. Es wird über alle sozialen Kategorien und Grenzen hinweg über die Sache geredet – und gescherzt. Oft geschieht das online mit Personen am anderen Ende der Welt, die ich gar nicht kenne.
Speziell unter Programmierern werden elegante Lösungen und Automatisierungen oft sehr geschätzt. Diese Einstellung hat mitunter irrwitzige Auswüchse: Es kann gut sein, dass ich zwei Stunden darauf verwende, einen Arbeitsablauf zu automatisieren, den ich in dreissig Minuten manuell erledigt hätte und nie wieder gebrauche. Ich weiss nach einer Weile, dass das eigentlich keinen Sinn ergibt – aber deswegen aufhören...?
Letztlich kann man sich auch nur unter Fachpersonen darüber unterhalten, was in der Schweiz im Bereich der Informatik alles läuft und schiefläuft. Ich weiss beispielsweise von einem Labor in einem renommierten Schweizer Spital, wo Mitarbeitende vor rund einem Jahr angewiesen wurden, gewisse Befunde bitte per Fax weiterzuleiten. Per Fax! Da steigt mein Blutdruck gleich um zehn Punkte...
Was hat dich schon sprachlos gemacht?
Eine Schülerin entschied sich kurz vor einer Prüfung bei mir, stattdessen einer Freundin in Not zu helfen, und die Prüfung nicht abzulegen. Als ich danach wieder vor die Klasse stand, musste ich mich kurz sammeln. Das hat mich echt beeindruckt. (Natürlich konnte sie die Prüfung nachholen.)



