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.
Da zu befürchten ist, dass dieser Professor aus Erlangen auch nach fünf weiteren Unterrichtsstunden nicht in die Nähe eines konkret ausführbaren Programms vorgedrungen sein wird, rate ich dazu, es mit einer anderen Lehrmethode zu versuchen. Wie wäre es mit einem Pascal-Kurs aus Zürich oder − wenn Englisch auch geht – mit einem Online-Kurs über Scratch?
Ich stehe nach einer, nicht nach fünf Schulstunden, kurz vor der Einführung eines Struktogramms. Ist das nichts?
Man sollte in der Lehre am bleibenden Methodischen und nicht an Progammiersprachen à la Pascal (es soll über 700 geben) interessiert sein. Das Generische ist schwierig genug nicht nur für junge Menschen.
Ablauffähige Programme gibt es für Allesmögliche im Netz. Und Turtle-Progammieren, Scratch etc. ist etwas für den homo ludens. Schön, aber wenn der Ansatz nicht zu mehr reizt, bleibt es ein Spiel. Wenn der Mensch erwachsen wird, interessiert ihn das in der Regel nicht mehr. Das gehört eigentlich ins Fach „erweiterte Gerätekunde“. Das Gerät kommt früh genug und ist mit dem Handy schon da. Das Vorverständnis aber bleibt häufig auf der Strecke. Um das geht es aber! Pädagogik oder Nachhaltigkeitslehre (was bleibt?) im klassichen Sinne wird gefragt. Das ist der Punkt, den ich machen wollte.
H.Wedekind
H.Wedekind
Obwohl es 6500 Sprachen in der Welt gibt, kenne ich niemanden, der sagt, dass es schlecht sei, das Sprechen anhand einer existierenden Sprache zu lernen.
Was dem N hätte aufstoßen müssen, ist dass der P von Mengen redet. Was im wahren Leben normalerweise sortiert wird, sind Folgen. Es kann dieselbe Zahl oder derselbe Name mehrmals vorkommen. Nur endliche Folgen sind von Interesse, allerdings variabel lange.
Lieber Herr Endres,
Wenn man in den Programmiersprachen von ganzen Zahlen oder von ‚integer‘ redet und das tut der P, dann meint man keine Mengen (sets), wie Sie auch mit der Unterstützung Ihrer Enkel annehmen. ‚integer“ sind endliche Folgen, deren Umfang vom jeweiligen Darstellungsformat abhängig ist. Wenn P von Mengen reden würde, wie Sie behaupten, dann müsste der P ja eine Mengenabstraktion durchgeführt haben. Davon ist aber nicht die Rede.
Wir führen eine Abstraktion zu endlichen Mengen zwecks Klärung jetzt vor:
Nehmen wir zwei Folgen an: {a1, a2, a3} und {a2, a3, a3, a1}. Wenn man zur Abstraktion von Folgen zu Mengen schreitet, dann definiert man zunächst sog. mengengleiche Folgen: {a1, a2, a3} = {a2, a3, a3, a1}. Beide Folgen müssen die gleichen Glieder enthalten. Mathematiker und normale Menschen, die über Mengen reden, wollen aber nicht über mengengleiche Folgen reden, sondern über Mengen. Jetzt kommt die Abstraktion zu endlichen Mengen: A (x) sei eine solche Aussage der Mathematiker und auch der normalen Menschen. Man will invariant reden bezgl. aller zu {a1 a2, a3} mengengleichen Folgen. Also in A ( {a1, a2, a3} ) kann in das Argument x jede andere mengengleiche Folge eingetragen werden, ohne dass sich am Wahrheitswert der Aussage etwas ändert (eben invariant). Jetzt sagt man nicht mehr a1 ist ein Glied der Folge a1, a2, a3, sondern a1 ist eine Element der Menge {a1, a2, a3}.
Ihre Ausdrucksweise „im wahren Leben“ ist natürlich wieder eine ungewollte oder bösartige Demagogie. Im wahren Leben gibt es unsortiert Mengen ohne Duplikate in Hülle und Fülle. Alle Relation einer Relationalen Datenbank sind als Untermenge eines kartesischen Produktes Mengen im mathematischen Sinne. Der Mengenbegriff ist ungeheuer ökonomisch. Müsste man doch im Falle von Duplikaten einen speziellen Änderungsdienst für Duplikate einführen („Pfläge“ der Dateien, sagen die Schwaben in ihrem Hochdeutsch).
Was ich hier schreibe, müssten Ihre Enkel doch in der Schule eigentlich gelernt haben. In einer logischen Propädeutik kommt das vor. Abstraktionslehre können die aus dieser Schule aus dem Effeff.
Ehe alle Schüler einschlafen oder Papierflieger starten, warum glauben Sie, dass man Programmieren ohne Programmiersprachen lehren soll? Sehr viele Sprachen mit Mengen als Datentyp gibt es nicht. SQL ist ein Sonderfall.