Plädoyer für den Programmierunterricht
Artikel erschienen in Swiss IT Magazine 2010/03
Programmieren gehört unbestrittenermassen zum unerlässlichen Handwerkszeug einer jeden Informatikerin und eines jeden Informatikers. In der Frühzeit des Computerzeitalters wurden die Konzepte Algorithmen und Programmierung denn auch alsbald als gleichermassen revolutionär wie grundlegend erkannt und in den 1970er und 1980er Jahren in vielen Ländern als vollwertiger Bestandteil in den Gymnasiallehrplan aufgenommen. Mit der Zeit reduzierte sich der Informatikunterricht jedoch zu einer blossen Ausbildung zur Erlangung des «Computerführerscheins». Die Vermittlung von grundlegendem Informatikwissen wurde durch das Erlernen des Umgangs mit kurzlebigen und pädagogisch ungeeigneten Softwaresystemen ersetzt. Die Bildungspolitiker und Schulen erkannten, dass eine solche Informatik weder Substanz noch Nachhaltigkeit besitzt und eliminierten sie kurzerhand: Heute gibt es in den meisten Gymnasien des deutschsprachigen Raums keinen eigentlichen Informatikunterricht mehr.
Dies hat sich allerdings im Nachhinein als Fehlentscheidung erwiesen. Die Informatik hat sich nämlich in den letzten zwei Jahrzehnten gewaltig entwickelt. Heute müsste eigentlich jedes moderne Gerät mit «Informatics inside» beschriftet sein und jedes Forschungsresultat in vielen klassischen Gebieten wie Physik, Chemie, Biologie etc. mit «Informatics underneath». Nicht ganz zu Unrecht kennzeichnet der Turing-Preisträger Jim Gray die Informatik als die «neue Mathematik». Dank ihr konnten in vielen Gebieten der Grundlagenforschung sowie der angewandten technischen Disziplinen wesentliche Fortschritte erzielt werden. Die Anzahl der Anwendungen wie auch der Forschungsrichtungen in der Informatik selbst ist in den letzten Jahren so stark gewachsen, dass es sehr schwierig geworden ist, ein einheitliches, klares Bild der Informatik zu vermitteln.
Daher muss die Informatik «bodenständig» bleiben und wie in anderen Fächern mit der Begriffsbildung und den Grundkonzepten beginnen. Die historisch gesehen wichtigsten Begriffe, welche die Informatik zur selbstständigen Disziplin gemacht haben, sind die Begriffe «Algorithmus» und «Programm». Und wo könnte man die Bedeutung dieser Begriffe besser vermitteln als beim Programmieren? Dabei verstehen wir unter Programmieren nicht nur eine für den Rechner verständliche Umsetzung eines bekannten Algorithmus zur Lösung eines gegebenen Problems, sondern vielmehr die Suche nach konstruktiv angelegten Lösungswegen für eine gegebene Aufgabenstellung. Wir fördern dabei einerseits – ähnlich wie im Mathematikunterricht – die Entwicklung des allgemeinen lösungsorientierten Denkens und damit der Problemlösefähigkeit sowie andererseits die Erziehung zur Klarheit und Präzision in der Ausformulierung einmal gefundener Lösungen.
Programme zu schreiben bedeutet in der Tat, eine synthetische, sehr systematisch aufgebaute Sprache – genannt Programmiersprache – zu verwenden, um Abläufe zu formulieren. Programmiersprachen verlangen, dass man sich korrekt, exakt und eindeutig ausdrückt, weil der «Dialogpartner» (nämlich der Computer) unfähig ist, zu improvisieren. Absolute Präzision und Klarheit in der Formulierung der Anweisungen sind unabdingbare Voraussetzungen für die Erklärung der Lösungswege. Nur so kann die intellektlose Maschine sie verstehen und umsetzen. Dieser Zwang zur unmissverständlichen Sprache trägt enorm zur Förderung der Entwicklung der Kommunikationsfähigkeit bei.
Ein weiterer wesentlicher Lerneffekt bei der Entwicklung komplexer Programme beruht auf der Erziehung zum Denken in Strukturen und zur modularen Vorgehensweise. Die Modularität ist archetypische Grundlage für sämtliche konstruktiven Wissenschaften einschliesslich etwa Architektur, Bauingenieurwesen, Elektrotechnik und Maschinenbau sowie Verfahrenstechnik. Man beginnt mit einfachen Systemen für einfache Aufgabenstellungen, deren korrekte Funktionstüchtigkeit leicht zu überprüfen ist. Diese einfachen Systeme verwendet man dann als (Grund-)Bausteine (Module) zur Entwicklung komplexerer Systeme, wobei man diese komplexeren Systeme selbst wieder als Bausteine verstehen kann, aus denen dann noch vielschichtigere Systeme gefertigt werden können usw. Programmieren ist also ein ideales Vehikel zum Unterricht in der systematischen Vorgehensweise beim Entwurf und Bau komplexer Systeme aller Arten.
Darüber hinaus bietet Programmieren einen hervorragenden Einstieg in die Welt vieler weiterer allgemeiner und grundlegender Konstruktionsprinzipien wie etwa die Trennung von Schnittstelle und Implementation oder das Verfahren des «divide et impera» (Beherrschen durch Aufteilen), aber auch in die Welt fortgeschrittener Begriffe der konstruktiven Wissenschaften wie Modellierung, Verifikation, Berechnungskomplexität (Rechenaufwand) und Determiniertheit. Wenn man lernt, wie Programme nach unterschiedlichen Kriterien wie etwa Korrektheit, Effizienz, Länge, Verständlichkeit, modulare Struktur, Benutzerfreundlichkeit oder Verträglichkeit beurteilt werden können, versteht man auch, dass kein bestehendes System vollkommen ist. Dies führt zur Fähigkeit, Produkte aus höherer Warte kritisch zu durchleuchten und zu bewerten sowie über Verbesserungen nach ausgewählten Kriterien nachzudenken.
Zusammenfassend trägt der Programmierunterricht auf unterschiedlichen Ebenen wesentlich zum klaren und präzisen Denken und Arbeiten, zur allgemeinen Problemlösekompetenz, zur eindeutigen Kommunikation, zum strukturellen Denken und, last but not least, zur Entwicklung konstruktiver Fähigkeiten bei. Über die Fertigkeit, in bestimmten Programmiersprachen programmieren zu können hinaus erwerben die Schülerinnen und Schüler anhand geeigneter Projekte die Fähigkeiten, die Denkweisen der Theorie und der Praxis miteinander zu verbinden und fächerübergreifend im Team zu arbeiten. Indem sie den ganzen Weg von der Idee bis zum fertigen Produkt selbst miterleben, erwerben sie ein fundiertes Wissen über Entwicklungsprozesse im Allgemeinen.