Denken lernen durch Informatik, oder: Die Maulwurfswette

[Vorbemerkung: Ich hatte versprochen, einen Blog-Artikel darüber zu schreiben, warum es mir so wichtig ist, dass alle Schüler Informatikunterricht erhalten, warum ich also für ein #PflichtfachInformatik eintrete.  Aber wie es so geht: The tale grew in the telling… Was ihr vor euch habt, ist deshalb nur der erste Teil einer mehrteiligen Serie.  Gut daran ist, dass die Sache dadurch etwas interaktiver werden kann – schließlich ist das hier das Internet!  Wenn ihr also — was mich sehr freuen würde — hier kommentiert, wird dieses Feedback in die zukünftigen Teile einfließen.  Aber zuerst bin ich dran.  Also: Vorhang auf!]


 

Eine Reihenhaussiedlung.  Charlie klingelt bei Ada, einer Informatiklehrerin.  Sie öffnet.

Charlie: Ah, Ada, schön, dass ich dich zuhause antreffe.  Du hast du doch sicher einen Augenblick Zeit, nicht?

Ada: Hallo, Charlie. Eigentlich wollte ich gerade im Garten etwas Wichtiges erledigen… aber bitte, komm rein.

Charlie: Danke. Ich wollte dir nur erzählen, dass ich jetzt, glaube ich, verstehe, warum du so vehement für Informatikunterricht in der Schule eintrittst:  Die Feiertage mit meinen Nichten und Neffen… grausam…

Ada: So, du verstehst mich… Na, ich fürchte, ein Augenblick wird für unser Gespräch nicht ausreichen.  (Nimmt eine riesige Pfeffermühle aus dem Regal.) Aber komm doch einfach mit in den Garten; wir können uns dort unterhalten, während ich den Rasen maulwurfsicher mache.

Charlie: Wie? Mit der Pfeffermühle? Na, egal.  Meine Nichten jedenfalls… Also die Jugendlichen von heute schauen von ihren Smartphones ja gar nicht mehr hoch.  Total kommunikationsunfähig, nur noch körperlich anwesend, ansonsten in der Matrix.  Früher, als man mit den Dingern nur telefonieren konnte, ging’s ja noch.  Aber inzwischen sind das ja richtige Computer.  Und ich seh’s jetzt ein: Jemand muss den Kids beibringen, wie man die Dinger sinnvoll verwendet.   Also Ja zum Pflichtfach Informatik!

Sie betreten den Garten.

Ada: Charlie, du hast recht und liegst doch ganz falsch. Medienbildung, wie du sie dir vorstellst, ist natürlich wichtig.  Aber mir geht es um etwas noch Grundsätzlicheres.

Charlie: Du meinst, die Schüler müssen erstmal lernen, wie so ein Computer aufgebaut ist?

Ada: Nein, nein, das meine ich überhaupt nicht! Du weißt schon, dass es in der Informatik nicht um Computer geht?

Charlie: Nicht?

Ada: Nein! Der Computer ist nur das Werkzeug.  Zugegeben, ein komplexes, extrem vielseitiges Werkzeug.  Aber entscheidend ist, was der Mensch vor dem Computer denkt und wie er denkt.

Charlie: Ach, jetzt fängst du gleich mit solchen Haarspaltereien an.  Es läuft doch auf jeden Fall darauf heraus, dass man vor der Kiste hängt.

Ada: Also, erstens verbringen Informatiker, egal ob in der Industrie oder der Wissenschaft, viel weniger Zeit allein vor dem Computer, als du glaubst — aber dazu später mehr.  Zweitens wird das beim Schulfach Informatik ganz genauso sein.  Und drittens: Du bist doch Musik-Experte, nicht?

Charlie: Ich liebe Musik! Von Bach bis zu den Beatles, von Metallica bis Mozart, von van Beethoven bis Van Halen, von…

Ada: (unterbricht) …ist gut, ist gut, ich hab’s kapiert: Musik ist dein Ding.  Musik, die Kunst des Instrumentenbaus, die Wissenschaft von den Stereoanlagen und Hifi-Türmen,  die Lehre von den Plattenlabels und…

Charlie: Was redest du da? Das ist doch alles nicht das, was Musik ausma… Oh. Verstehe.

Ada: Ein berühmter Informatiker soll mal gesagt haben: „In der Informatik geht es genauso wenig um Computer wie in der Astronomie um Teleskope.“  Ein kluger Satz…

Charlie: …und weniger als 140 Zeichen lang!

Ada:  Oder in einer Variante speziell für dich: „Der Computer spielt für den Informatiker die gleiche Rolle wie für einen Komponisten das Orchester.“  Natürlich ist das Orchester wichtig, damit die Musik hörbar wird.  Entscheidend aber sind für den Komponisten sein Denken in musikalischen Strukturen und seine Kreativität.  Genauso ist es in der Informatik.

Charlie: Na wenigstens in Bezug auf Musik scheinen wir uns ja einig zu sein.  Aber du willst  doch nicht ernsthaft etwas so nüchtern-technisches wie Informatik mit Kunst vergleichen, oder?

Ada: „Nüchtern-technisch“ – wenn ich das nur höre, werde ich schon sauer.  Genau dieses Bild von der Informatik ist ja der Anfang des ganzen Übels.  Kein Wunder, dass die meisten Schüler und v.a. die Schülerinnen schon vergrault sind, bevor sie überhaupt eine Chance hatten zu erfahren, was Informatik wirklich ist.

Charlie: Aber was ist sie denn nun wirklich? Und vor allem: Wenn sich Informatik weder mit Smartphones noch mit Computern beschäftigt, die ja nun wirklich für den Alltag eine große Rolle spielen – dann klingt mir das nicht nach einem Fach, das alle Schüler haben müssten.  Würde es nicht ausreichen, wenn diejenigen Informatikunterricht wählen, die mal Programmierer oder sowas werden wollen?  (murmelt) Die Nerds eben?

Ada: Ja, das ist die entscheidende Frage. Meine Antwort darauf: Nein, das reicht nicht, aus vielen Gründen nicht.  Der für mich wichtigste ist, etwas verkürzt gesagt: Informatik kennenlernen, heißt Denken lernen!

Charlie: Oha, steile These!  Die musst du aber erstmal begründen!

Ada: Ich will dir das gerne erklären. Aber jetzt… (nimmt die Pfeffermühle und beginnt auf dem Rasen zu mahlen) …muss ich erstmal, etwas gegen die Maulwürfe unternehmen.

Charlie: Wee Tee Eff?

Ada: Ich habe ein Verfahren entwickelt, um Maulwürfe zu vertreiben.  Du weißt ja, ein paar Straßen weiter sehen manche Gärten bereits aus wie frisch umgepflügt.  Aber ich bin mir sicher, dass man sie fernhalten kann, wenn man den Rasen mit einer ordentlichen Dosis Pfeffer bestäubt.

Charlie: Das meinst du jetzt nicht ernst, oder? Einen größeren Quatsch hab ich ja noch nie gehört! (Murmelt) Ich weiß, wer hier erstmal „Denken lernen“ sollte…

Ada: Wir können ja wetten.

Charlie: Mit Vergnügen.  Wie genau hast du dir das vorgestellt?

Ada: Indem du versucht, meine Theorie zu widerlegen.  Praktischerweise habe ich gestern schon eine Nachbarschaftsversammlung einberufen, um meine Idee den Besitzern der umliegenden Gärten, Anna, Bobo, Coco und Didi vorzustellen…

Charlie: Deine Nachbarn heißen Anna, Bobo, Coco und Didi?

Ada: Ja. Wieso?

Charlie: Die Namen kommen mir irgendwie seltsam vor.

Ada: Weiß nicht, was du meinst.  Na jedenfalls habe ich mein Konzept präsentiert und die anderen wollten drüber nachdenken, ob sie es mal ausprobieren.  Naja, bis auf Didi: Er hat gleich gesagt, dass er die Idee für Schwachsinn hält.

Charlie: Ist mir nicht unsympathisch, der Herr.

Ada: Anna hingegen war gleich Feuer und Flamme, hat sich sofort meine Mühle mit Peugot-Mahlwerk geborgt und ihren Garten ordentlich eingepfeffert

Charlie:  Was ist mit den anderen beiden, Bobo und Coco?

Ada: Mit denen habe ich seitdem noch nicht wieder gesprochen. Aber ihre Gärten grenzen direkt an meinen an.  Schauen wir doch einfach mal über die Zäune. Oh je, Bobos Garten sieht übel aus.  Da war aber mehr als ein Maulwurf am Werk…

Charlie: Dann ist das auf der anderen Seite der Garten von Coco? Der ist aber gepflegt! Finde ich fast schon steril.  Jedenfalls waren hier keine Maulwürfe!

Ada: Jetzt aber zurück zu unserer Wette. Ich schlage vor, wir machen es so: Du sagst mir, welche meiner Nachbarn wir auf jeden Fall besuchen und befragen müssen, um eventuelle Verstöße gegen meine Theorie festzustellen.  Wenn du den oder die richtigen nennst, hast du gewonnen, sonst ich. Einverstanden?

Charlie: Kein Problem. Wir gehen einfach zu allen.  Oder nee, muss ja gar nicht sein, es reicht ja eigentlich wenn wir nur zu… beziehungsweise vielleicht… Äh, warte mal kurz…

Ada: No pressure. Denk ruhig in Ruhe nach.

Charlie: Irgendwie hab ich den Verdacht, hier geht es gar nicht mehr um Maulwürfe und Pfeffer… Die Geschichte dient in Wirklichkeit dazu, mir irgendwas zu demonstrieren, oder?

Ada: Ich? Glaubst du etwa, ich habe die Maulwurfshügel selbst aufgeschüttet?

Charlie: (verlegen) Das nicht gerade… aber das alles hier… deine Nachbarn mit den komischen Namen… das hat sowas Unwirkliches.  Ich bin ganz durcheinander.  Ich glaube, ich möchte, bevor wir losgehen, erst nochmal alle Informationen in einem Diagramm festhalten.

Ada: Eine hervorragende Idee! Auch in der Informatik ist die Wahl der passenden Repräsentation für ein Problem oft schon der halbe Weg zu seiner Lösung.

Das folgende Diagramm entsteht:

maulwuerfe

Charlie: Ah, das hilft mir wirklich. Ich glaube, ich weiß jetzt, wen wir befragen müssen, um deine Theorie zu überprüfen.

Ada: Prima, aber bitte nur diejenigen, deren Aussage uns wirklich weiterhilft, sonst ziehen sie uns gleich wieder in ausschweifende Diskussionen über Mathematikunterricht oder Bürgerrechte im Digitalzeitalter hinein.

Charlie: Schon klar, wir befragen so viele Nachbarn, wie nötig, aber so wenige, wie möglich.

Ada: Nicht, dass du mich falsch verstehst: Meine Nachbarn sind alle total nett.  Leider sind sie auch alle Lehrer — d.h. immer auf Sendung.  Da kommt man so schnell nicht vom Zaun weg. Eigentlich würde ich sie dir auch gerne mal vorstellen; die haben nämlich auch alle was zum Schulfach Informatik zu sagen.  Ich weiß, was mir machen: Ich lade euch alle hier im Garten zum Kaffee ein. Und wer die Wette verliert, muss den Kuchen spendieren.

Charlie: Einverstanden. Komm mit, wir müssen hier entlang…

Ada: Unterwegs kann ich dir ja von meinem großen Idol Seymour Papert erzählen.  Die informatische Denkweise, die ich meinen Schülern beibringen will, hat er mal  als „die Essenz intellektueller Aktivität“ bezeichnet.

Charlie: Klingt ja gut, aber vorerst bleibe ich skeptisch.  Versuch ruhig weiter, mich vom Sinn des Informatikunterrichts zu überzeugen.  Das könnte vielleicht sogar klappen — deine Maulwurfstheorie hingegen werde ich schon an der nächsten Gartenpforte falsifizieren!

Ada: Ah, Popper gelesen? Sehr gut. Dann ist dir natürlich klar, dass du die Wette evtl. einfach verlierst, weil die Maulwürfe noch gar nicht da sind.  Auf diese Weise will ich natürlich nicht gewinnen. Deshalb: Wenn du mich zu genau den Nachbarn führst, bei denen du meine Theorie widerlegen könntest, gebe ich mich geschlagen und du gewinnst.
Hübsches Kleid übrigens, das du heute trägst. Neu?

Charlie: Danke! Mein Freund hat es mir zum Geburtstag geschenkt. Wieso fragst du?

Ada: Ach, nur so.

Sie gehen los.


[Fortsetzung folgt. (Aber wahrscheinlich dauert’s ein bisschen; das Kerngeschäft ruft.)  Bis dahin freue ich mich auf Kommentare hier. Zu welchem oder welchen Nachbarn würdet ihr gehen? (Wer den Ursprung dieser Wette kennt, bitte nicht spoilern!]

 

Das Wunschblog

In meiner Kindheit in den 1980er Jahren gab es im ZDF den Wunschfilm, bei dem die Fernsehzuschauer per TED darüber abstimmen durften, welcher von drei Spielfilmen am Samstagabend gezeigt werden sollte.  Großes basisdemokratisch-partizipatives Fernsehen.  Video-On-Demand 1.0.   Ich habe es geliebt! (Obwohl niemand in meiner Familie auf die Idee gekommen, da womöglich selbst mal anzurufen.)

Die Musik — „dadadam dadadam!“ — zweitverwertet übrigens seitdem die jährliche SWR1-Hitparade, auch so ein Relikt meiner Jugend.

So etwas möchte ich hier auch mal versuchen.  Dadadam dadadam!

Der Leserkreis dieses Blogs ist ja leider recht überschaubar.  Da wäre es doch schade, wenn diejenigen wenigen, die den Weg hierher finden, auf Artikel stießen, die sie gar nicht interessieren. Erst recht, weil ich zwar eine lange Liste von Themen habe, über die ich gerne bloggen würde, aber so selten dazu komme.  Wäre doch schade, wenn ich dann eins aussuche, das keinen interessiert.  Also mache ich es lieber wie das ZDF damals und frage einfach nach. Meine Damen und Herren, liebe Kinder, ich präsentiere Ihnen:

Den Das  ZIDS-Wunschblog! 

Und so läuft’s (dadadam dadadam):  Unten stelle ich euch drei Themen vor. Abstimmen darf jeder, egal ob alter oder neuer Leser, und kostenlos ist’s auch.  Sagt einfach per Kommentar hier im Blog oder per Antwort auf den folgenden Tweet, welches Thema euch am meisten interessiert.  (Kompliziertere Vorting-Systeme à la edchat.de überlege ich mir erst, wenn mehr als 20 Leute mitmachen — und das will ich erst sehen, bevor ich es glaube…)

Für dieses erste (hoffentlich nicht letzte) Wunschblog habe ich drei informatikbezogene Themen ausgewählt, wegen der Stammleserschaft.   Und hier kommen sie.  Dadadam dadadam:


Thema 1: Informatik für alle

Soll Informatik als verpflichtendes Fach in unseren Schule unterrichtet werden? Diese Frage wird (in meiner Ecke des Internet) viel diskutiert und zwar durchaus kontrovers.  Manche wollen in erster Linie mehr Medienpädagogik, andere kämpfen für genuin informatische Inhalte, wieder andere wollen nur das „Coding“ in den Vordergrund stellen.  Der eine sorgt sich um die fehlenden IT-Spezialisten in der deutschen Wirtschaft, der andere um Rechte und Mündigkeit der Bürger in der digitalen Gesellschaft.  Und es gibt nicht wenige Menschen, die finden, dass die Welt auch ohne Informatikunterricht schon digital genug ist.
Ich habe dazu selbstverständlich eine Meinung und eine Position, fast schon eine Mission, die ich schon lange mal verschriftlichen wollte. Jetzt wäre, dadadam dadadam,die Gelegenheit dazu.


Thema 2: Musik machen mit JythonMusic

Vor längerer Zeit habe ich eine Blog-Serie zu, nennen wir es mal, algorithmischer Musiktheorie gestartet – und sie nach dem zweiten Artikel nie wieder fortgesetzt.  Das lag nicht nur an fehlender Zeit, sondern auch daran, dass der Weg Python → LilyPond → Midi-Datei → Töne viel zu umständlich für echtes „Musizieren“ war, so dass mir (trotz vieler Ideen) ein wenig der Spaß vergangen ist.  Inzwischen gibt es aber JythonMusic, ein tolles Projekt, bei dem man (sogar ohne viel zu installieren) sofort loslegen und Musik machen kann.
In den Herbstferien lag ich ein paar Tage im Krankenhaus, war aber fit genug, um endlich mal wieder (ablenkungsfrei) zu programmieren. Ich bzw. mein Computer bzw. wir beide zusammen haben dabei einige interessante Sachen „komponiert“.  Wenn ihr also zu der illustren Gruppe von Leuten gehört, die sich sowohl für ein bisschen Musiktheorie als auch Programmierung interessiert, lasse ich euch, dadadam dadadam, gerne daran teilhaben.


Thema 3: Funktionaler Programmierspaß in Java 8

Java ist als Einstiegsprogrammiersprache in der Schule eine Katastrophe! (IMNSHO). Unter anderem weil ich dachte, dass sähen alle so, habe ich vor drei Jahren an dieser Stelle vermutet, dass „wir“ in fünf Jahren nicht mehr Java unterrichten werden.  Nun ja, die sind ja noch nicht rum…

Jedenfalls habe ich mich kürzlich etwas peinlich berührt an diese Aussage erinnert: Ich habe nämlich eine Fortbildung zu Java 8 geleitet.  Das war für mein Ziel, Java aus der Schule zu verbannen, wohl eher kontraproduktiv — diente aber auch einem anderen Zweck.  Ich wollte den Kollegen eher zeigen, dass Objektorientierung nicht alles ist, dass Java jetzt endlich auch funktionale Elemente hat und dass das Programmieren in Java damit sogar richtig Spaß machen kann.

Ich kann natürlich hier keine zweitägige Fortbildung reproduzieren, würde euch aber meine Materialien, ein paar verblüffende Beispielprogramme und eine Aktualisierung der Diskussion über Java in der Schule anbieten. Wer also schon länger wissen wollte, was es mit diesen Lambda-Ausdrücken, funktionalen Interfaces und Streams auf sich hat, und auch, ob das für die Schule relevant sein könnte, der möge, dadadam dadadam, für dieses Thema stimmen.


So, und nun hoffe ich auf rege Beteiligung.  Ich lasse die Abstimmung eine Woche laufen, ach, sagen wir doch gleich: bis Weihnachten 2015! Danach gebe ich das Ergebnis hier bekannt und setze mich in den Weihnachtsferien hin und schreibe.

Dadadam dadadam!

Vom Singen

Singen gehört für mich zur Vorweihnachtszeit wie für andere Leute Plätzchen.

Obwohl: Plätzchen sind für mich natürlich auch sehr wichtig im Advent.  Und gesungen wird bei uns in der Familie sowieso zu jeder Jahres- und Tageszeit.

In der Adventszeit aber vielleicht noch ein bisschen mehr.

Deswegen habe ich auch sofort zugesagt, als mich eine Freundin vor ein paar Wochen fragte, ob ich ihren Schulchor im Dezember bei der Aufführung von Bachs Magnificat unterstützen würde.  (Die Männerstimmen sind in Chören fast überall chronisch unterbesetzt, was dazu führt, dass man insbesondere als Tenor umworben und hofiert wird, dass es eine wahre Freude ist. Zu den Proben muss man auch nur kommen, „wenn man es einrichten kann“.  Egal, wenn man das Magnificat vor 15 Jahren zuletzt gesungen hast. Für einen echten Tenor kein Problem.)

Als es jetzt soweit war, hat mich meine enthusiastische Zusage (natürlich) genervt: Eigentlich hatte ich doch viel zu viel anderes zu tun; die Kinderbetreuung blieb, während ich bei Proben und Aufführungen war, wieder an meiner Frau hängen, ich war viel zu müde und schlapp um vier Abende Singen hintereinander durchzuhalten usw.

Aber dann stehst du da und singst. Hörst auf die Sänger neben dir, das Orchester vor dir, musizierst mit ihnen. Bist glücklich.

(Und löst das Problem mit der Kinderbetreuung, indem du zum zweiten Konzert die Familie einfach mitbringst.  Piece of cake — für einen echten Tenor…)

 

 

Gebrauchslyrik

Heute mal was anderes.

Herr Rau schreibt drüben immer so hübsch abwechslungsreich über dieses und jenes. Hier hingegen sieht es aus, als ob sich mein Leben nur um Informatikunterricht drehte. Mitnichten.  Deswegen heute mal was Privates.  („Immer schön persönlich. Sowas wollen die Leute lesen!“ raunt mir der Chefredakteur ins Ohr.)

Das folgende Gedicht ist während eines Elternsprechabends entstanden, als mich keiner sprechen wollte.  (Doch, am beruflichen Gymnasium gibt’s das.)  Das war sehr praktisch, weil meine Frau am nächsten Tag Geburtstag hatte und ich ihr zum Geschenk noch etwas schreiben wollte…

Jedenfalls: Weil das Ergebnis dieses Abends mir selbst recht gut gefällt, drucke ich es einfach mal ab.  Soll keiner sagen, nur die Deutschlehrer dürften was mit Lyrik machen.

Ich habe dass Gedicht leicht abgeändert, um die Anonymität meiner Frau zu wahren.  Was ich (des Reimes wegen) nicht ändern konnte, war die mehrmalige Verwendung eines sehr bescheuerten Kosenamens, der sich aus seiner ursprünglichen ironischen Verwendung leider total gelöst und verselbständigt hat…

 

Anne Geburtstag 2015

Informatik so unterrichten, wie ich es mir wünsche

(Ich blogge ja nicht mehr. Vive le blog!)

Direkt nach dem Ende des Referendariats hatte ich das große Glück, neben meinem „normalen“ Unterricht als AG-Leiter beim Freiburg-Seminar einsteigen zu können.  Dort können „begabte“ Jugendliche sich intensiv mit Themen aus Mathematik und Naturwissenschaften befassen, freiwillig und ohne Noten, dafür umso begeisterter.

Obwohl das Seminar offiziell nur Mathematik und Naturwissenschaften im Namen trägt, gibt es dort auch Informatik-Kurse.  (Was wären die MINT-Fächer denn ohne Vokal?) Und gerade die Informatik-AGs sind besonders begehrt; wir könnten, gerade für neugierige Anfänger, locker noch ein oder zwei Kurse mehr anbieten, wenn wir dürften.  Dieser Run auf die Informatik ist auch überhaupt kein Wunder — es ist ja nicht so, dass junge Leute nicht neugierig wären auf diese Wissenschaft, diese Technologie, die unser Welt in den letzten Jahrzehnten komplett verwandelt haben.  Nein, die Schüler spüren und wissen, dass Informatik wichtig und spannend ist — nur die baden-württembergische Bildungspolitik gibt ihnen kaum eine reguläre schulische Möglichkeit dazu, sich damit auseinanderzusetzen.

(Es besteht im Augenblick die leise Hoffnung, dass sich daran demnächst doch noch etwas ändert. Aber color me skeptical.)

Jedenfalls ist es für mich eine große Freude, diese jungen Leute, die durch irgendwelche glücklichen Zufälle den Weg zur Informatik gefunden haben, zu unterrichten. In meinem ersten Jahr (2013/14) war das Kursthema noch vom Vorgänger vorgegeben, also haben wir uns mit objektorientierter Programmierung beschäftigt, aber zum Glück ohne die Zwänge eines Lehrplans.  „Programmieren kreativ“ nannte ich den Kurs und es entstanden tolle Spiele und andere Anwendungen dabei.  Am Schluss sprachen wir ein wenig über KI, mein altes Forschungsgebiet, und es wurde beschlossen, das im darauffolgenden Jahr mal genauer anzuschauen…

Was dabei 2014/15 herauskam, könnt ihr in meinem Abschlussbericht nachlesen (vollständiger Text als PDF bei Klick aufs Bild):

Teaser

Ich glaube, dass ich in den letzten beiden Jahren riesengroßes Glück mit meinen Teilnehmern hatte (s. z.B. der letzte Absatz des Berichts).  Da der Kurs in dieser Form wegen des Abgangs der Abiturienten sowieso nicht mehr weiterbestehen wird, habe ich darum gebeten, dieses Jahr eine AG für die Unter- und Mittelstufe anbieten zu dürfen, „Informatik für Programmieranfänger“.

Warum dieser scheinbare Schritt zurück im Anspruchsniveau?

Ich gebe es offen zu: Ich will nicht nur die nerdigen Jungs, die über’s Minecraft-Modden oder die PHP- und JavaScript-Programmierung ihrer eigenen Webseite zur Informatik gekommen sind.  Ich will auch die anderen hellen Köpfe, die sonst immer in der Mathe-AG landen.  Ich will die Musischen, die den Computer als Medium für Kreativität entdeckt haben.  Ich will denen, die einfach Spaß am Knobeln und Problemlösen haben, den Computer als Medium fürs Denken schmackhaft machen.  Insbesondere und ganz explizit will ich versuchen,  Mädchen für das Fach zu begeistern.  Dafür gibt es tausend Gründe, die ich jetzt nicht aufzählen kann und will (ich hab ja keine Zeit mehr fürs Bloggen).

Jedenfalls kann ich mich nicht zurücklehnen und darauf hoffen, dass diese Gruppen sich in der Oberstufe plötzlich in meinen Kurs verirren — die muss man vorher abgreifen und auf den Geschmack bringen!

Deshalb ein Anfängerkurs. Mit Snap! und später vielleicht Python.  (Von mir aus könnte es auch das ganze Jahr Snap! bleiben. Dem Niveau sind in Snap! ja keine Grenzen gesetzt. Mal sehen, wie die Stimmung so ist.)  Bisher läuft es großartig — genau wie in meinen anderen, „etwas weniger begabten“ Klassen, bei denen ich am Anfang des Schuljahres auch immer mit Snap! starte:  Hohe Motivation, viel Spaß, verschachtelte Schleifen innerhalb der ersten 30 Minuten, das erste Spiel innerhalb einer Doppelstunde.  Frust kommt immer erst auf, wenn wir zu Java wechseln müssen.

Bin gespannt, was ich alles machen kann mit meinen schlauen 12-14-Jährigen… Ich freue mich total darauf!

Warum ich nicht mehr blogge

[Edit: Ich habe diesen Artikel gerade in den Aufruf zu einer Blogparade umgewidmet.  Thema: „Wie organisieren Lehrer, v.a. mit Familie, ihre Zeit?“  Die Fragen, die ich mir ständig stelle, gebe ich nun an euch weiter.  Ihr findet sie ganz am Ende dieses Beitrags. Auf Reaktionen freue ich mich!]

Wer sagt, er habe für etwas keine Zeit mehr, meint natürlich immer „Ich setze meine Prioritäten jetzt anders“.  So ist es natürlich auch bei mir — auch wenn es mir leid tut, dass ich mich in den letzten zwei Jahren so komplett aus meinem kleinen, aber umso feineren Internetbekanntenkreis zurückgezogen habe.

Tatsache ist, dass — überraschenderweise! — das dritte Kind genauso viel Zeit und Zuwendung braucht wie das erste und das zweite.  Und obwohl alle drei immer größer und selbständiger werden, heißt das nicht, dass sie mich weniger brauchen.  Eher sogar noch mehr, denn inzwischen arbeitet auch meine Frau wieder.  Erster Grund fürs Nichtbloggen also: Familie sticht alles!

Zweiter Grund: Obwohl ich mich inzwischen durchaus schon als erfahrener Lehrer fühle, bin ich doch noch weit entfernt von Routine und „ich ziehe meinen Unterricht fertig aus der Schublade“ — zum Glück! Außerdem suche ich mir leider so furchtbar gerne immer noch neue Herausforderungen und habe deshalb inzwischen einige schulische Neben- und Zusatzengagements.  (Über die ich eigentlich furchtbar gerne auch mal bloggen würde…)

Beide Gründe zusammen bedeuten: Der Lehrerberuf macht mir sehr große Freude, aber er nimmt fast die gesamte Zeit ein, die ich neben der Familie habe.  Um das zu verdeutlichen, versuche ich mal, den gestrigen Tag möglichst genau zu dokumentieren.

6:30 Uhr: A. und ich stehen auf.  Noch etwas früher wäre zur Stressvermeidung wahrscheinlich besser, aber 6:30 Uhr ist verdammt früh, wenn man es mal wieder nicht vor Mitternacht ins Bett geschafft hat. Außerdem habe ich am Abend vorher die Kinder ins Bett gebracht (A. hatte Elternabend an ihrer Schule) und natürlich vergessen, schon ihre Kleider für den nächsten Tag herauszulegen.  Das wird uns jetzt wertvolle Minuten kosten.

6:45 Uhr: Der Mittlere ist Frühaufsteher, was am Wochenende oft unerwünscht, heute aber sehr praktisch ist: Ich mache ihm einen Kakao, A. bringt seine Kleider und er zieht sich selbständig an.  Super — das läuft nicht immer so reibungslos.  Die Große wird sanft geweckt, kriegt aber kaum die Augen auf und erst recht nicht die Füße aus dem Bett. Dass das mit neun schon so schwierig würde, hätte ich nicht gedacht.  Allerdings liest sie jetzt abends auch manchmal heimlich; vielleicht liegt’s daran.  (Ich schimpfe dann pro forma ein wenig, freue mich aber insgeheim.)  Die Kleine ist jetzt auch wach, tapst fröhlich ins Bad — zum Glück sind wir alle keine Morgenmuffel — und möchte den Grüffelo vorgelesen bekommen.  Als A. und ich versuchen, ihr klarzumachen, dass das heute nicht geht, weil wir alle fünf ganz früh aus dem Haus müssen, ist die gute Laune mit einem Schlag dahin.

7:00 Uhr: Irgendwie haben es doch alle an den Esstisch geschafft, manche mehr (der Mittlere, A.), manche weniger angezogen (die Kleine, die Große, ich).  A. hat sogar geduscht.  Gegessen wird wenig, aber ein Pausenbrot für die Große geschmiert, die Logistik für den Tag nochmal durchgesprochen (Wer holt mittags wann wen wo ab? Wer kocht? Wer hat am Nachmittag was vor und wie kommt er dorthin und wieder zurück?)  Und es wird viel gelacht und gesungen.  Das ist schön, morgens um sieben, und eigentlich möchte keiner gehen.

7:15 Uhr: A.s Schule liegt in unserer Stadt, meine etwas 20km entfernt.  Der Kindergarten (inkl. Kleinkindgruppe) öffnet um 7:30 Uhr.  Wenn A. die beiden Kleinen Punkt 7:30 Uhr dort abliefert, schafft sie es mit dem Rad gerade noch zur 1. Stunde um 7:50 Uhr.  Bei mir ist das nicht drin.  Resultat: Ich fahre mit dem Auto nach W. — und genieße jede Minute: Mein Lieblingsradiosender Deutschlandradio Kultur, absolute Entspannung 20 Minuten lang.  Es stimmt, eigentlich will ich aus Umwelt- und anderen Gründen mehr mit der Bahn fahren.  Aber dann müsste ich um 6:30 Uhr das Haus verlassen und würde die Kinder gar nicht mehr sehen am Morgen.

7:50 Uhr: Der Unterricht beginnt. Heute habe ich nur vier Stunden. Ich habe mein Deputat auf 20 Stunden reduziert, als A. wieder angefangen hat zu arbeiten.  Großartig, dass das so einfach geht im öffentlichen Dienst.  Dass ich die vier Stunden am Stück habe, ist ungewöhnlich und auch nur alle zwei Wochen so.  (Unser Stundenplaner liebt A- und B-Wochen.  Nächste Woche habe ich erst zu 3. Stunde Unterricht, dann 5./6. Stunde frei und 7./8. wieder Unterricht.  Meine Familie hasst A- und B-Wochen.) Ich habe mein Notebook dabei und setze mich nach der 4. Stunde sofort an meinen Schreibtisch im Lehrerzimmer und arbeite irgendwas. (Keine Ahnung mehr was, wahrscheinlich irgendein Problem mit dem elektronischen Klassenbuch, für das ich zuständig bin.  Der Schuljahresanfang liegt schon einen Monat zurück, aber immer noch ändern sich laufend irgendwelche Daten.)

12:30 Uhr: Die Tischnachbarin meint: „Mensch, du kannst aber echt gut arbeiten bei dem Lärm hier.“  Ich will eine flapsige Bemerkung machen („Hier habe ich eben mehr Ruhe als daheim“), lasse es aber und schaue auf die Uhr.  Mist, ich muss doch kochen und dann die Kleinen aus dem Kinderhaus holen.  Das wird knapp.

12:35 Uhr: Ich ertappe mich immer öfter dabei, dass ich auf dem Heimweg SWR2 höre: Klassik, relativ wenige Wortbeiträge, gut um den Adrenalinspiegel nach einem Schulvormittag langsam wieder runterzufahren.  Manchmal stelle ich inzwischen das Radio auch ganz ab. Krass. Aber 20 Minuten ganz allein in völliger Stille, nur mit mir und meinen Gedanken (oder, noch besser, ohne): priceless!

12:55 Uhr: Ich komme zuhause an.  Was ich kochen werde, ist klar. Spaghetti mit Tomatensauce.  Doch, doch, ich kann auch anderes.  Aber ich habe ca. 10 Minuten Zeit, bevor ich zum Kindergarten muss.  Reicht genau, um die Sauce zu machen und sie, während ich weg bin, ein bisschen einkochen zu lassen.  Außerdem gab’s Pfannkuchen, Fischstäbchen und „was mit Gemüse“ diese Woche schon.  Wir schreiben seit einiger Zeit am Wochenende eine Liste aller Gerichte, die wir in den nächsten 7-10 Tagen kochen wollen und kaufen entsprechend ein.  Spart Zeit und Geld beim Einkaufen (weil man seltener geht), ist familiendemokratisch und v.a. stehe ich nur ca. 10 Sekunden vor der Liste und weiß dann sofort, was heute zeitlich und mit den vorhanden Vorräten machbar ist.

12:57 Uhr: Beim Aussteigen treffe ich P. und N., nette Nachbarn und gute Freunde. P. bietet an, unsere beiden Kleinen aus dem Kindergarten mitzubringen, wenn er seine Tochter abholt.  Und plötzlich ist das Leben noch schöner und total entspannt!  Ich habe nun alle Zeit der Welt: 25 Minuten dauert das mindestens bis die da sind, und auch die Große kommt selten vor 13:20 Uhr aus der Schule.  Da kann ich ja, wenn ich mich beeile, wenn die Soße fertig ist und die Spaghetti im Topf sind, vielleicht sogar noch ein bisschen in meinem RSS-Feed lesen… au fein!

13:20 Uhr: Wir sind zu viert. Das Essen ist fertig, aber den Tisch können ruhig die beiden Großen decken (wg. RSS-Feed usw.)!  Machen sie sogar recht anstandslos.  Die Stimmung ist gut.  A.s Wunsch und Regel, dass am Tisch nicht gesungen werden soll, lässt sich in ihrer Abwesenheit vom Vater nicht durchsetzen.  (Schön passiv, so ein Satz im Passiv, nicht?)

13:45 Uhr:  Gerade noch rechtzeitig fällt mir ein, dass die Große um 14 Uhr Flötenstunde hat.  Weil wir keine Helikopter-Eltern sind, hat sie erst gestern abend das erste Mal ein bisschen geübt. Wir setzen uns ans Klavier, sie flötet, ich begleite. Schön klingt das und macht uns beiden Spaß.  Wäre eigentlich toll, wenn sie mehr spielen würde, oder? Ja schon…

13:58 Uhr: Mit dem Roller schafft sie das gerade noch rechtzeitig zur Flötenstunde.

14:05 Uhr: A. kommt. Meine Körperspannung sinkt sofort merklich: Die Frau ist im Haus! Ich trage nur noch maximal die halbe Verantwortung. Noch bevor sie richtig da ist, räumen wir schon die Küche auf.  (In einer Trauansprache hörten wir einmal einen Text, der vom „Liebesspülen“ handelte. Das hat sich uns beiden tief eingeprägt.)

14:45 Uhr: Ich lese den beiden Kleinen vor. A. räumt weiter auf.  (Es gibt immer noch mehr aufzuräumen. Naturgesetz.)  Beim Lesen schläft die Kleine auf meinem Schoß ein. Ha — das bedeutet, sie hatte heute morgen in der Kita doch noch nicht geschlafen. Ich trage sie vorsichtig in ihr Zimmer…

15:10 Uhr: Die Kleine liegt im Bett. Wenn wir Glück haben… und tatsächlich: Kurz darauf sieht der Mittlere durchs Fenster einen Freund und will raus.  Vorlesen kann ich ihm ja später wieder.  Plötzlich sind A. und ich allein — nicht zu glauben!  Wir machen uns einen Kaffee, erzählen uns kurz von unseren Vormittagen und hasten dann an unsere Schreibtische.

16:00 Uhr: Der Mittlere ist wieder da.  Mist, ich habe die letzte Dreiviertelstunde nicht so effektiv genutzt wie A.   Ich bin immer noch so häufig mit Grundsätzlichem beschäftigt, statt konkret vorzubereiten. Heute bin ich mal wieder bei Mark Guzdial gelandet, der vorschlägt, als Informatiklehrer sollten wir mit den Schülern am Anfang zuerst viel mehr Code lesen als schreiben.  Und dabei fällt mir unsere Prüfung im vergangenen Juni ein: Mit einem Kollegen hatte ich eine Prüfungsaufgabe gestellt, in deren erstem Teil die Schüler nur die Bedeutung bestimmter Zeilen in einem bereits fertigen Programm erklären sollten — und das zu einem großen Teil nicht ansatzweise konnten.  Nun war das eine eher schwache Schülergruppe und wir waren zwar enttäuscht, aber auch nicht besonders überrascht.  Erst heute, nach Mark Guzdials Artikel, sehe ich endlich den Elefanten im Raum: Wie sollen sie schreiben, ohne lesen zu können?   Wieso zeige und bespreche ich beim Programmieren so selten eine Musterlösung? Und wenn, warum immer erst hinterher? Ich bin doch sonst so ein großer Freund des Lernens aus „worked examples“. Warum also hänge ich beim Programmieren so am entdeckenlassenden Lernen?   Glaube ich wirklich, dass die Schüler in einer Doppelstunde pro Wochen selbst herausfinden können, wie ein korrektes Programm aussieht (oder ein gutes oder gar ein ästhetisch befriedigendes)?

Antwort: Weil ich das Programmieren so gelernt habe.  Weil ich es geliebt habe und immer noch liebe, am Computer Dinge auszuprobieren, mich von Fehler zu Fehler zu hangeln, mit jedem Refactoring ein einfacheres, abstrakteres, universelleres, schöneres Gebilde zu erzeugen.  Aber es ist natürlich kompletter Quatsch, meine persönliche Faszination auf diese Jungs zu projizieren..  Außerdem hab ich doch auch selbst viel aus den Programmen von anderen gelernt.  Na, jedenfalls gut, dass ich noch gar nicht richtig angefangen hatte, die Stunde für morgen zu planen; die wird jetzt sowieso umgeschmissen: Morgen wird nicht programmiert, sondern die bekommen ein fertiges Greenfoot-Spiel und wir lesen das einfach!  Und gleich nächste Idee: Objektorientierte Programme könnte man doch sogar super mit verteilten Rollen lesen, oder?  Ja, das könnte ich doch so…

16:20 Uhr: Oh. A. hat mich anscheinend schon mehrfach angesprochen.  Der Mittlere sitze jetzt schon seit 20 Minuten bei ihr und sie könne nicht arbeiten.  Außerdem sei es jetzt sowieso Zeit, die Kleine zu wecken.  Stimmt, ich gehe heute mit ihr ins Kinderturnen von 17-18 Uhr.  Also wecken, ihre Kleider zusammensuchen und ihr anziehen (zum Glück ist sie trotz des Weckens schon wieder gut gelaunt aufgewacht — also heute läuft’s wirklich!)

16:30 Uhr: Wir müssen zwar erst in einer halben Stunde dort sein, aber die Vorlaufzeit brauchen wir: Turnschläppchen suchen, Proviant einpacken, Kind zum ersten Mal in diesem Herbst in den dicken Ganzkörperwollanzug einpacken usw.  Was total praktisch ist: Der Mittlere hat zeitgleich ganz in der Nähe Fußball (G-Jugend!). Zwei Fahrten mit einer Klappe also. Die Kleine und ich bringen ihn also erst dort vorbei und düsen dann weiter zum Turnen.

17:00 Uhr: Schön, dass es mir gelingt, mich heute ganz auf das Eltern-Kind-Turnen einzulassen, ohne zwischendrin an die to-do-Liste zu denken.  Klappt nicht immer.

18:00 Uhr: „Eins, zwei, drei, das Turnen ist vorbei. Vier, fünf, sechs, sieben, auf Wiedersehn ihr Lieben.“  Die Kleine isst zwei Kekse, während ich ihr in den warmen Anzug helfe.  Schnell weiter zum Fußballplatz; die Trainer sind auch alle Familienväter und wollen heim.  (Ein hundertfaches Hoch auf alle, die sich noch in Sportvereinen, Kirchengemeinden oder sonstwo engagieren!)  Der Mittlere ist erhitzt, aber glücklich.  Wir kaufen noch Brot — ist seit vorgestern abend aus, aber bisher hatte es noch keiner zum Bäcker geschafft.

18:30 Uhr: Abendessen.  A. hatte — natürlich — während wir weg waren, auch Brot gekauft. Umso besser, wird eingefroren.  Alle sind zufrieden, es war ein schöner Tag.

19:00 Uhr: „Bettfertig machen“, das ist so etwas, für das ich früher weder einen Begriff noch eine Konzeptualisierung hatte. (Sapir und Whorf wären begeistert.) Irgendwann am Abend ging man halt ins Bett (Zähne putzen nicht vergessen).

Heute aber weiß ich, was „bettfertig machen“ ist, nämlich: Durch Bitten, Drohen oder Bestechung bringt man die Kinder dazu sich zuerst aus- und (idealerweise zeitnah) die Schlafanzüge anzuziehen. Dann Zähneputzen – mittlerweile läuft das glücklicherweise ganz gut (der Mittlere hat jahrelang massiven passiven Widerstand geleistet). Dann Vorlesen und/oder Gutenachtgeschichten.  (Als die beiden Großen noch klein waren, hab ich mir jeden Abend eine neue Geschichte für sie ausgedacht! Geht nicht mehr, leider. Ich bin auserzählt.)  Zum Schluss ab in die Betten und Schlaflieder singen.  Für drei Kinder reichen zwei Erwachsene da gerade so.  Und unter einer Stunde ist das ganze Programm kaum zu schaffen.  Natürlich: Wenn es unbedingt schneller gehen muss, geht es auch schneller.  Aber zufrieden sind dann alle nicht.

20:15 Uhr: Die Tagesschau natürlich wieder verpasst. Ist aber besser so, denn vor dem Fernseher würde der Körper sofort runterfahren.  Was nicht passieren darf, denn der ganze nächste Schultag muss ja noch vorbereitet werden.  Leider ist das meinem Körper egal. Sobald ich nur noch für mich selbst verantwortlich bin, schaltet er auf Standby, auch ohne Tagesschau. Egal, los geht’s: Morgen Mathe Oberstufe. Das unterrichte ich zum ersten Mal.  Funktionenscharen und abschnittsweise definierte Funktionen mit dem CAS-Rechner, den ich selbst noch gar nicht richtig bedienen kann.  Naja, ist ja noch früh am Abend…

23:00 Uhr: Ich bin eigentlich soweit fertig, aber zu müde um ins Bett zu gehen.  Außerdem hab ich doch heute mittag (s. 12:57 Uhr) in einem meiner Feeds wieder so was Interessantes gelesen.  Jetzt nach getaner Arbeit, werde ich ja wohl mal…

00:30 Uhr: Mistmistmistmistmistmistmistmistmistmistmistmistmistmistmistmistmist

Nachbemerkung: Gestern war ein guter und schöner Tag, an dem die Work-Life-Balance gestimmt hat!  Das möchte ich ausdrücklich betonen.  Es war eben nur mal wieder ein Tag, an dem absolut keine Zeit für irgendwas anderes war, z.B. Bloggen. Oder andere als organisatorische Gespräche mit A. Oder gar mit Freunden. Oder Sport. Oder Kino.

Es war auch ein Tag — das werden die Lehrerhasser sicher sofort errechnet haben — an dem ich gar nicht so viel gearbeitet habe, sondern ziemlich viel Zeit mit meinen Kindern verbracht habe.  Vormittags recht und nachmittags frei eben.  Sagen wir: von 7:45 Uhr – 12:30 Uhr, von 15:20 Uhr – 16:20 Uhr (das muss zählen!) und von 20:15 Uhr – 23:00 Uhr. Macht 8,5 Stunden.  Ach, eigentlich doch gar nicht so wenig, für eine 80-Prozent-Stelle.  (Aber die Ferien, diese ganzen Ferien! –Ja, stimmt! Ich wollte ja auch gar nicht streiten.) Ich hätte selbst gedacht, dass es weniger war.  V. a. im Vergleich zu den Tagen, an denen A. mir den Rücken freihält, damit ich Zeit habe, gründlich zu planen oder eine Klassenarbeit zu korrigieren oder Klassenlehrersachen zu organisieren oder einfach nur Nachmittagsunterricht habe (ca. 2-3mal pro Woche, je nach… grrr… A- oder B-Woche).  Deswegen sage ich ja, gestern war wirklich ein schöner Tag mit guter Work-Life-Balance.

Was ich eigentlich mit diesem Artikel sagen wollte:  Doch, ich möchte gerne wieder ab und zu bloggen.  Regelmäßig wird’s wohl nicht werden.  Aber ab und zu… ich probier’s!

Noch eine Nachbemerkung: Wir haben das Glück, inzwischen eine Zwei-Lehrer-Familie zu sein. Wie Eltern mit anderen Berufen diese ganze Kinderlogistik auf die Reihe bekommen, ist mir ein Rätsel.

Frage an euch mitlesende LehrerInnen (mit und ohne Familie): Wie macht ihr das? Wie kriegt ihr das hin mit der ersten Stunde und/oder dem Nachmittagsunterricht? Wann kommt ihr abends vom Schreibtisch weg? Gibt es (was ich hoffe!) einen geheimen Trick, mit dem das alles plötzlich ganz easy wird?

Antworten — hier in den Kommentaren oder in einem eigenen Artikel bei euch im Blog — würden mich wirklich interessieren.  Passt auf: Ich erkläre das einfach mal zur Blogparade!  (Keine Ahnung, ob das überhaupt jemand bemerkt.) Schreibt doch auch mal eine typische Tages-Timeline auf, wo’s dabei knirscht und wer dabei leidet… oder wieso das für euch gar kein Thema ist.  Tatsächlich ist ja ein gewisses Luxusproblem, dass Nichtlehrer so gar nicht kennen.

Wo soll ich meine Webseite hosten?

Liebe hier lesende Lehrerinnen und Lehrer,

ich bastele immer mehr Material, das ich meinen Schülern und anderen gerne zur Verfügung stellen würde: Geogebra-Arbeitsblätter, Greenfoot-Programmbeispiele, Musterlösungen für allerlei Arbeitsblätter, demnächst hoffentlich auch mal den einen oder anderen kurzen Screencast (flipped classroom light).  Und eine eigene WordPress-Installation hätte ich ja auch ganz gerne.  Und Joomla, weil ich (was zu erwarten war) auch an der Schule immer mehr bei solchen Sachen mitarbeiten darf soll werde.

Kurz: Ich möchte eine eigene Webseite.  Meine erste!  Ihr wundert euch, aber es stimmt: Ich hab noch nie eine Domain reserviert oder eine Homepage aufgesetzt.  Es gab einfach keinen Grund — an der Uni hatte ich meine persönliche Seite, musste mich aber nur darum kümmern, dass .die Lehrveranstaltungen und die Publikationsliste halbwegs aktuell waren. (Nix CMS übrigens, alles noch hübsch von Hand fluchend ins HTML-File getippt.)

Aber ihr, ihr seid doch alle in solchen Sachen Profis, web- und technikaffine Lehrer 2.0, usw.  Deshalb meine Frage an euch: Wie macht ihr das? Wo hostet ihr? Was sollte der Provider bieten? Wieviel ist euch das wert?

Mit herzlichem Dank im Voraus für eure Tipps verbleibe ich euer

embee

…und plötzlich sind Herbstferien!

Wow, gerade eben war doch noch Juli, zumindest hier im Blog. Und auf einmal… Herbstferien. Ohne ein Lebenszeichen von mir bislang im Schuljahr 2013/14. Was ist los? Woran liegt’s?

Ich bin jetzt ein richtiger Lehrer in seinem ersten richtigen Jahr mit richtig viel Unterricht — daran liegt’s wohl.

Was ich gerade erlebe, müssen wohl alle Lehrer am Anfang durchstehen: Jedes Fach, jede Klasse, jede Stunde ist neu.  In den Stoff muss man sich erst einarbeiten*. Aus der Schublade holen kann man auch noch nichts.  Selbst, wenn man sich von den Kollegen Materialien besorgt, muss man diese sichten, überlegen ob und, wenn ja, wie man sie einsetzen könnte.  Oft genug merkt man erst spät, dass etwas vielleicht für den Kollegen passen mag, aber für einen selbst? Irgendwie doch nicht.

Und so steht vor jeder zu haltenden Stunde die Frage: Versuche ich, „nachhaltig“ vorzubereiten – damit ich eben beim nächsten Mal etwas in der Schublade habe, auf dem ich aufbauen kann? Oder improvisiere ich mich irgendwie durch?

Improvisieren kann ich eigentlich ziemlich gut — wenn ich weiß,

  • wovon ich rede,
  • was ich zu tun habe,
  • wer mein Gegenüber ist.

Momentan sind diese Voraussetzungen leider oft noch nicht gegeben. Vor allem der letzte Punkt ist entscheidend: Mir fehlt oft noch die Intuition dafür, was Schüler wissen (bzw. nicht wissen), können (bzw. nicht können), nachvollziehen (bzw. nicht nachvollziehen) können, d.h. letztlich, was sie von mir brauchen und was nicht. Diesen Mangel an Intuition kann ich im Augenblick nur versuchen durch Vorbereitung wenigstens teilweise zu kompensieren: Wenn ich beim Durchdenken einer Stunde, eines Themas, auf die potentiellen Stolpersteine stoße, kann ich noch eine vorbereitende Aufgabe vorschalten, eine erklärendes Beispiel suchen, eine Warnung geben. Entdecke ich die Stolpersteine erst während des Unterrichts, lerne ich einiges (z.B. hoffentlich die Stolpersteine beim nächsten Mal zu vermeiden), aber meine Schüler habe ich überfordert, frustriert und verwirrt.

(Ich rede hier nicht davon, Inhalte weichzuspülen und den Schülern die Herausforderungen zu nehmen. Ich rede einfach davon, ihnen nicht mit konfusem Unterricht unnötige Hürden in den Weg zu legen.  Mathe und Informatik in der Oberstufe — und nur das unterrichte ich im Augenblick — ist für sie anspruchsvoll genug, auch ohne einen Anfänger an der Tafel.)

Damit ich also irgendwann an den Punkt kommen kann, wirklich flexibel zu sein, reagieren und improvisieren zu können, versuche ich jetzt eben so nachhaltig wie möglich arbeiten.Und so verlasse ich den Schreibtisch nur selten vor Mitternacht**. Aber trotz der späten Uhrzeit gehe ich meistens zufrieden ins Bett — und das zeigt mir, dass der Wechsel an die Schule richtig war.

 

* Für uns Seiteneinsteiger gilt das sicher in besonderem Maße. Ich habe mich in den fast 20 Jahren seit meinem eigenen Abi natürlich sehr viel mit Informatik und Mathe beschäftigt, aber eben nicht auf Schulniveau. Das ist bei der Vorbereitung natürlich ein Nachteil. Aber ganz oft bringt es mir auch Glaubwürdigkeitspunkte im Unterricht, wenn ich den Schülern anschaulich machen kann, dass man Ableiten und Integrieren, Vererbung und Polymorphie sehr gut brauchen kann, wenn man mal einen intelligenten Roboter bauen will!

** Das hat aber auch ganz viel damit zu tun, dass ich privat in einer Lebensphase bin, die sich (um es mal vorsichtig zu formulieren) mit einer kompletten beruflichen Neuorientierung nicht so richtig gut verträgt. Drei kleine Kinder im Haus und nur zwei Erwachsene — da kann sich nicht einer von beiden einfach zwischen, sagen wir, 17 Uhr und 20:30 Uhr aus dem Abendprogramm ausklinken. Wenn derjenige aber oft erst um 16 Uhr aus der Schule kommt, muss er wohl oder übel am Abend noch mal an den Schreibtisch.

Mehr Expressivität wagen

(Dieser Post schließt sich an den letzten zum Thema Snap! an.)qs

In der funktionalen Programmiersprache Haskell gibt es eine berühmte Implementierung des Quicksort-Algorithmus, die nur zwei (!) Zeilen lang ist. Wem Haskell zu exotisch ist, der kann die Idee z. B. in Python so umsetzen:

def qsort(list):
  if not list:
    return []
  else:
    pivot = list[0]
    less = [x for x in list[1:] if x < pivot]
    more = [x for x in list[1:] if x >= pivot]
    return qsort(less) + [pivot] + qsort(more)

In der Nacht vor dem Workshop in München fiel mir ein, dass man diese Implementierung fast direkt nach Snap! übertragen kann, nämlich so:qsHier kann ich leider nicht die schönen list comprehensions aus Haskell oder Python verwenden, sondern nutze die klassische higher-order Funktion filter (in Snap! heißt sie keep items such that). Filter wird mit einer Liste und einem Prädikat (= Funktion, die einen Wahrheitswert berechnet) als Argumenten aufgerufen und liefert eine neue Liste zurück, die nur diejenigen Werte enthält, für die das Prädikat wahr wird — es werden also nur diejenigen Listenelemente „gefiltert“, die eine Bedigung erfüllen. In unserem Fall ist die Bedingung bzw. das Prädikat ein kurzer Lambda-Ausdruck, der prüft, ob das jeweils an die Leerstelle* im grau umrandeten Puzzleteil eingesetzte Element der Liste kleiner als das Pivot-Element ist.

Mir ist schon klar, dass jemand, der sich noch nie mit funktionaler Programmierung beschäftigt hat, das nicht unbedingt sofort intuitiv finden wird — auch mir gefällt gerade deshalb die Python-Version noch besser, weil sie so nahe an der vertrauten mathematischen Mengennotation ist. Aber dass es sich auch beim Snap!-Code um eine ganz direkte Umsetzung des oben umgangssprachlich beschriebenen Prinzips handelt, sollte offensichtlich sein.

Wie wäre es in Java? Natürlich ebenso möglich, aber viel, viel umständlicher. Es fehlen einfach die mächtigeren Werkzeuge zur Manipulation von Listen. Dadurch wird die Umsetzung von Quicksort in Java zwangsweise auf einem wesentlich niedrigeren Abstraktionsniveau stattfinden müssen als in Haskell, Python und Snap!, wo die fünf Schritte des umgangssprachlichen Algorithmus direkt in Code übertragen werden können. Ich glaube, dass es für Schüler schon schwer genug ist, die Grundidee von Quicksort zu verstehen. Ihn bei der Umsetzung in ein Programm dann auch noch sofort „herunterbrechen“ zu müssen auf explizite Schleifen und Anweisungen zum Erstellen und Verändern von Listen, das kommt mir noch viel schwerer vor.

„Stopp mal!“ wird jetzt vielleicht mancher rufen. „Der Algorithmus, so wie du ihn präsentiert hast, ist aber furchtbar ineffizient. Die Liste wird da unnötigerweise zweimal durchlaufen (in beiden Aufrufen von keep items such that). Ich mache das alles in einer Schleife; geht viel schneller.“

Wer das ruft, hat sachlich recht — liegt aber meiner Meinung nach pädagogisch falsch. Schüler müssen zuerst sehen, wie ein Verfahren überhaupt in Code umgesetzt werden kann, und das möglichst high-level. Dann und erst dann sollen sie sich über die Effizienz Gedanken machen. Idealerweise führt die Suche nach einer effizienteren auch zu einer eleganteren Lösung. In Python z.B. sähe die erste Fassung mit nur einem Listendurchlauf vielleicht so aus:

def qsort(L):
  if not L:
    return []
  pivot = L[0]
  less, more = [], []
  for x in L[1:]:
    if x < pivot:
      less.append(x)
    else:
      more.append(x)
  return qsort(less) + [pivot] + qsort(more)

Die Liste wird also nun mittels einer Schleife in zwei neue Listen partitioniert. Aber der Code ist (finde ich) viel schwerer verständlich geworden. Und ist es für den Algorithmus denn wichtig, auf welche Weise die Partitionierung durchgeführt wird? Natürlich nicht! Verstecken wir die Details also in einer Funktion:

def partition(L, pivot):
    less, more = [], []
    for x in L:
        if x < pivot:
            less.append(x)
        else:
            more.append(x)
    return less, more

def qsort(L):
    if not L:
        return []
    pivot = L[0]
    less, more = partition(L[1:], pivot)
    return qsort(less) + [pivot] + qsort(more)

So, jetzt sieht qsort richtig aufgeräumt aus; sogar kürzer als die ursprüngliche Fassung mit den zwei list comprehensions.  Die spezielle Aufgabe der Partitionierung wurde schön isoliert und in eine eigene Funktion partition ausgelagert. Und wenn man sich das so ansieht, kommt plötzlich eine entscheidende Erkenntnis: So etwas wie partition kann man eigentlich öfter brauchen, z.B. wenn man gerade und ungerade Zahlen von einander trennen will oder Worte, die mit Großbuchstaben beginnen, von denen, die es nicht tun, oder Datensätze von weiblichen und männlichen Mitarbeitern. Man könnte dafür eine Reihe von Funktionen schreiben, die jedesmal eine gegebene Liste in zwei neue aufteilt. Diese Funktionen glichen sich komplett — nur der Test zur Entscheidung, wohin ein Listenelement sortiert wird, wäre immer ein anderer.

„Lauter Funktionen, die fast gleich sind… Kann man da nicht etwas zusammenfassen?“ fragt sich da vielleicht der eine oder andere aufgeweckte Oberstufenschüler, der Ähnliches schon bei der Einführung von Funktionen, deren Parametrisierung, der Vererbung, womöglich dem einen oder anderen Design Pattern oder allgemein dem DRY-Prinzip gesehen hat. Und wir antworten: „Aber ja doch — Higher-order functions to the rescue!“

def partition(L, fn):
    falses, trues = [], []
    for x in L:
        if fn(x):
            falses.append(x)
        else:
            trues.append(x)
    return falses, trues

def qsort(L):
    if not L:
        return []
    pivot = L[0]
    def ist_kleiner(x):
        return x < pivot
    less, more = partition(L[1:], ist_kleiner)
    return qsort(less) + [pivot] + qsort(more)

Hier gibt’s nun natürlich einiges zu sehen: Funktionen als Parameter von Funktionen (hier: fn).  Eine Funktion (ist_kleiner), die innerhalb einer anderen Funktion (qsort) definiert wird und dabei Bezug nimmt auf eine Variable außerhalb ihrer eigenen Definition (pivot).*** Trotzdem: Ich glaube, wenn man — anders als wir mit C, Pascal, Java groß Gewordenen — noch gar nicht verinnerlicht hat, dass Funktionen keine Variablenwerte sein dürfen, tut man sich damit gar nicht so schwer.

Diese Version des Algorithmus gefällt mir nun sehr gut: Wir haben einerseits die Effizienz eines einzigen Listendurchlaufs pro Rekursionsionschritt, andererseits haben wir eine neue, vielseitig einsetzbare Funktion partition und wieder eine kurze, knackige Funktion qsort, die nur das enthält, was wirklich nötig ist.

Noch kürzer-knackiger, aber unnötig verwirrend für Schüler wäre qsort mit einem Lambda-Ausdruck, d.h. einer Funktion, die so klein und unwichtig ist, dass sie nicht einmal einen Namen bekommt:

def partition(L, fn):
    falses, trues = [], []
    for x in L:
        if fn(x):
            falses.append(x)
        else:
            trues.append(x)
    return falses, trues

def qsort(L):
    if not L:
        return []
    pivot = L[0]
    less, more = partition(L[1:], lambda x: x < pivot)
    return qsort(less) + [pivot] + qsort(more)

Egal in welcher Version, wir haben nun ein Programm, dass nicht nur effizienter ist als das Ursprüngliche, sondern auch modularer, flexibler, allgemeiner****.  Wenn man dahin kommen könnte, dass Schüler verstehen, warum so etwas gut und erstrebenswert ist…

Nur der Vollständigkeit halber kommt jetzt noch eine eher funktionale Version von partition, ohne Schleife, dafür mit Rekursion.  Kann man so machen, muss man aber überhaupt nicht. Lehrreich — und irgendwie schön — ist diese Version aber vielleicht doch.

def partition(L, fn):
    if not L:
        return [], []
    first, rest = L[0], L[1:]
    falses, trues = partition(rest, fn)
    if fn(first):
        return [first] + falses, trues
    else:
        return falses, [first] + trues

Nun aber zum Titel dieses Artikels: Ich weiß, dass Kollegen, die das Glück haben, einen vierstündigen Informatikkurs in der Oberstufe anbieten zu können, durchaus auf diesem Niveau unterrichten — auch in Java. Ich bin in einer anderen Situation: Meine Oberstufenschüler haben in ihrer gesamten Schulkarriere nur zweimal ein halbes Schuljahr zwei Wochenstunden lang Gelegenheit zu erfahren, was Programmieren überhaupt ist. Das macht insgesamt 80 Schulstunden in ihren letzten beiden Schuljahren, in einem Fach, das für diese Schüler im Abitur minimale Relevanz hat. Für mich ist also jede Minute kostbar, in der ich diesen Schülern ein bisschen das informatische, problemlösende, abstrahierende Denken vermitteln kann.  Jedesmal, wenn ich erklären muss, was void oder static oder public oder float oder int bedeutet (oder den Schülern vermittle, dass sie das zwar dauernd tippen, aber sowieso nicht verstehen müssen/können), verlieren ich und die Schüler Zeit, die sie damit verbringen könnten, an der Lösung eines Problems zu knobeln. Bei so wenig Zeit wünsche ich mir, eine Sprache benutzen zu können, die maximal anfängerfreundlich ist (so wenig und so intuitive Syntax wie möglich) und gleichzeit so ausdrucksstark, dass sie die Schüler nicht beim Denken behindert!

Ich bin ich mir noch nicht sicher, ob Snap! diese Sprache ist. Andererseits: Was für die Studenten der UC Berkeley hervorragend funktioniert, sollte eigentlich auch für deutsche Schüler gut genug sein, oder?

P.S. Warum habe ich eigentlich in meinem Snap!-Quicksort das Pivot-Element zufällig ausgewählt? Wer das weiß, bekommt nen Ball!

P.P.S. Man kann ja in Snap! eigene Kontrollstrukturen programmieren (s. Bild im letzten Post).  Wenn das geht, dann kann man sich doch sicher auch eigene list comprehensions bauen. Vorschläge, anybody?

** Ist diese Leerstelle nicht visuell wunderbar anschaulich dafür, dass dieser Block noch nicht ausgeführt werden kann, weil ihr das Entscheidende, ein Argument, noch fehlt?

*** Übrigens will ich hier gar nicht so tun, als könnte man Ähnliches nicht auch in Java tun.  „Anonyme innere Klassen“ heißt hier das Stichwort. Als ich die vor über 10 Jahren kennenlernte und verstand, was ich in Java damit anfangen kann, war ich sowas von begeistert — und bin tatsächlich, glaube ich, dadurch ein besserer Programmierer geworden. Heute kenne ich aber auch ein paar Sprachen, in denen die zugrundeliegende Idee (closures) so viel einfacher umgesetzt werden kann (z.B. in unserem Python-Beispiel die Funktion ist_kleiner) als in Java.

**** Eigentlich sollte man sollte man qsort nun aber noch mit der Vergleichsfunktion parametrisieren, so dass man z.B. mit qsort(L, ist_groesser) absteigend sortieren könnte.  Aber das überlasse ich als Hausaufgabe euch Lesern.

Snap!

Letzte Vorletzte Woche Vor drei Wochen habe ich in München einen Workshop zur graphischen Programmiersprache Snap! gehalten, beim Tag der Informatiklehrerinnen und Lehrer, organisiert u.a. vom geschätzten Kollegen Herrn Rau.

„In zwei Stunden von der Grundschule ins Informatikstudium“ war das Motto, d.h. es ging mir darum, den Teilnehmern in kurzer Zeit einen Einblick über die das breite Spektrum von Themen zu geben, die man mit Snap! abdecken kann — angefangen mit dem Zeichnen einfacher geometrischer Figuren (à la LOGO und Scratch) bis hin zu Lambda-Ausdrücken und dem Programmieren eigener Kontrollstrukturen*.  indexIch bin v. a. deshalb von Snap! so angetan, weil man auch komplexe Konzepte wie Rekursion oder first-class Funktionen ganz ohne Syntaxbarriere vermitteln kann.

Wer schon einmal mit Scratch gearbeitet hat, weiß, wie sehr das „Zusammenpuzzeln“ von Programmen die Schüler zum schnellen Experimentieren einlädt. Snap! geht in dieser Hinsicht nochmal einen kleinen Schritt weiter, denn um losprogrammieren zu können, muss nun nicht einmal mehr eine Software installiert werden:   Snap! läuft komplett im Browser, d.h. man braucht als Benutzer nichts zu installieren, sondern geht einfach auf http://snap.berkeley.edu/snapsource/snap.html (oder sucht im Web nach „run snap“) und legt los.

Selber loslegen sollten auch die Teilnehmer des Workshops; deswegen habe ich versucht, ihn so interaktiv wie möglich zu gestalten.  Das kann ich in einem Blogartikel so natürlich nicht machen.  Ich habe aber hinterher meine Präsentation so überarbeitet, dass sie — hoffentlich — auch für sich allein einigermaßen lesbar ist.  V.a. enthält sie nun ganz viele Links zu meinen Beispielprogrammen in der Snap!-Cloud. Einfach einen Programmlink anklicken, Programm ausprobieren und dann das Symbol mit den beiden Pfeilen drücken, um den Source-Code anschauen.

Zur Präsentation

Zum Beispiel findet ihr dort diesen hübschen Baum und diese Animation (bitte Maus im Fenster bewegen). Und noch vieles mehr… also viel Spaß bei Lesen und Mitprogrammieren!

In der Nacht vor dem Workshop fiel mir noch ein schönes Beispiel ein… was dazu führte, dass ich mich um 2 Uhr früh in München nochmal an einen fremden Rechner gesetzt und programmiert habe. (Dabei war es natürlich ganz großartig, dass ich weder die Software noch meinen eigenen Code auf dem Laptop oder einem Stick dabeihaben musste.) Was mir da einfiel, war der Quicksort-Algorithmus, das klassische Beispiel für ein Divide-and-Conquer-Verfahren.**

qs

Wer mag, darf sich als Hausaufgabe gern selbst an der Umsetzung in Snap! oder der Programmiersprache seiner Wahl versuchen.  Eine (erste) Snap!-Lösung findet ihr in der Präsentation.  Ich werde das Quicksort-Beispiel noch sehr ausführlich in einem weiteren Artikel diskutieren, in dem es um die Expressivität von Programmiersprachen für die Schule geht.

Für heute soll’s hiermit aber gut sein! Ich weiß selbst noch überhaupt nicht, ob und wie ich Snap! weiter einsetzen werde.  Vieles daran ist orthogonal zu den Lehrplänen, nach denen ich unterrichten werde, und vielleicht auch manchmal zu dem, was Schüler und spätere Arbeitgeber von Informatikunterricht erwarten.

Was denkt ihr? Wie findet ihr Snap!? Würdet ihr es im Unterricht einsetzen?*** Ich freue mich sehr über (positive wie kritische) Rückmeldungen zu Snap!, dem Workshop und den Materialien.

* Versucht das mal in Java!

** Wir haben das damals noch im Grundkurs Informatik, Klasse 13, nach 2 Jahren Informatikunterricht gelernt. Kommt mir heute durchaus anspruchsvoll vor. Und ist natürlich auch so gar nicht objektorientiert…

*** Das Thema „Snap! und Objektorientierung“ haben wir im Workshop diskutiert. Hier nur ganz kurz: In der aktuellen Version von Snap! kann man durchaus objektorientiert programmieren, es ist aber alles andere als natürlich im Vergleich zu Sprachen, die explizit für OOP entworfen wurden.  Dass es überhaupt geht, ist ein Beweis für die Ausdrucksstärke der Sprache (Zitat aus dem Reference Manual: „Snap! is Scheme disguised as Scratch“).  Ich kann überhaupt die Lektüre dieses Manuals nur empfehlen.  Ihr werdet mit den Ohren schlackern!