3. Stunde Python: Nachdem die Schüler mit Turtle-Grafik erste Erfahrungen gemacht haben und im Online-Kurs parallel die Grundlagen trainiert haben stand nun in der dritten Stunde das Thema Text-Adventures auf dem Programm.

Prinzipiell ist es mein Ziel, den “langweiligen” Teil des Programmieren-Lernens auf den Online-Kurs zu verschieben und dann im Unterricht selbst spannende Anwendungsfälle untersuchen zu können. Text-Adventures sind deshalb besonders gut geeignet, da man hier sehr gut den Umgang mit Kontrollstrukturen lernen kann (man benötigt eine Mainloop und einen Haufen verschachtelte If-Elif-Else Abfragen) und sieht, wie selbst sehr simple Programme schnell aus sehr komplexen Code bestehen (der Umgang mit Komplexität ist einer der Dinge, die die Informatik als Disziplin ausmacht).

Der Grundaufbau eines Textadventures in Python kann so aussehen:

zustand="start"
while (zustand!="ende"):
    if zustand=="start":
        print("Situationsbeschreibung")
        eingabe = input("Was tust du (f: In den Flur, a: Abhauen)")
        if eingabe=="f":
            zustand="flur"
        else:
            zustand="ende"
    elif zustand=="flur":
        print("Du betrittst den Flur")
        eingabe = input("Was tust du?")
    elif zustand=="ende":
        print("Du läufst davon...")
            


Das ganze wird natürlich schnell extrem unübersichtlich… daher enstand bei einigen Schülern von sich aus bereits der Wunsch den Code irgendwie übersichtlicher zu gestalten, was hier zum Thema Funktionen führt:

def flur():
    print("Du gehst in den Flur... oben hörst du Geräusche...")
    eingabe=input("""Was tust du?
        [r]ückwärts: Ich gehe zurück zum Haupteingang
        [o]ben: Ich gehe die Treppen hoch""")
    if eingabe=="r":
        return "haupteingang"
    if eingabe=="o":
        return "Erster Stock"

Weiterhin bietet es sich auch an Zufallsfunktionen einzuführen (um z.B. Kämpfe oder Gefahren zu simulieren). Das nächste mal werde ich daher diese Einheit mit einer Lerntheke ergänzen, auf der man die wichtigsten Funktionen nochmal nachlesen kann.

 

Interessanterweise kamen alle Schüler sehr ordentlich mit den Aufgaben zurecht. Eine Erfahrung, die ich mit Java+Guis oder Java+Greenfoot so noch nicht gemacht habe. Wenn wir über Probleme gesprochen haben, dann meist nicht über einfache Syntaxfehler, sondern über grundlegende Logik-Fehler, die von den Schülern mit etwas Hilfestellung selbst entdeckt wurden. So macht mir das Unterrichten viel mehr Spaß und ich habe das Gefühl, dass viele Schüler schneller und mehr lernen, als in meinen bisherigen Java/Lazarus Kursen.

Da freut man sich als Informatiklehrer:

“Insbesondere die erst seit diesem Schuljahr neu eingerichtete AG „Robotik“ war bei den Besuchern besonders beliebt. Dank der „Finanzspritze“ von 2000 Euro des übrigens sehr aktiven Fördervereins der CWS konnten die Bausätze für die selbst gebauten kleinen Roboter bereitgestellt werden. Die Schüler tüfteln und bauen unter Leitung von Dr. Stephan Zschiegner kleine Maschinen, programmieren sie und bringen den Robotern so erstaunliche Fähigkeiten bei, was sie nun vorführten. Aber auch in den Fachbereichen Physik oder Chemie gab es erneut erstaunliche Experimente, bei denen die jungen Besucher zum Teil auch selbst Hand anlegen durften. ” http://www.usinger-anzeiger.de/lokales/usingen/eine-attraktive-schule_18533093.htm

Tatsächlich war es am Tag der offenen Tür noch nie so voll in den Informatikräumen. Die Roboter der AG Robotik sorgten für große Begeisterung und ich freue mich mit dem Kollegen, der diese präsentieren durfte.

 

