Home

Einheiten

„Programmieren gehört zum Handwerkszeug eines jeden Informatikers“. Dieser Satz ist zweifellos richtig, auch wenn, wie Hromkovic [Hrom 08] weiter ausführt, sich die Tätigkeit von Informatikern nicht im Programmieren erschöpft und viele Informatikerinnen und Informatiker in ihrer beruflichen Tätigkeit über das klassische Programmieren hinausgewachsen sind. Programmieren, oder besser die durch Programmieren geschulte Denkweise, beeinflusst das berufliche Denken von Informatikern.
Dies führt freilich zu Missverständnissen. Manche Pädagogen und Bildungsverantwortliche meinen, Programmieren sei eine Profi-Disziplin, die eben von künftigen Informatik-Profis erlernt werden muss. Für Schülerinnen und Schüler, die nicht Informatik-Profis werden wollen, ist Programmieren aber zu schwer und – weil ja „Handwerkzeug der Profis“ –  irrelevant. Diese Vermutung basiert auf einem fundamentalen Missverständnis. Der Wert der Programmierung im Bereich der Allgemeinbildung ist fundamental und geht wesentlich über den Wert des Handwerkzeugs für Profis hinaus.
Zwei Gründe möchten wir dabei besonders in den Vordergrund stellen:

  • Die Fähigkeit, sich korrekt, exakt und eindeutig auszudrücken, weil der „Dialogpartner“, der Computer, unfähig ist, zu improvisieren [Hrom 08] oder Unklarheiten zu überbrücken.
  • Die Fähigkeit, künftige Situationen erschöpfend zu antizipieren und systematisch zu explorieren bzw. auch die Grenzen der Antizipationsfähigkeit zu erkennen und Vorsorge für Situationen zu schaffen, die jenseits der Antizipationsgrenze auftreten können.

Neben diesen beiden Kompetenzbereichen, die für jeden gebildeten Menschen Relevanz haben, lassen sich noch weitere Bildungselemente durch Programmieren vermitteln, etwa konstruktives Denken, experimentelles Erkunden von Lösungsräumen, und nicht zuletzt die Möglichkeit für unterschiedliche Lösungsansätze objektive Bewertungskriterien heranzuziehen (siehe Einheiten zu Suche und zu Sortieren).
Diese Fähigkeiten sind es jedoch wohl nicht, die Gegner des Programmierunterrichts auf den Plan  rufen. Hier tritt ja doch das spielerische Element des Unterrichts zu sehr in den Vordergrund, als dass man die Vermittlung dieser Kompetenzbereiche als zu schwierig vernadern könnte. Die Schwierigkeit des Programmierens liegt vielmehr in der erforderlichen Exaktheit und Eindeutigkeit. Beim Programmieren kann man sich nicht hinter einem elegant umschriebenen „Mach was Du willst! – Ich weiß ja auch nicht wie’s sein soll!“ verbergen. Man muss Position beziehen. Der „Dialogpartner“ Automat springt nicht ein. Er fällt einem nicht ins Wort und beendet auch keinen schlampig oder halb ausgesprochenen Satz. Er glättet auch Widersprüche, die in Anweisungen enthalten sein mögen, nicht aus. Wir dürfen uns nicht einmal auf seinen „Hausverstand“ verlassen, mit dem kleine Fehlerchen in der Kommunikation zwischen Menschen ausgebessert werden, die aber manchmal leider auch zur Quelle tiefgreifender Missverständnisse reifen können. Dies macht Programmieren schwierig. Sich an dieser Exaktheitshürde zu erproben hilft allerdings in der allgemeinen Kommunikationsfähigkeit, auch zwischen Menschen. Anweisungen, an wen auch immer, sollten präzise und eindeutig sein. Selbstverständlich können Anweisungen auch Optionen enthalten. Doch diese sollten explizit sein.
Bleibt der zweite Kernbereich, die Antizipation. Stolpern wir nicht zu oft von einer Situation in die nächste? Führt dieses „Von-der-Hand-in-den-Mund“-Leben nicht zu suboptimalen Lösungen, ja oft genug sogar zu echten Krisen? Nun, es gibt auch andere Möglichkeiten, Antizipation zu üben. Schachspielen könnte man nennen. Doch dies ist kein Unterrichtsfach und im Spiel sehen wir nur zu oft den Grund für eine Niederlage nicht explizit genug. Bei einem Programm, das einen bestimmten Fall nicht berücksichtigte, zeigen geeignete Testdaten indirekt, aber doch sehr klar, wo der Fehler lag. Wir müssen ihn durch Debugging suchen und analysieren. Doch Vorsicht! Zu rasches Ausbessern führt oft nur zu Folgefehlern. Auch dies – erst denken, dann handeln – ist eine Schule für’s Leben!  
Doch bis wir dazu kommen, müssen wir Programme schreiben, die auch tatsächlich von Computern „verstanden“ werden können. Dies zu erlernen erfordert mehr Zeit als wir in den punktuellen Informatik erLeben Einheiten zur Verfügung haben.
Daher wollen wir in Einheit E-P1 beziehungsweise in den Moduln P1 und P2 erst einmal exaktes Formulieren in natürlicher Sprache üben und sehen, dass durch Strukturierung des Textes seine Verständlichkeit steigt. Vorerst wollen wir also „Programme“ schreiben und Algorithmen entwickeln, die von Menschen verstanden werden. Dazu bedarf es noch keiner Programmiersprache. Aber die Kinder sollten üben, künftige Situationen erschöpfend zu antizipieren.
Die Module P3 und P4 behandeln Sprach- und damit auch Kommunikationsstile. Um sie durchzuarbeiten, ist es sinnvoll, wenn die Jugendlichen schon eine Programmier- oder Datenmanipulationssprache, also eine formale Sprache jenseits der Sprache der Mathematik, kennen. Modul P3 kann aber in Teilen auch als Einstieg in die Programmierung, Modul P4 als Einstieg in die Objektorientierung verwendet werden. Modul P5 ist als Sammelmodul zur Rekursivität konzipiert. Rekursivität gehört zu den grundlegenden Denkmustern in der Informatik. Sie wird in der Regel als sehr schwierig bezeichnet. Doch es wird Ihnen gelingen, Beispiele zu finden, die einsichtig und vielleicht sogar lustig sind.
Vorerst, wenigstens in dieser Einheit, wollen wir „Programme“ schreiben und Algorithmen entwickeln, die von Menschen verstanden werden. Dazu bedarf es noch keiner Programmiersprache sondern erst einmal der Fähigkeit, exakt zu formulieren und künftige Situationen erschöpfend zu antizipieren.

 

Literatur
[Hrom 08] Hromkovic J.: Lehrbuch der Informatik: Vorkurs Programmieren, Geschichte und Begriffsbildung, Automatenentwurf; Vieweg + Teubner, Wiesbaden, 2008.