Wieso Programmieren mehr als angewandte Mathematik ist

Der folgende Artikel ist im Jahresbericht 2016/17 der Kantonsschule Zürcher Oberland erschienen (in leicht überarbeiteter Form).

Forschung heisst immer auch, sich überraschen zu lassen und festzustellen, dass man völlig falsch liegt. So musste ich im Laufe meiner Doktorarbeit über den Informatikunterricht eingestehen, dass zunächst meine eigenen Überzeugungen nicht stimmten. Doch alles der Reihe nach! Beginnen wir unsere Reise doch mit einer alten philosophischen Frage…

Woher weisst du eigentlich, was eine Katze ist? Könntest du definieren, was eine Katze ist? Und wenn eine Katze ein Tier mit vier Pfoten ist, hört dann eine Katze auf, eine Katze zu sein, wenn ihr eine Pfote fehlt? Eine der bekanntesten Antworten auf diese Frage stammt vom griechischen Philosophen Platon. Besonders schön wird seine Vorstellung in Jostein Gaarders Buch „Sophies Welt“ beschrieben.

Wenn du Kekse bäckst, so verwendest du dafür sicher eine Ausstechform. Diese Ausstechform hat den Umriss eines Sterns oder eines Tannenbaums. Und eigentlich sollten damit lauter gleiche Kekse entstehen. Nach dem Backen sind sie aber doch alle ein klein wenig anders. Einigen Sternen fehlt eine Zacke, da gibt es Bäume ohne Stamm oder gar in zwei gebrochene Stücke. Und doch erkennen wir sie alle als Sterne und Tannenbäume. Platon würde sagen, wir erkennen alle Kekse als Sterne und Tannenbäume, weil wir die Ausstechform kennen, mit denen sie gebildet wurden. Analog dazu weisst du, was eine Katze ist, weil es die ideale Vorstellung einer Katze gibt. Sozusagen die Ausstechform, nach der alle Katzen gebildet werden. Gemäss Platon gibt es also ewige, unsterbliche und damit unveränderliche Ideen. Die Katze an sich als Idee. Alle Katzen in der realen Welt sind dann lediglich Abbilder dieser göttlichen Idee. Du magst damit nicht einverstanden sein und vielleicht zu Recht einwerfen, dass wir wissen, was eine Katze ist, weil wir schon so viele Katzen gesehen haben, dass wir eine grosse Erfahrung aufgebaut haben. Eigentlich geht es hier aber gar nicht um die Philosophie. Oder Katzen. Es geht um die Informatik und die Mathematik. Aber ohne Platon, seine Kekse und die Katzen könnte ich dir das gar nicht richtig erklären.

Die Mathematik, das ist die Wissenschaft der Ausstechformen, der ewigen, göttlichen, abstrakten Ideen und Wahrheiten. Der schön mit Zirkel konstruierte Kreis, den du in der Schule gezogen hast, ist kein mathematischer Kreis, sondern nur ein Abbild davon. Eine Imitation der Idee eines perfekten und makellosen Kreises. Ich muss noch einmal betonen: Die Mathematik beschäftigt sich mit ewigen, unsterblichen Ideen und Wahrheiten. Ohne diese Erkenntnis wird wenig wunderbares aus meiner Geschichte folgen.

Ganz selbstverständlich arbeiten wir auch beim Programmieren mit mathematischen Formeln, mit Variablen und Funktionen. Wir lassen den Computer etwa die Lösungen zu einer Gleichung berechnen, oder lassen ihn Kreise zeichnen, indem wir mit Linien und Winkeln spielen. Die Verbindung zwischen der Mathematik und dem Programmieren ist nur allzu offensichtlich.

Es ist damit keine Überraschung, dass der Programmierunterricht bei uns Teil der angewandten Mathematik ist. Die Schülerinnen und Schüler müssen beim Programmieren einfach ihr Wissen und Können aus der Mathematik auf den Computer übertragen. Was eine Variable oder eine Formel ist, das wissen sie ja schon längst. Eigentlich ganz einfach.

Woher aber stammen dann die vielen Fehler in den Programmen der Schülerinnen und Schüler? Nicht die Tippfehler, die wir alle immer wieder machen. Nein, da gibt es ganz grundsätzliche Missverständnisse darüber, was ein Programm ist und wie ein Computer arbeitet und funktioniert.

Also habe ich genauer hingesehen. Zunächst einmal habe ich ein paar dutzend Schülerprogramme gesammelt, dann wurden daraus hundert und inzwischen sind es einige Tausend. Im Gegensatz zur Arbeit des Lehrers, wo ich die Arbeiten der Schülerinnen und Schüler nach dem gesetzten Massstab bewerte, ging es hier in minuziöser Detektivarbeit darum, die Ideen und Vorstellungen der Schülerinnen und Schüler nachzuvollziehen. Kleinste Hinweise im Programm verraten manchmal sehr viel über die dahinterliegenden Absichten und Ideen.

Eines der grössten Missverständnisse der Schülerinnen und Schüler bestand darin, dass sie ihr Wissen und Können aus der Mathematik direkt im Programmieren angewendet haben. Sie haben genau das gemacht, was ich von ihnen erwartet habe. Und genau das wiederum hat dazu geführt, dass es so ganz und gar nicht funktioniert hat.