In unserer Schule haben wir zahlreiche Whiteboards, die sich nur per vga ansteuern möchte. Da die angeschlossenen Rechner sich beim Anmelden mit den Servern des Hochtaunuskreises verbinden, stellen diese leider für den Unterricht keine Option dar: Es dauert leider 5-10 Minuten bis die Rechner hochgefahren sind, man sich eingeloggt hat und überhaupt dazu kommt, irgendetwas zu machen. Man kann dies zwar irgendwie organisieren (z.B. den Rechner vor dem Unterricht starten, etwas erklären, dann einloggen, wieder etwas erklären und dann loslegen). Selbst im besten Fall geht dabei aber wertvolle Unterrichtszeit verloren.

Ich verwende daher meinen eigenen Rechner und da ich nicht mit meterlangem vga-Kabel durch die Schule laufen möchte. Wenn man den eigenen Rechner per vga-anschließt baut man zudem schnell gefährliche Stolperfallen, die man im Eifer des Gefechts übersieht.

Lange Zeit habe ich den Microsoft Display Adapter verwendet (Danke für den Tipp an Jan-Martin Klinge). Leider hat das Gerät irgendwann in den Winterferien beschlossen mit meinem aktuellen Rechner (Thinkpad Yoga 370) nicht mehr kommunizieren zu wollen… Alle Versuche etwas daran zu ändern sind leider gescheitert.

Zum Glück habe ich jetzt eine günstigere Alternative gefunden: Für 25€ habe ich dieses Gerät gekauft, welches neben Miracast angeblich auch Apple Airplay unterstützt. Ich habe zwar jetzt eine geringfügige Verzögerung (wenn ich etwas auf meinem Laptop schreibe und mich umdrehe, sehe ich noch was ich zuletzt geschrieben habe). Da ich aber keine Videos zeige ist das vollkommen egal. Da das Gerät nur einen HDMI Anschluss hat, verwende ich zusätzlich einen HDMI auf VGA Adapter.

 

Bei Übernahme meiner E-Phase Informatik zum Halbjahr musste ich mit Erschrecken feststellen, dass ich nur 10 Doppelstunden bis zu den Sommerferien habe. Darunter sind zwei Stunden, in denen ich die Klausur schreibe. Dazu kommen erfahrungsgemäß Ausfälle durch Schulveranstaltungen, Krankheit oder ähnliches…

Wie soll ich in dieser kurzen Zeit Schülern das Programmieren beibringen?

Ich habe lange recherchiert und dann auf der Plattform Stepik begonnen, einen Online-Kurs für Python anzulegen. Die Schüler müssen Aufgaben aus dem Kurs als verpflichtende Aufgaben lösen. Ich sehe live wer welche Aufgaben bearbeitet hat. Da Stepik nur kostenlos ist, wenn die Kurse unter CC-Lizenz öffentlich zugänglich sind, könnt ihr diesen Kurs auch gerne verwenden um das Programmieren mit Python zu lernen. Der Kurs wird im Laufe des Halbjahres noch deutlich wachsen: https://stepik.org/course/6229/

Im hessischen Abitur werden zum Thema “Objektorientierte Programmierung” die Programmierbeispiele in zwei Sprachen angeboten: JAVA und Delphi.

Delphi bzw. Lazarus als Open Source Alternative hat inzwischen einen gewissen historischen Wert. die Sprache wird außerhalb des deutschen Informatikunterrichtes praktisch nirgends mehr benutzt. In Hessen ist sie nur deshalb noch von Bedeutung, da diese lange Zeit Grundlage der Informatikausbildung war und vor allem viele Quereinsteiger keine andere Sprache sprechen.

