Informatikunterricht – Programmieren… ja und wenn ja wieviel?

Nach meinen ersten Berufsjahren bin ich noch am rätseln darüber, was eigentlich der “Kern” des Faches ist. Am meisten bin ich am überlegen, wo ich die Prioritäten in der Q1 (In Hessen das erste Halbjahr der Oberstufe) legen sollte. Die Themen in dieser Jahrgangsstufe sind objektorientiertes Programmieren, sowie Algorithmen. Zunächst mal die Ausgangssituation: Prinzipiell werden neben Programmierung in Hessen auch noch andere Themen gelernt (Datenbanken, Theoretische Informatik, Netzwerke). Da sich zwei Halbjahre mit der Programmierung beschäftigen (E2: Imperative Programmierung, Q1: Objektorientierte Programmierung) ist dies schon zurecht eines der Schwerpunktthemen im Unterricht.

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

  • Ein 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. Dadurch, dass die Schüler schnell Ergebnisse erzeugen können, Spiele und interaktive Windows-Anwendungen programmieren, soll die Motivation gefördert werden. 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, oft führt kein Weg daran vorbei Sprachelemente erst einmal zu nutzen und später genauer zu verstehen.
  • Ein weiterer 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, dafür können die Schüler ein Programmierkonzept nach dem Anderen lernen. Die Gegner dieses Ansatzes argumentieren damit, dass dieser wenig motivierend ist. Dafür ist für die Schüler klar nachvollziehbar, was gerade passiert. Einer unserer Aufträge als Informatiklehrer ist es meiner Meinung nach die “Magie” aus der Technik zu entmystifizieren. Hier kann es meiner Meinung nach hilfreich sein, sich zunächst stärker auf die grundlegenden Konzepte zu konzentrieren und alles was für die Schüler nicht verständlich sein kann auch erstmal nicht zu benutzen.
  • Darüber hinaus gibt es noch Konzepte wie LOGO oder verschiedene Implementierungen von Turtle-Grafik, 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. Gerade mit Turtle-Grafik habe ich bisher sehr positive Erfahrungen gemacht.

Nachdem ich jetzt das erste Jahr komplett mit Greenfoot gearbeitet habe, muss ich feststellen, dass ich mit dem ersten 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. Die Schüler auch 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. Zudem war die aktuelle 3er Version auch sehr instabil, was am Ende dazu führte, dass wir ein Absturzranking führten.

Mein zweites Problem folgt dann aber auch schon:

  • Wie wichtig ist mir das Programmieren eigentlich überhaupt?
  • Was ist daran wichtig?

Im Informatikunterricht der E2 und Q1 ist es so, dass sich beim Programmieren die Spreu vom Weizen trennt: Der gerne programmiert und dies auch in seiner Freizeit tut, der wird glücklich werden. Wer nur die 2 Stunden absitzt und sich ansonsten nicht mit Informatik beschäftigt, der wird auch am Programmieren scheitern und 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. Mein aktueller Q1-Kurs hat z.B. nach einem programmierintensiven Start in das Schuljahr und erster Untersuchung von Such- und Sortieralgorithmen den Wunsch geäußert einen stärkeren Fokus auf die Algorithmik zu legen. Die Begeisterung ist dabei sprunghaft angestiegen.

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, ….

Andererseits ist das Problemlösen eine der Kernkonzepte unseres Faches. Programmieren ist ein Werkzeug, dass unser Denken erweitert. Zum einen ermöglicht es uns erst, viele Problemstellungen zu bearbeiten und ist daher auch für Nichtinformatiker eine zunehmend wichtigere Fähigkeit. Zum anderen wird 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. Ohne das Programmieren würde im Unterricht sehr viel fehlen.

Vielleicht ist es aber auch gar kein “entweder oder”. Mein erster und aktueller Lösungsansatz ist folgender:

Das Programmieren soll weiterhin als wichtiger Baustein erhalten bleiben. Gleichzeitig soll der Fokus vom Programmieren stärker verschoben werden von “Lernen einer Sprache” hin zu “Lernen eines Werkzeuges zum Problemlösen”. Daer habe ich Java zunächst einmal in die Eistonne gelegt, bin auf die Programmiersprache Python umgestiegen und verwende eine einfache IDE (Thonny).

Die Idee ist 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. So werde ich später natürlich auch die Objektorientierung behandeln und werde auch den ein oder anderen Sortieralgorithmus implementieren lassen. Ich erhoffe mir durch eine Reduzierung auf das Wesentliche beim Programmieren gleichzeitig mehr Zeit zu haben, auch andere Themen einzubinden.

Ich verwende am Anfang noch keine GUIs, sondern schreibe einfache Programme (z.B. Zinsrechner), verwende Turtlegrafik und steige dann auf ein didaktisch möglichst stark reduziertes GUI-Framework (vermutlich http://appjar.info/ ) um, werde aber gleichzeitig auch Bibliotheken benutzen, damit die Schüler “echte” Probleme mit möglichst wenig Code lösen können. Mein Ziel ist es, das bei den Schülern der Eindruck hängen bleibt, dass Programmierung nichts “magisches”, nichts “schwieriges” sein muss. Ich hoffe darauf, dass der ein oder andere Schüler oder Schülerin, die nicht Informatik studiert, trotzdem noch einmal Python installiert um damit “schnell” ein Problem zu lösen. Auch beim Thema Objektorientierung wird es nicht mein Ziel sein, dass die Schüler lernen objektorientierte Programme zu schreiben, sondern dass Objektorientierung verwendet wird, um damit Problemstellungen zu lösen (möglicherweise verwende ich dafür gamegrid, eine gute Python Alternative zu Greendoot.

Ich werde daher auch in der Q1 weniger Zeit für die objektorientierte Programmierung in Anspruch nehmen sondern stärker die informatischen Konzepte (Suchen, Sortieren, Rekursion, Graphen, Bäume, lineare Datenstrukturen, Hashing, …) verwenden. Meine Erfahrungen im letzten Halbjahr waren so positiv, dass ich auch diesesmal wieder einzelne Themen als Referate vergeben werde, so dass die Schüler sich selbst in die Themengebiete einarbeiten können.

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: 25.02.2018 – 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 angekrazt zu haben und daher werde ich den Text sicherlich noch das ein oder andere mal umformulieren, bis ich mit der Form zufrieden bin.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.