Damit schliessen wir den Bogen und kommen zu den Keksen und Katzen zurück. Während sich die Mathematik mit den Ausstechformen, den ewigen Ideen und Wahrheiten beschäftigt, arbeitet der Computer immer mit konkreten Exemplaren. Er kennt keine ewigen Wahrheiten, hat keine Einsicht in die tiefen philosophischen Sphären dieser Welt. Der Computer kennt nur die Kekse. Er kennt nur Beispiele von Katzen, weiss aber nicht, was eine Katze an sich ist. Er zeichnet uns Abbilder von Kreisen und hat doch keine Vorstellung eines perfekten mathematischen Kreises. So wie die Mathematik in den Ideen und Wahrheiten verwurzelt ist, so ist der Computer ein Kind der realen Welt.

Selbst wenn wir mit Variablen und Formeln arbeiten, so gelten doch grundlegende Gesetze der Mathematik plötzlich nicht mehr. a+a ist nicht das selbe wie 2a, ob ich a+b oder b+a rechne macht einen Unterschied. Dass wir beim Programmieren mit mathematischen Variablen zu rechnen scheinen ist ein Trugschluss. Der Computer rechnet erst dann, wenn wir jede einzelne Variable durch eine konkrete Zahl ersetzen. Er vereinfacht keine Ausdrücke, sondern zählt Kieselsteine ab, um uns dann zu sagen, dass 3+4 als Ergebnis 7 ergibt.

Aus Sicht der Mathematik ist die Rechnung 3+4 = 7 eine ewige Wahrheit, etwas das offensichtlich gilt, schon immer gegolten hat und immer gelten wird. Aus Sicht des Computers ist 3+4 eine Aufgabe, die er jedes Mal von Neuem lösen muss. Es gibt keine ewigen Wahrheiten, sondern nur Zahlen und Objekte, die jetzt, in diesem Moment, existieren, und im nächsten Moment vielleicht schon wieder verflogen und vergessen sind.

Interessanterweise führt gerade diese Flüchtigkeit der Zahlen und Objekte auf dem Computer wiederum zu neuen Erkenntnissen und ewigen Wahrheiten. Jede Lösung eines Problems muss der Computer einzeln durchrechnen und jede einzelne Rechnung braucht Zeit und Energie. Wir können damit die Schwierigkeit eines Problems anhand der Rechenschritte abschätzen, die der Computer braucht, um das Problem zu lösen. Je schwieriger das Problem, umso länger muss ein Computer rechnen, bis er zur Lösung kommt.

Bestimmt magst du dich aus dem Mathematikunterricht daran erinnern, dass sich jede natürliche Zahl in Primzahlen zerlegen lässt. 15 ist zum Beispiel das Produkt aus 3 und 5. Dass sich jede natürliche Zahl in Primzahlen zerlegen lässt ist eine feste, mathematische Wahrheit. Aus Sicht der Mathematik sind die Primzahlen 3 und 5 sozusagen schon in 15 vorhanden. Wir wissen mit Bestimmtheit, dass sie da sind: Wir müssen sie nur noch sehen.

Wenn wir nun ein Programm schreiben wollen, das die Zerlegung in Primzahlen für eine bestimmte Zahl vornimmt, dann stellen wir aber plötzlich fest, dass es sehr lange dauert, bis der Computer die Antwort gefunden hat. Er muss tatsächlich alle Möglichkeiten einzeln durchrechnen! Für grosse Zahlen kann das Millionen von Jahre dauern. Aus der Sicht der Informatik ist diese einfache mathematische Wahrheit also ein schwieriges Problem: Es lässt sich nur mit einem grossen Aufwand an Zeit und Energie effektiv lösen. Kein Wunder also, verwenden die Banken solche Zerlegungen in Primzahlen für die Verschlüsselung.

Wenn Schülerinnen und Schüler beim Programmieren dem Computer eine Gleichung vorgelegt haben, dann sind sie davon ausgegangen, dass der Computer die Mathematik dahinter versteht, dass er eine Gleichung umformen kann. Sie haben angenommen, dass der Computer die Primzahlen in einer Zahl direkt sehen kann. Wenn du deinen Computer richtig programmierst, dann kann er tatsächlich Gleichungen lösen, etwa indem er die Gleichung für alle möglichen Zahlen einmal durchrechnet. Mit ganz konkreten Zahlen. Aber Mathematik, die versteht er deswegen noch immer nicht.

Und damit schliesst sich unsere Reise. Indem ich versucht habe, die Sichtweise meiner Schülerinnen und Schüler zu verstehen, musste ich meine eigenen Überzeugungen schliesslich aufgeben und habe dabei entdeckt, dass das Programmieren nicht eine Anwendung der Mathematik ist. Vielmehr ist es ein erster Schritt hin zur Informatik, zu einer Wissenschaft, die sich mit der Schwierigkeit und Lösbarkeit von Problemen beschäftigt. Und damit tut sich eine neue Welt auf.