JAVA ist da schon ein anderes Kaliber. JAVA ist die meist verbreitetste Sprache überhaupt und wird auch von vielen Universitäten als erste Programmiersprache verwendet. Mit Greenfoot, BlueJ, dem JavaEditor, Gamegrid, Kara, dem Hamstersimulator verfügt JAVA über zahlreiche gute Entwicklungsumgebungen und Frameworks, die zum Unterrichten mit der Sprache geeignet sind. Gleichzeitig ist das Lehren mit JAVA auch mit zahlreichen Fallstricken versehen, da die Sprache für die professionelle Entwicklung in großen Teams gut geeignet ist, aber nicht als erste Programmiersprache für Programmieranfänger vorgesehen ist. Dies fängt mit dem üblichen Grundkonstrukt an:

public static void main(String args[]) {
}

verbunden mit zahlreichen Problemen, die dem ersten Problemlösen in Java im Weg stehen:

  • Installation des SDKs und richtiges Setzen der Pfadvariablen.
  • Zahlreiche Syntaxfehler beim Vergessen von runden oder geschweiften Klammern oder des Semikolons am Ende einer Zeile.
  • Durch das Strong Typing wird mehr “Fingertyping” benötigt, es dauert dadurch einfach länger bis man zu Ergebnissen kommt. Und spätestens wenn man in der Objektorientierung mit Containern und Casts beschäftigt, muss man sowieso darüber nachdenken was für einen Typ das aktuell verwende Objekt gerade haben könnte.
  • In Kombination mit Greenfoot: Zahlreiche Programmierkonzepte müssen “gleichzeitig” gelernt werden um einfache Programme zu schreiben (Objektorientierung, Interaktion von Objekten, Vererbung)
  • In Kombination mit GUIS: Komplizierte Klassenhierarchie (man verwende nur mal ein JTextField, auch hier müssen wieder viele Konzepte (imperative Programmierung, Objektorientierung) gleichzeitig gelernt werden.
  • Lesen und Schreiben in Dateien ist eine einzige Qual. Auch das Lesen von Tastatureingaben ist umständlich
  • Man muss sich als Lehrer und Lernender entscheiden, ob man statische Arrays oder direkt mit den objektorientierten ArrayLists anfängt. In der Regel benötigt man für objektorientierte Programmierung letzteres. Sollte man dann also die Arrays direkt überspringen?
  • und vieles mehr…

Meine persönliche Erfahrung aus mehreren Java-Kursen an der Schule und der Universität war folgende: Java wird von Lernenden als extrem schwergewichtige Sprache wahrgenommen. Alleine der Gedanken nach einiger Zeit Programmierpause sich wieder in Java einarbeiten zu müssen, verursacht Stöhnen. Ich kenne auch fast niemanden -außer Informatikstudenten-, der Java gelernt hat und anschließend für irgendeinen Zweck noch einmal freiwillig verwendet hat.

Schön wäre es daher, wenn man statt Java auf eine leichtgewichtige Sprache setzt, die leicht zu lernen ist, besser im Kopf behalten werden kann und daher besser dazu befähigt, Probleme zu lösen. Das Lösen von Problemen mit Hilfe eines geeigneten Werkzeuges sollte meiner Meinung nach einer der Kernkompetenzen sein, die Schüler im Informatikunterricht lernen sollten. Siehe dazu auch eine der ersten Fragen im großartigen Buch “How to think like a computer scientist”:

What is the most important skill for a computer scientist

a) To think like a computer
b) To be able to code really well
c) To be able to solve problems
d) To be really good at math.

Die richtige Antwort ist ganz klar c). Doch wenn Schüler eine Programmiersprache später nicht mehr benutzen, weil ihnen diese als schwergewichtig und umständlich erscheint, dann haben wir als Informatiklehrer unser Ziel verfehlt.

Ich setze daher in meinem neuen E-Phasen Kurs auf Python als erste Programmiersprache und werde zu einem späteren Zeitpunkt meine Erfahrungen teilen. Gegebenenfalls werden wir später in der Objektorientierung nochmal auf Java wechseln, so wie es von dem großartigen deutschen Online-Lehrbuch Informatik in der Schule vorgeschlagen wird.

