1) Ein Albtraum
Dieser Tage erwachte ich aus einem Albtraum. Ich war im Traum von einer hohen Stelle beauftragt worden, auf Sekundarstufe 1 Programmier-Unterricht zu erteilen. Schweißgebadet wurde ich wach und war froh, dass der Traum nicht wahr war. Das 300 m von mir entfernt liegende Gymnasium kam im Traume hoch und die Klasse, in der ich vor Jahren als Besucher schon einmal war, erschien vor meinen Augen. Alle Informatikmittel standen bereit. Die Bildungscloud im Sinne eines „Software as a Service (SaaS)“ stand zur Verfügung und keiner musste sich mehr um Software kümmern. Natürlich hatte ich als Tagträumer schon häufiger Mal über einen Programmier-Unterricht in Schulen nachgedacht. Deshalb auch dieser ungewollte Zugriff auf mich im Nachttraum. Warum nur gerade dieses neue Fach „Programmieren“ und nicht Mathe oder Englisch? Das wäre doch viel leichter. Ich hatte auch zu viel über die Wichtigkeit des Programmier-Unterrichts in der Presse gelesen. Eine Bundesministerin hatte sogar in ihrem Nachahmbedürfnis von einer zentralen Bedeutung eines Programmier-Unterrichts gesprochen. Das blieb offensichtlich nicht ohne Tiefenwirkung. Freud lässt grüßen. Zudem stamme ich aus einer Lehrer-Familie.
Ich stand also im Traum vor einer koedukativ gemischten Klasse der Sekundarstufe 1, schaute in gespannte, jugendliche Gesichter, machte aus Verlegenheit meine Späßchen und war dankbar, wenn gelächelt wurde. „Programmieren ist Symbolverarbeitung, Symbole das sind Zeichen, die einen Sinn haben und die wir also verstehen können“, so begann ich. Man nickte. Um herauszufinden, was die Klasse so über Zeichenverarbeitung schon weiß, griff ich auf das Buchstabenrechnen in der Mathematik zurück und schrieb an die Tafel:
(a + b)2 = ? Natürlich bekamen wir das zustande, das Überkreuz-Multiplizieren. Mit vereinten Kräften stand dann an der Tafel das Ergebnis = a2 + 2ab + b2. Dass man a und b schematische Buchstaben nennt, die fest aber in definierten Grenzen frei gewählt werden können, wussten sie nicht. Aber wieso sind a und b dann keine Variablen, kam als Frage. Jetzt saß ich schon in einer gewissen Verlegenheit. Schematische Buchstaben stehen für etwas z.B. a = 4 und b = 6. Die Zahlen ‚4‘ und ‚6‘ sind Instanziierungen (instances), oder man sagt auch Ausprägungen der Schemata bzw. der schematischen Buchstaben a und b. Instanziierungen müssen in der modernen Programmierung als Ausprägung eines Schemas bekannt gemacht werden. Man sagt nicht Schema, man sagt in der Programmierung Typ, was dasselbe ist. Also bei uns: a und b sind vom Typ „integer“ oder ganze Zahl: (…-3, -2, -1, 0, 1, 2, 3, …). Variable werden mit Buchstaben vom unteren Ende des Alphabets bezeichnet, z.B. x und y, und stehen eigentlich für nichts. Statt ‚3x‘ kann man auch ‚3 .‘ schreiben. Der Punkt ‘.‘ heißt dann Leerstelle oder Auslassung. Der Punkt ‚.‘ steht da, um zu erinnern, dass da eigentlich noch etwas hingehört. „Muss denn eine Variable auch von einem gewissen Typ sein?“ wurde ich gefragt. Ja, doch war meine Antwort. Denn wenn ich für die Variable x = 10 einsetzen will, muss ich das sagen. Ich muss immer vorher sagen, was ich weiß oder annehme. ‚Nichts‘ für eine Variable x ist also nicht ganz richtig. Wollen wir mal sagen, bei einer Variablen habe ich nichts fest in der Hand, es fließt einem durch die Finger, bis man etwas greift, z.B. die 10.
Nun dachte ich im Traum, das logische Vokabular, das in den Programmiersprachen vorkommt, muss doch verfügbar sein. Z.B.: „Wahr (W), Falsch (F), Wenn… Dann (→), Und (∧), Oder (∨), Nicht (¬), Für alle (∀), Für einige (∃) etc.“ . Dann kam aus der Klasse der Protest: „Logik haben wir nie gehabt.“. Ich wachte vor Schreck auf. Mein Traum war zu Ende. Arithmetik operiert mit Zahlen, Logik mit Gedanken. Was soll aus uns dann werden, ohne Gedanken? Das war also kein Traum, sondern ein Albtraum. Ich schlief nach einer halben Stunde wieder ein. Aber dann kam er wieder der Traum. Jetzt in einer ganz anderen Form, denn der Dialog in der Klasse hatte es mir offensichtlich angetan.
2) Ein dialogisches Verhältnis zwischen Nutzer und Programm.
Ich schlief wieder. Da saßen sie wieder im Traum vor mir, eigentlich interessierte Schüler, die einen Lehrer fordern, nicht im langweiligen Disziplinarischen, sondern im Fachlichen. Da standen sie wieder an der Tafel die schematischen Buchstaben a und b vom Typ „integer“.
Ich fing wieder an zu reden. Es gibt doch jetzt zwei Personen, fuhr ich fort, die im Dialog zueinander stehen, wie ihr und ich. Mich nennen wir mal P für Programmierer und Euch nennen wir N für Nutzer. Jetzt kommt eine eigenartige Redeweise für N und P, die etwas verwirrend ist, sich aber eingebürgert hat und wichtig ist. Ihr sagt als N, als Nutzer a = 4. Das nennt man eine Instanziierung (oder ein Beispiel), im Englischen „instance“. Man sagt auch „4 ist eine Ausprägung des Schemas a oder des schematischen Buchstabens a“. Statt „instanziieren“ sagt man auch „aktualisieren“, das Schema a wird durch die Instanz 4 aktualisiert.
Das ist alles auf der Nutzer-Seite, auf der N-Seite. Was tut der P, also ich? Ja der P setzt a, das Schema in die Welt und zwingt alle seine Instanzen (Ausprägungen) z.B. ganze Zahlen zu sein. Wenn die Instanzen das nicht sind, sagt das Schema des P zu den Instanzen des N, dann gehört ihr nicht zu mir. Mit anderen Worten: Die Instanzen, die Ausprägungen werden schematisiert oder in unserem Fall auf einen ganzzahligen Vordermann gebracht. Sonst gibt es einen Fehler. Also:
- P schematisiert Instanziierungen (Ausprägungen) nach den Vorschriften des Schemas a. („generic act“, englisch). Das ist der große „Knackpunkt“, auf den wir zusteuern. Programmieren oder Schematisieren verlangt „Generisches Denken“, und wer kann das schon, nicht unter den Heranwachsenden, sondern auch unter den anderen Zeitgenossen, die verstärkt nunmehr im Politischen Programmierunterricht fordern? Die Antwort, die wir jetzt schon parat haben, lautet: Wahlfach: ja, Pflichtdach: nein, sonst haben wir im „Programmieren“ ein noch schlimmeres Stolperfach als die Mathematik. „Gerätekunde“ und „Gerätehandhabung“ ist hingegen ein Fach, das solchen Begrenzungen nicht unterliegen sollte.
- N instanziiert (aktualisiert) ein Schema a nach seinen Vorschriften. („single act“, englisch). Das tun auch alle iPhone-Benutzer.
(NB: Dass P und N sich in einem Dialog unterhalten, ist klar. Sie unterhalten sich über Instanziierungen (Ausprägung). Die Idee, es so darzustellen, stammt vom Prof. Kuno Lorenz aus Saarbrücken. Schauen wir mal in sein Buch „Dialogischer Konstruktivismus“. Das steht auf Seite 32. Ich habe diesen Text in kleiner Schrift nachgetragen als ich wieder wach war. Um Gottes willen kein Plagiat, ihr wisst doch, was das ist?)
3) Ein Beispiel aus der Sortierung
Sortierverfahren gehören zu den am besten erforschten Verfahren der Informatik und sind tatsächlich in jedem Programmier-Unterricht vorzufinden. Jeder hat schon mal einen Stapel von Spielkarten nach einem Sortierbegriff der Karten (z.B. Wertigkeit) sortiert, mehr oder weniger systematisch. Jetzt muss man es fertig bringen, an einem Beispiel, an einer Instanziierung oder Ausprägung, die Sortierung systematisch durchzuführen.
Wenn ich eine Menge von a’s habe, die ich unterscheiden muss, dann tut man das wie in der Mathematik durch Anbringen eines Index i. Statt a schreiben wir jetzt für eine Menge von a‘ s:
a(0), a(1), a(2), …, a(i), …. , a(n).
Aus unserem Sortierbeispiel auf Youtube entnehmen wir für die 10 a’s die folgende Instanziierung:
a(0) = 3, a(1) = 0, a(2) = 1, a(3) = 8, a(4) = 7, a(5) = 2, a(6) = 5, a(7) = 4, a(8) = 9, a(9) = 6
Und jetzt wird auf Youtube von einer rumänische Volkstanz-Gruppe mit 10 Tänzern getanzt in sortierender Absicht. Für jedes a einen Tänzer. Das Verfahren, nach dem getanzt wird, das Schema also, das dahinter steckt, nennt man Sortieren durch Einfügen (insertion sort), ein sehr bekanntes Sortierverfahren unter vielen. Schauen wir uns das mal an. Das ist beste Pädagogik, merke ich auch im Traum. So etwas Schönes gab es zu unserer Zeit noch nicht.
Das geht ja wunderbar nach Schema F. Nach wiederholter Anwendung des Schemas, das man erkennen muss, also „Sortieren durch Einfügen“, liegt das sortierte Ergebnis vor, das dem Schema genügt:
a(0) = 0, a (1) = 1, a(2) = 2, a(3) = 3, a(4) = 4, a(5) = 5, a(6) = 6, a(7) = 7, a(8) = 8, a(9) = 9.
Frage: Wie pack ich das, das Schema, das dahintersteht? Wie pack ich das Generische, die Gattung, das Allgemeine, nicht bloß am Beispiel kleben. Klar ist, dass ich von links nach rechts wandere und links von meiner jeweiligen Position nur schon vorsortierte Zahlen stehen. Zwei Bereiche werden also unterschieden, ein vorsortierter Bereich und ein noch unsortierter Bereich.
Ich wache auf, sage den Schülern aber noch, wenn ihr mich wiedersehen wollt, um das Schema hinzuschreiben, dann sagt es mir. Weil es generisch wird, wird es nicht ganz so einfach. Volkstanz-Gruppen zu zuschauen, ist angenehmer. Generisches Denken lernt man in der Logik.
PS: Die Lösung für unser generisches Problem, das Schema, findet ihr als Struktogramm unter „insertion sort“ in dem folgenden Link. Schaut euch das schon mal an. Das muss natürlich beim nächsten Mal systematisch entwickelt werde. Das nehmen wir uns vor.