Der Vorteil von Java ist natürlich, dass es sehr gute Tools gibt um die Objektorientierung zu lernen, wie z.B. den Java Editor oder BlueJ. Insbesondere das interaktive erzeugen von Objektdiagrammen, die Kombination von Klassen- und Objektdiagrammen kann ein Riesenvorteil für den Unterricht sein. Ich finde es aber falsch den Hauptfokus des Fachs Informatik auf die Objektorientierung zu legen. Objektorientierung ist ein wichtiges Paradigma um zu verstehen, was notwendig ist, damit Programme im großen Stil und im Team programmiert werden können. Wie bedeutend Objektorientierung oder die Verwendung von Java ist, ist tatsächlich aber umstritten (siehe [1], [2], [3]), siehe dazu auch folgende Zitate. Damit ich nicht falsch verstanden werde: Es ist schon wichtig im Unterricht objektorientierte Programmierung zu lernen. Viel wichtiger ist es aber das Programmieren zu lernen und zu lernen wie man Probleme löst. Wie so oft versperrt die Objektorientierung hier auch in der Lehre schnell den Blick auf das Wesentliche.

Würde das Abitur in Hessen nicht Java als Programmiersprache vorsehen (wobei bisher noch kein Schüler an unserer Schule das schriftliche Abitur absolviert hat), dann würde ich auch erwägen komplett auf Python umzusteigen.

Meine erste Erfahrungen sind übrigens durchweg positiv: Die Schüler können mit wenigen Sprachkonstrukten schon schnell vielfältige Programme schreiben. Sie sind produktiv. Sie lernen keinen Sprachbalast, sondern direkt, wie sie Aufgaben lösen können. Vieles deutet darauf hin, dass ich mich mit diesem Weg anfreunden könnte.

Was spricht noch für Python:

  • Python wird von fast allen großen US Universitäten als erste Programmiersprache verwendet.
  • Verbreitung: Python ist nach TIOBE die meistverwendeste, leichtgewichtige Programmiersprache, nach Redmonk ebenfalls im Spitzenfeld mit Java und C#, nach PYPL direkt hinter JAVA. In allen Vergleichen sieht man aber, dass die Verbreitung von Python zunimmt, während die Verbreitung von Java konstant bleibt oder sogar abnimmt. Es ist durchaus vorstellbar, dass Python meistverbreitetste Programmiersprache sein könnte.
  • Durch die Einfachheit haben Schüler von Tag 1 an direkt tolle Erfahrungen und Erfolgserlebnisse.
  • Hervorragende Standardbibliothek, so dass auch echte Probleme (z.B. Bildbearbeitung) früh gelöst werden können.
  • Python ist Open Source! (Im Gegensatz zur Standard-Runtime-Environment von Java)

“Deshalb brauchen wir ein Schulfach Informatik. Es muss mit qualifizierten Lehrkräften, einem sorgfältig geschriebenen Bildungsplan, ausreichend Zeit im Stundenplan und einer Zeile im Zeugnis ausgestattet werden. Seine wichtigste Aufgabe muss die Entmystifizierung der digitalen Welt sein, so wie Biologie, Physik und Chemie jeweils einen Teil unserer Welt entzaubern. Auch dort erleben Kinder mit ihrem eigenen Denken, dass die Natur erklärbar und verstehbar ist. Diese Erfahrung bleibt ihnen erhalten, auch wenn sie Impulserhaltung und Zellteilung wieder vergessen. ”

http://www.zeit.de/gesellschaft/schule/2018-02/digitalisierung-informatikunterricht-schulen-bildung/seite-2

Nach meinen ersten Berufsjahren bin ich noch am rätseln darüber, was eigentlich der “Kern” des Faches ist.

Im Informatikunterricht der Oberstufe (Hessen) ist es so, dass sich beim Programmieren die “Spreu vom Weizen trennt”: Wergerne programmiert und dies auch in seiner Freizeit tut, der ist auch im Unterricht erfolgreich. Wer nur die 2-3 Stunden gedanklich mit dem Programmieren auseinandersetzt und zu Hause nicht selbst programmiert, der wird im Laufe der Oberstufe nur Frustration sammeln. Dies ist deshalb schade, weil das Fach Informatik noch so viel mehr bietet als das. Entweder man kann beim Programmieren in die Tiefe gehen und sich immer mehr Techniken aneignen, um Probleme zu lösen, oder man kann die Breite des Faches entdecken und z.B. die unterschiedlichsten Algorithmen entdecken um eine riesige Vielzahl von Problemstellungen kennenzulernen.

So habe ich es schon erlebt, dass ein Kurs, der vorher beim Programmieren immer gemurrt hat plötzlich aufblühte, als es um die theoretische Analyse von Algorithmen ging.

Dabei kam mir zwischenzeitlich der Gedanke, dass man sogar fast komplett auf das Programmieren verzichten könnte. Aber ist dies tatsächlich eine Option?

Die Informatik ist ein Fach, dass eine unglaubliche Bandbreite an Themen und Gebieten vorzuweisen hat. Wenn man Informatik unterrichtet muss man sich daher fragen: Was ist im Sinne der Vorbereitung auf das Studium und zur Selbstbewussten Teilnahme an einer digitalen Gesellschaft wichtiger? Den Schülern gute Programmierkenntnisse beibringen oder die ganze Bandbreite des Faches Informatik aufzeigen, um die Vielfältigkeit dieser Wissenschaft zu vermitteln?

Könnte man eines der Ziele des Informatikunterrichtes, Technik zu entmystifizieren nicht auch ohne Programmierung erreichen? Dann würde man viel Zeit gewinnen um Themen zu bearbeiten, die massiv zur Allgemeinbildung beitragen und die bis jetzt nur am Rande oder sogar gar nicht im Informatikunterricht in Hessen thematisiert werden, z.B. (Public Key-) Kryptographie, Data Mining, Machine Learning, Künstliche Intelligenz, Graphen, Bildverarbeitung, ….

Ist Programmierung nötig?

Die erste Frage ist für mich inzwischen recht klar zu beantworten:

Ja.

Es gibt zwei Begründungsansätze, warum ich mir da inzwischen so sicher bin:

Erstens: Programmieren fördert das algorithmische Denken und Problemlösen

Programmieren ist ein Hilfsmittel um Probleme in zahlreichen Anwendungsgebieten zu lösen. Durch das Programmieren auch unser abstraktes Denken geschult, man lernt komplexe Situationenzu modellieren, Probleme zu zerlegen und in eine für einen Computer verständliche Sprache zu übersetzen.

Das Programmieren ist eine wichtige Säule, um Computational Thinking, d.h algorithmisches Problemlösen zu fördern. Dies ist eine wichtige Fähigkeit, die die Schüler später in viele Awendungsbereiche mitnehmen können, da die Schnittmenge vieler Wissenschaften zur Informatik immer größer wird.

Vor allem Datenanalyse und Verarbeitung sind Fähigkeiten, die man später in fast jedem Anwendungsgebiet gut gebrauchen kann. Man könnte daher sogar so weit gehen und fragen, ob Programmieren nicht sogar eine Fähigkeit ist, die jeder Schüler mit allgemeiner Hochschulreife zu einem gewissen Level beherrschen sollte…

Zweitens: Programmierung eröffnet Möglichkeiten in der Berufswelt

Zunächst mal eröffnet die Fähigkeit zu Programmieren eine riesige Bandbreite an Berufen.
Die Informatikwelt ist eine der wenigen Bereiche in der nicht (nur) die Abschlüsse zählen, sondern das was man kann. Wenn ein Schüler in der Schule gelernt hat zu programmieren, dann eröffnen sich für ihn im Leben ganz unabhängig davon, ob er sein Abitur oder Studium schafft, ganz vielfältige Türen im Berufsleben.

Dies ist ein Faktor, den man zumindest nicht unterschätzen darf.

Wie viel Programmierung ist nötig?

Die Frage ist schon sehr viel schwieriger zu beantworten:

Wie gut sollte ein Schüler am Ende seiner Schullaufbahn programmieren können?

Ich finde die Frage kann man so beantworten: Ein Schüler sollte so viel programmieren können, dass er später in der Lage ist eigenständig alle Arten von Problemen mit der verwendeten Programmiersprache zu lösen. Dafür reicht ein gutes Verständnis von wenigen Konzepten aus:

  • Schleifen
  • Verzweigungen
  • Funktionen
  • Verwendung von Bibliotheken
  • Höhere Datenstrukturen wie Listen oder dynamische Arrays
  • Objektorientiertes Programmieren
  • Aufwandsabschätzung bei Algorithmen

Wer diese Konzepte beherrscht, der kann prinzipiell fast jedes Problem lösen, wenn er sich genug einarbeitet. Die Programmiersprache spielt keine große Rolle, auch nicht über welchen Zugang man die Fähigkeiten erlernt hat. Allerdings halte ich es für wichtig, dass man eine Programiersprache erlernt, die über eine umfangreiche Bibliothek besitzt, d.h. man sollte nicht bei Miniwelten wie Logo, Kara oder Scratch stehenbleiben.

Exkurs: Ist Objektorientierung notwendig?

Ich habe übrigens lange überlegt, ob ich die Objektorientierung in die Liste mit aufnehmen soll: Prinzipiell kann man in der richtigen Sprache guten Code schreiben, ohne objektorientiert zu programmieren. Erst wenn man in größeren Teams arbeitet und gezwungen ist Schnittstellen zu definieren, nimmt die Bedeutung dieses Paradigmas zu.
Objektorientierung ist aber auch ein schweres Konzept: Wer in der Schule gelernt hat ein Klassendiagramm für eine Anwendungssituation zu modellieren, der ist noch weit davon entfernt gut objektorientiert zu programmieren. Es gibt hier so viele Irrwege bei denen man sich verrennen kann und der Unterricht kann es kaum leisten, Programmierer auszubilden, die gut objektorientiert programmieren können. Insbesondere ist es hier notwendig an wirklich großen Projekten zu arbeiten und Best Practice Ansätze (Entwurfsmuster) zu studieren.
Auf der anderen Seite ist ein grundlegendes Verständnis von Objektorientierung notwendig um Lösungsansätze zu verstehen und oft auch Bibliotheken in der Programmiersprache zu verwenden.  
Meiner Meinung ist es daher ausreichend, wenn der Unterricht sich hier auf die Grundlagen der objektorientierten Programmierung lehrt und die Tiefen der objektorientierten Modellierung nur dann erkundet, wenn ausreichend Zeit dafür gegeben ist.

Wie sollte Programmierung gelehrt werden?

Prinzipiell gibt es sehr unterschiedliche Ansätze das Programmieren zu unterrichten:

Lernen durch Anwendungen

Dieser Ansatz versucht mit Hilfe von spielerischer Umgebungen wie GameGridGreenfoot oder dem Programmieren von IDEs mit integrierten GUI-Erzeugern wie z.B. dem Java-Editor den Spaß am Programmieren zu fördern.

Das Problem bei diesem Ansatz: Dadurch, dass man gleichzeitig sowohl mit imperativen Sprachelementen und mit Klassen und Objekten arbeiten muss, müssen die Schüler sehr viele Sprachkonstrukte gleichzeitig lernen. Manchmal führt kein Weg daran vorbei Sprachelemente erst einmal zu nutzen und später genauer zu verstehen.

Unbestritten ist aber der Vorteil dieser Ansätze: Wenn man schnell Ergebnisse produziert, dann macht Programmieren Spaß!

Lernen durch Konzepte

Dieser Ansatz setzt die Programmierkonzepte in den Vordergrund. Man verzichtet auf optisch ansprechende Anwendungen zugunsten einer Fokussierung auf Sprachkonstrukte. Es reicht dann, die Ausgabe auf eine Kommandozeile auszugeben.

Die Gegner dieses Ansatzes argumentieren damit, dass dieser wenig motivierend ist (so z.B. mein Ausbilder). Dafür ist für die Schüler klar nachvollziehbar, was gerade passiert, die Schüler lernen ein Konzept nach dem Anderen. Dieser Ansatz ist weniger motivierend, dafür aber verständnisfördernd.

Reduzierte Programmierumgebungen

Darüber hinaus gibt es noch Konzepte wie LOGO bzw. Turtlegrafik oder Robotersimulationen (Hamstersimulator, Kara,…), die reduzierte Umgebungen zur Verfügung stellen, oft in Kombination mit grafischer Programmierung.

Das schöne an diesem Ansatz ist, dass hier die grundlegenden Programmierkonzepte gelernt werden können und gleichzeitig Ergebnisse sichtbar sind.

Diese Ansätze kombinieren Vorzüge aus den ersten beiden Beispielen. Der Fokus liegt hier oft stärker auf der imperativen Programmierung

Beurteilung der Ansätze

Prinzipiell konnte ich in den ersten Jahren folgendes feststellen: Es gibt einige Schüler, die mit guten Vorerfahrungen in den Unterricht kommen. Diese Schüler werden zwar später gute Programmierer, lernen im Unterricht selbst aber wenig. Weiterhin gibt es Schüler, die ohne Vorerfahrungen in den Unterricht kommen und mit dem algorithmischen Denken überhaupt nicht klar kommen. Diese Schüler lernen auch wenig. Zuletzt gibt es noch Schüler, die mit keiner oder wenig Programmiererfahrungen starten, für die der Unterricht der erste Baustein für eine Programmierkarriere ist. Dies ist die Zielgruppe, die ein guter Programmiersprachenunterricht erreichen muss. Um diese Schüler zu erreichen ist es sowohl nötig zu motivieren als auch auf eine strukturierte Weise in das algorithmische Denken einzuführen. Im Gegensatz zu den anderen Fragen, finde ich hier noch keine klare Antwort, sondern muss aus meinen Erfahrungen im Unterricht schöpfen:

Delphi

Die ersten Erfahrungen mit Delphi/Lazarus sind zwiespaltigen: Auf der einen Seite ist Pascal als Sprache sehr gut zu lernen. Auf der anderen Seite ist die Anwendungsferne (Wer programmiert noch in Delphi?) ein großer Motivationsblocker. Zudem empfand ich es als schwierig, das man durch den Fokus auf den GUI-Builder direkt in die objektorientierte Programmierung einsteigen muss und gleichzeitig imperative Programmstrukturen lehren muss. Das ist zwar Motivationsfördernd, macht den Einstieg für Anfänger aber unnötig schwer.

Im zweiten Durchlauf habe ich vor Delphi Turtle-Grafik mit Pascal vorgeschaltet. Dieser Ansatz war schon deutlich zielführender.

Greenfoot

Nachdem ich jetzt ein Jahr komplett mit Greenfoot gearbeitet habe, muss ich feststellen, dass ich mit dem diesem Ansatz nicht glücklich geworden bin. Die Schüler mit Vorerfahrungen haben hier zwar tolle Sachen gemacht. Ich hatte aber das Gefühl, dass gerade die Schüler, die Schwierigkeiten beim Programmieren hatten, es einfacher gehabt hätten, wenn sich der Unterricht auf die wesentlichen Konzepte beschränkt hätte. Diese Schüler brauchten eine klare Struktur. Man beginnt irgendwie gleichzeitig mit Objektorientierung und imperativer Programmierung, braucht schnell Konstrukte, die die Schüler zu diesem Zeitpunkt noch nicht verstehen können, so dass ihnen der klare rote Faden fehlt.

Python

Aus Frustration über die ersten Jahre mit Delphi/Java habe ich im letzten Jahr ausprobiert und Python als erste Programmiersprache verwendet.

Die Idee war folgende: Dadurch, dass sich hier auf eine winzige Anzahl an Konzepten konzentriert werden kann, soll vor allem die Verwendung dieser Konzepte zum Problemlösen in unterschiedlichen Bereichen im Vordergrund stehen.

Ich bin dabei zweigleisig gefahren:

  • Damit die Schüler strukturiert ein Thema nach dem anderen Lernen, habe ich einen Onlinekurs erstellt (https://stepik.org/course/6229/). Im Programmierkurs werden die Konzepte isoliert voneinander behandelt. Da die Umgebung nur textbasierte Aufgaben zulässt, dient der Kurs sozusagen als Fingerübung das Programmieren und algorithmische Denken zu fördern.
  • Im Unterricht habe ich mit Turtle-Grafik begonnen und habe nebenbei immer wieder interessante Anwendungen der Programmiersprache betrachtet (Spieleentwicklung mit pygame-zero oder gamgegridp, Textadventures, das nächste mal soll auf jeden Fall auch Datanalyse mit Pandas und mathplotlib ein Thema sein). Der Unterricht dient also stärker dazu zu motivieren und Anwendungen aufzuzeigen.

Mit dieser Strategie bin ich bisher am zufriedensten und werde diese weiter verfolgen.

Ob dies der “goldene Weg” ist, ist natürlich vollkommen offen. Die grundlegenden Fragen “Wie viel Programmierung braucht der Schüler und wie führt man diese am besten ein?” werden mich auf jeden Fall noch eine ganze Zeit lang beschäftigen. Ich bin gespannt, wohin mich diese Überlegung in den nächsten Jahren führen und wie dies meinen Unterricht beeinflussen wird.

Letzte Bearbeitung: 06.01.2019 – Da dies einer der meistgelesenen Artikel auf dem Blog ist, aktualisiere ich diesen gelegentlich, da sich auch meine Gedanken zu dem Thema ändern. Ich habe jetzt auch das Gefühl die Fragestellung nur im Ansatz angekratzt zu haben und daher werde ich den Text sicherlich noch das ein oder andere mal umformulieren, bis ich mit der Form zufrieden bin.

Tipps zur Umsetzung
Erfahrungsberichte (positiv)

Erfahrungsberichte (Kritik)

  • Hoppla! – Unkontrollierte Kritik an jungen Menschen: http://www2.hs-fulda.de/~grams/hoppla/wordpress/?p=657
  • Taz – http://www.taz.de/!5321687/“Eine alleinerziehende Mutter wehrt sich gegen den Kauf des Tablets. Nicht vornehmlich aus Geldnot, wie das Hamburger Abendblatt über Sandra Kittelmann schreibt. Sie wolle weder ihre finanzielle Lage der Schule offenlegen müssen noch sei sie der Ansicht, dass die Kosten in einem vernünftigen Verhältnis zum Nutzen stünden. Dass die Kinder durch die Geräte ständig für die Lehrer erreichbar seien, berge Stresspotenzial, sagt Kittelmann. Zudem verhindere die Rechtschreibprüfung ein selbstständiges Erlernen der korrekten Orthografie – vor allem aber drohe eine Ausgrenzung der Kinder in den Klassen ohne iPad.”

Umsetzungen

Weitere Beiträge

Have I been pwned?

Aus Neugier habe ich mal getestet, ob ein altes Passwort von mir schonmal gehackt wurde:  (Antwort: Ja)

Meine neueren Passwörter traue ich mich aber nicht im Formular einzugeben.

Differenz gewinnt ist ein Spiel für den Mathematikunterricht, die Spieler verteilen Chips auf die Zahlen 0-5 und versuchen mit der besten Gewinnstrategie ihre Chips schnell abzuräumen.

Das Gute an dem Spiel: Es ist nicht sofort ersichtlich, was die beste Strategie ist, viele Spieler hatten beim Auswerten nochmal ein “Aha”-Erlebnis. Das Arbeitsblatt könnt

Zum Download: -> Differenz gewinnt