Programmieren für alle |
|
|
Jede Schülerin und jeder Schüler sollte lernen zu programmieren. Programmieren trainiert Fähigkeiten, die für das aktive Teilnehmen an der Gesellschaft von zentraler Bedeutung sind:
Problemlösungen planen
Gedanken diszipliniert organisieren
auf Details achten
Selbstkritik üben
Damit fällt der Nutzen einer Ausbildung im Programmieren mit dem Nutzen einer soliden mathematischen Grundbildung zusammen.1 Das Programmieren ermutigt zu einer aktiven Auseinandersetzung mit Problemen: es gibt direktes, schrittweises Feedback über Erfolg und Mißerfolg, die programmierten Lösungen sind wiederholbar und lassen sich verallgemeinern, und der Weg dorthin erfordert präzises Denken und präzisen sprachlichen Ausdruck. Das konstruktive Vorgehen fördert Kreativität.
Programmieren unterscheidet sich methodisch vom traditionellen Mathematikunterricht: dort ist (trotz der Betonung von "`experimentellem Entdecken"' in neueren Lehrplänen) das Feedback häufig verzögert, direkte Erfolgserlebnisse sind schwer herzustellen und die Präzision des eigenen Denkens läßt sich ebenfalls nur indirekt und verzögert kontrollieren. Schülerinnen und Schüler empfinden die Mathematik nur selten als geeignetes Ausdrucksmittel für ihre Kreativität.
Damit verdient der Unterricht im Programmieren eine eigenständige Rolle in der Schule. Insbesondere sind folgende Aspekte von Bedeutung:
In den letzten Jahren wurden Lehrmethoden und unterstützende Software entwickelt und erprobt, die erst einen effektiven Programmier-Unterricht ermöglichen.
Der traditionelle Informatik-Unterricht in Deutschland hat diese Lehrmethoden bisher noch nicht berücksichtigen können und schöpft damit das Potential eines Programmierunterrichts nicht aus.
Diese Lehrmethoden sind mit vergleichsweise geringem Einführungs- und Fortbildungsaufwand für Lehrerinnen und Lehrer verbunden.
Dieses Papier ist eine Untersuchung der Möglichkeiten einer breiten Programmierausbildung an den Schulen und die zu erwartenden Verbesserungen von Basiskompetenzen. Im Mittelpunkt steht dabei das Konzept DEINPROGRAMM, das die Entwicklung und Bereitstellung von Lehrmaterialien und unterstützender Software vorsieht, die kompakte Ausbildung von Lehrerinnen und Lehrern, sowie Betreuung und Evaluation der Umsetzung in der Unterrichtspraxis. DEINPROGRAMM basiert auf erprobten Prinzipien, die sich in der Unterrichtspraxis hervorragend bewährt haben.
Der derzeitige in Deutschland praktizierte Informatik-Unterricht beruht auf einem traditionellen Modell der Programmierausbildung, dessen Wurzeln im algorithmischen Ansatz der 80er Jahre liegt. Seitdem sind allerdings deutlich effektivere Modelle für die Programmierausbildung entwickelt worden, die vornehmlich aus der Programmiersprachenforschung stammen.
Dieses Kapitel kontrastiert das traditionelle Modell mit einem neueren und effektiveren didaktischen Ansatz, der auf der funktionalen Programmierung basiert. Während das traditionelle Modell vornehmlich darauf zielt, daß sich die Schülerinnen und Schüler IT-Kompetenzen aneignen, zielt der neue Ansatz auf eine Verbesserung mathematischer Fähigkeiten bei Modellierung, Abstraktion und Problemlösung; die Bildung von IT"=Kompetenzen ist dabei ein (angenehmer) Nebeneffekt.
Die traditionelle Programmierausbildung (sowohl im Informatik-Unterricht als auch im Studium) tut sich oft schwer, die in der Einleitung erwähnten grundlegenden Fähigkeiten zu identifizieren und zu fördern: effektiver Unterricht erfordert Training, und das bedeutet, daß die Schülerinnen und Schüler selbst konkrete, lauffähige Programme schreiben. Dazu müssen sie eine konkrete Programmiersprache erlernen.
In der traditionellen Programmierausbildung für Anfänger ist es dabei üblich, Programmiersprachen und -umgebungen zu benutzen, die aus der professionellen Software-Entwicklung stammen -- besonders populär sind immer noch Pascal/Delphi, inzwischen C++ und Java. Diese sind jedoch für Anfänger schlecht geeignet:
Die Sprachen sind sehr umfangreich.2 Damit nehmen die Details der Programmiersprache einen Großteil der Ausbildung in Anspruch. Es bleibt wenig Zeit dafür, die Grundkonzepte des Programmierens zu identifizieren oder gar zu behandeln und deren Einsatz zu trainieren.
Die Programmierumgebungen sind für professionelle Software-Entwickler entwielt worden, die bereits programmieren können. Dementsprechend setzen sie vieles voraus, das Anfänger erst noch lernen müssen. Insbesondere liefern sie für Anfänger vollkommen ungenügendes Feedback, wenn es Probleme gibt.
Letzterer Aspekt ist von besonderer Bedeutung: Die Freude am eigenständigen Lernen braucht regelmäßige Erfolgserlebnisse. Mißerfolge wirken sich in der Anfangsphase eines Lernprozesses oft katastrophal aus. Dies ist eines der entscheidenden Probleme der traditionellen Mathematikausbildung: das erste spürbare Erfolgserlebnis bei der Beschäftigung mit einem Problem ist oft erst seine vollständige Lösung. Schüler, welche auf dem Weg zur Lösung nicht schnell sichtbare Fortschritte machen, geben oft auf. (In einer traditionellen universitären Programmierausbildung ist es nicht anders.) Dementsprechend schrumpfen die meisten Informatik-Kurse im Verlauf der Oberstufe um die Hälfte oder sogar mehr.
Hinzu kommt, daß die erlernten Fähigkeiten in einer konkreten Programmiersprache sich selten auf andere Sprachen übertragen lassen -- ein fataler Nachteil angesichts des Tempos, mit dem neue Sprachen auf dem Markt erscheinen.
Damit sind die Resultate einer traditionellen Programmierausbildung wenig ergiebig: da in der Ausbildung keine Zeit bleibt, fundamentale Konzepte systematisch zu vermitteln, sind diese letztlich nur autodidaktisch zugänglich. Damit aber verkümmert der Unterricht oft zu einer reinen Polarisation zwischen den Autodidakten und denjenigen Schülerinnen und Schülern, die den Unterricht ohne Gewinn wieder verlassen.
Die Autodidakten fallen dabei häufig auf Ad-hoc-Methodik für die Entwicklung von Programmen zurück: Da die Programme selten auf Anhieb laufen, werden sie einfach so lange geändert, bis sie für die vorgesehenen Beispiele funktionieren. Nicht nur ist diese Vorgehensweise hochgradig unsystematisch -- sie führt zu schlecht lesbaren, schlecht erweiterbaren und häufig inkorrekten Programmen.
Aus den angeführten Gründen empfehlen gängige Didaktikkonzeptionen für den Informatik"=Unterricht, die konkrete Programmierung so weit wie möglich nach hinten zu verlegen oder nach Möglichkeit ganz wegzulassen [5].
Sollen also Schülerinnen und Schüler vom enormen Potential eines Programmierunterrichts profitieren, ist es ein grundlegendes Umdenken in der Didaktik des Fachs erforderlich.
Die grundlegenden Konzepte des Programmierens haben sich -- trotz anhaltend rasanter Entwicklung im Hardware-Sektor -- in den vergangenen 20 Jahren kaum verändert: wer diese Konzepte identifiziert und verstanden hat, kann sie auch in der absehbaren Zukunft noch gewinnbringend anwenden. Die in der Einleitung aufgeführten Fähigkeiten gar sind völlig zeitlos. Ein erfolgreicher Programmierunterricht, der diese Fähigkeiten fördert, ist möglich. Folgende Aspekte sind dabei von zentraler Bedeutung:
eine didaktische Konzeption, welche die Grundkonzepte der Programmierung gezielt und systematisch identifiziert und entwickelt
der Einsatz einer kompakten Notation für Programme, die es erlaubt, diese Konzepte nachvollziehbar darzustellen
eine Programmierumgebung, welche die Programme in dieser Notation ausführen kann und das Programmieren realistischer Problemlösungen ermöglicht
Die Programmiersprachen-Forschung hat sogenannte funktionale Programmiersprachen entwickelt, deren Notation und Arbeitsweise an die mathematische Algebra angelehnt ist. Funktionale Programmiersprachen haben wesentliche Vorteile gegenüber herkömmlichen Sprachen:
eine besonders kompakte Notation
geringer Sprachumfang
mächtige Sprachkonzepte
Die kompakte Notation ist für praktischen Unterricht von großer Bedeutung, weil die Programme besonders kurz sind und damit substantielle Beispiele vollständig auf eine Tafel oder Overhead-Folie passen. (Programme in funktionalen Sprachen sind in der Regel 2-10mal kürzer als Programme in traditionellen Sprachen.) Der geringe Sprachumfang garantiert, daß die Lehrerin bzw. der Lehrer nur einen kleinen Teil der Unterrichtszeit mit spezifischen Details der Sprache verbringen müssen.
Funktionale Sprachen erlauben es, auch im Unterricht substantielle, vollständige Programme zu schreiben. Gleichzeitig lassen sich die Konzepte der funktionalen Sprache später besonders gut auf die Arbeit in anderen Sprachen übertragen -- Schülerinnen und Schüler, die eine funktionale Sprache beherrschen, haben erfahrungsgemäß wenig Schwierigkeiten damit, andere Sprachen rasch und ggf. im Selbststudium zu lernen. Umgekehrt ist dies nicht der Fall.
Die Regeln, nach denen funktionale Programme ablaufen, sind die Regeln der Schulalgebra: der Umgang mit funktionalen Programmen ist also direkte, konstruktive Beschäftigung mit Mathematik, und schafft zusätzliche Motivation.
Mit der Programmiersprache allein ist es nicht getan: funktionale Programmiersprachen ermöglichen außerdem die Realisierung interaktiver Programmierumgebungen für Anfänger, die mit den Schülern wachsen. Dadurch, daß sie "`klein anfangen"', anfangs also speziell auf einen für Anfänger zugänglichen Sprachumfang eingestellt werden können, liefern sie präzises Feedback bei Problemen.
Programmiersprache und Programmierumgebung gehen dabei Hand in Hand: funktionale Programmiersprachen ermöglichen -- ebenfalls im Gegensatz zu herkömmlichen Sprachen -- eine systematische Aufteilung der Sprache in Schichten. Mit dem Fortschritt der Schüler kommen neue Schichten hinzu, die neue Möglichkeiten eröffnen.
Die PISA-Studie beschreibt eine Skala von Kompetenzstufen mathematischer Grundbildung, die in Verbindung mit den nationalen Ergänzungstest folgendermaßen eingeteilt und charakterisiert werden [8]:
15jährige sollten diesen Standard erreichen.
Die Stufen II-V haben dabei den Begriff des Modellierens gemeinsam -- das Lösen einer anwendungsbezogenen Aufgabe durch Mathematisierung, verstanden als kognitiver Vorgang.
Nach diesem Verständnis ist aber Programmieren, so wie hier vorgestellt, eine Form der Mathematisierung. Tatsächlich findet sich im Buch von Klaeren und Sperber [7], einer Einführung in das Programmieren und die Informatik für Studienanfänger, ein Schaubild über den Vorgang des Programmierens, das fast identisch mit einer Abbildung im Bericht der PISA-Studie über den Vorgang des Mathematisierens ist, obwohl beide Abbildungen unabhängig voneinander entstanden -- siehe Abbildung 1. Beide beschreiben einen zyklischen Problemlösungsprozeß, der sich formaler Mittel bedient: Ein Problem der realen Welt wird in ein formales System übersetzt -- durch "`Mathematisierung"' bzw. durch die Kombination aus "`Erklären"', "`Zuhören"', "`Verstehen"' und "`Modellieren"'. Dort wird das Modell interpretiert und bzw. in die realen Welt durch einen erneuten Erklärungsschritt rückübersetzt. Entstehende Modelle werden bewertet -- "`validiert"' bzw. "`verifiziert"' -- und führen ggf. zu weiteren Iterationen des Prozesses. Derartige zyklische Problemlösungsprozesse setzen auf Kreativität und Experimentation. Damit unterscheiden sie sich stark von Prozessen, die nur eine starre Zuordnung zwischen Problemen und formalen Modellierungstechniken zulassen, und wie sie oft im deutschen Mathematikunterricht praktiziert werden [8]. Genau hier aber sieht die PISA-Studie den Hauptgrund für das schlechte Abschneiden deutscher Schüler im Bereich "`Mathematische Grundbildung"'.
Gegenüber der traditionellen Form des Modellierens im Unterricht "`mit Papier und Bleistift"' kann das Programmieren wesentliche spezifische Elemente beitragen, um solche kreativitätsfördernde Problemlösungsprozesse zu fördern:
Ein Programm läuft, insbesondere kann es sehr rasch auf verschiedene Eingaben angewendet werden. Damit erlaubt Programmieren Schülerinnen und Schülern, die Plausibilität und Korrektheit ihres Modells direkt selbst nachzuvollziehen.
Außerdem erlauben Programme die Bearbeitung realistischer Probleme, deren Größe die Möglichkeiten des Mediums "`Papier & Bleistift"' bzw. des Unterrichtsrahmens normalerweise übersteigt.
Neugier und Experimentierfreudigkeit werden in besonderer Weise gefördert.
Das traditionell leicht angestaubte Image mathematischer Grundbildung wird aufgewertet.
Damit wird sich die Motivation der Schülerinnen und Schüler, Modellierungskompetenzen zu bilden, deutlich verstärkt.
Die PISA-Studie mißt außerdem der kommunikativen Dimension einer mathematischen Grundbildung besondere Bedeutung zu: sie sieht die Mathematik als ein Ausdrucksmittel für die Interpretation von Problemen und Lösungen sowie die Formulierung von Argumenten.
Zwar zeichnen sich Computerprogramme dadurch aus, daß ein Computer sie "`versteht"'. Gute Programme jedoch richten sich primär an menschliche Leser und überzeugen als klare Formulierung der Lösung eines Problems.3 Damit ist Programmierung auch ein effektives kommunikatives Medium. Die besondere Bedeutung von Präzision und Verständlichkeit wirkt sich nebenbei auch bewußtseinsschärfend auf die sprachlichen Fähigkeiten der Schülerinnen und Schüler aus.
Damit ist Programmieren eine effektive Ergänzung zur mathematischen Grundbildung, die gerade die wesentlichen Kompetenzen der Schülerinnen und Schüler in besonderem Maße schärft. Der gegenwärtige Informatik-Unterricht ist für die Förderung dieser Kompetenzen jedoch wenig geeignet.
Eine effektive Programmierausbildung erfordert das Zusammenspiel einer Reihe von Elementen: DEINPROGRAMM baut auf einem möglichst einfachen aber umfassenden Verständnis von Programmen auf; die Umsetzung dieses Verständnisses erfordert wiederum den Einsatz einer geeigneten Programmiersprache. Anfänger benötigen zur Unterstützung des Lernprozesses eine geeignete Programmierumgebung. Schließlich sind geeignete Anwendungen gefragt, welche Schülerinnen und Schüler dauerhaft zu selbstreguliertem Lernen motivieren.
Die für die Ausbildung besonders geeignete Programmiersprache ist Scheme [6]. Sie hat folgende entscheidende Vorteile gegenüber anderen Sprachen:
Scheme ist sehr klein: die gesamte Ausbildung kommt mit nur 6-8 Sprachelementen aus, während in jeder anderen Sprache Dutzende notwendig sind.4 Damit sind die Elemente der Sprache leicht zu merken; lästiges Nachschlagen entfällt weitgehend.
Scheme ist eine funktionale Sprache, die auf den Regeln der Schulalgebra basiert.
Scheme-Programme sind sehr kurz, ca. 3-10mal kürzer als die entsprechenden Programme in anderen schulüblichen Sprachen. Substantielle Programme passen damit auf die Tafel oder auf Folien.
Die Verwendung von Scheme erlaubt den Schülerinnen und Schülern, bereits in der ersten Unterrichtsstunde vollständige Programme zu schreiben und laufen zu lassen. Gleichzeitig wächst die Sprache mit den Aufgaben: Scheme ist geeignet, auch komplexe, interaktive Programme mit grafischer Benutzeroberfläche zu schreiben. Konzepte anderer Programmiersprachen lassen sich grundsätzlich auch in Scheme formulieren: damit haben es Scheme-Könner erfahrungsgemäß leicht, sich im Selbststudium andere Sprachen anzueignen.
Eng mit der Programmiersprache verbunden ist die Wahl der Programmierumgebung. Die Verwendung von Scheme erlaubt dabei besonders gut die Konstruktion von Umgebungen, die speziell auf Anfänger zugeschnitten sind. Geeignete Basis ist dabei die DrScheme-Umgebung [4, 2] der PLT-Gruppe, einem Zusammenschluß von Dozenten mehreren amerikanischen Universitäten und Colleges unter Leitung von Prof. Matthias Felleisen. Die DrScheme-Umgebung hat folgende herausragende Eigenschaften, die sie für die Anfängerausbildung besonders geeignet machen:
DrScheme ist interaktiv und ermöglicht das schrittweise sofortige Testen jedes Programmteils.
DrScheme ermöglicht, den angebotenen Sprachumfang Schritt für Schritt um genau die Elemente zu erweitern, welche die Schüler gerade lernen. Damit kann DrScheme besonders präzise Fehlermeldungen ausgeben und die Schüler aktiv bei der Fehlersuche unterstützen.
DrScheme ermöglicht, den algebraischen Vorgang des Programmablaufs zu visualisieren und erlaubt den Schülern damit, ihre Intuition nachzuvollziehen und zu entwickeln.
DrScheme erlaubt die Entwicklung auch anspruchsvoller Programme mit grafischer Benutzeroberfläche, bis hin zu professionellen Applikationen.
DrScheme ist frei verfügbar und läuft auf allen gängigen Computern und Betriebssystemen. Damit entfällt der Kauf kommerzieller Software und die Schüler können DrScheme für den Gebrauch zu Hause herunterladen.
Die Anzahl der Kerninhalte einer Programmierausbildung ist klein. Ihre Natur, und Bedeutung und Einsatz bei der Problemlösung läßt sich anhand von Scheme-Programmen besonders gut erkennen:
Diese Inhalte unterscheiden sich erheblich in Ausprägung und Anordnung der Inhalte einer traditionellen Programmierausbildung: Das liegt wiederum an der Verwendung der funktionalen Sprache Scheme anstatt der traditionellen imperativen Sprachen wie Pascal, C oder Java.
Besonders drastisch wirkt sich aus, daß imperative Sprachen nicht auf algebraischen Modellen basieren. Sie erlauben damit weder die Entwicklung eines systematischen Modells für ihre Arbeitsweise noch eine verständliche Visualisierung des Programmablaufs. Scheme ist direkt auf einem algebraischen Modell aufgebaut; der Vorgang der Programmauswertung läßt sich deshalb besonders einfach und präzise visualisieren, sowohl an der Tafel bzw. auf Papier als auch innerhalb der Programmierumgebung.
In Scheme sind alle Größen eines Programms "`Werte erster Klasse"', lassen sich also auf die gleiche Art und Weise manipulieren. In herkömmlichen Sprachen wie C und Java sind viele Größen (z.B. Prozeduren, Klassen, Typen, Interfaces) Objekte zweiter Klasse, für die spezielle Regeln gelten. Diese Gleichartigkeit aller Größen in Scheme ist für Schüler einfach zu merken und macht die Sprache sehr flexibel. Insbesondere erlaubt Scheme, über alle Größen zu abstrahieren und fördert damit den Umgang mit leistungsfähigen Abstraktionsmechanismen, die in herkömmlichen Sprachen gar nicht formulierbar sind.
Die leistungsfähigen Abstraktionsmittel wirken sich auch auf die Kompositions- und Datenmodellierungsfähigkeiten: während die Mittel hierfür in herkömmlichen Sprachen fest eingebaut und nicht erweiterbar sind, können Scheme-Programme beliebige neue definieren. Damit stehen den Schülerinnen und Schülern zusätzliche Mittel für den Ausdruck ihrer Kreativität zur Verfügung; bei der Verwendung herkömmlicher Sprachen müssen sie deren Beschränkungen lernen.
Die Rekursion nimmt eine besondere Rolle ein: in Scheme ist sie ein natürliches Ausdrucksmittel, das selbst in trivialen Programmen häufig vorkommt. Rekursion ist in Scheme für jede Art von Wiederholung sowie für die Verarbeitung induktiver Datenstrukturen zuständig. Damit können Schüler die Rekursion in Scheme besonders effektiv trainieren und an vielen Varianten studieren. Im Rahmen einer traditionellen Ausbildung ist sie erfahrungsgemäß den Schülern nur schwer zugänglich; diese erzwingen den Einsatz von speziellen, komplizierten Schleifenkonstrukten und erschweren die Definition induktiver Datenstrukturen. Lehrer meiden sie darum oft so lange wie möglich. Die Rekursion ist aber ein fundamentaler Baustein von Programmen in Praxis und Theorie gleichermaßen. Diese Lücke wiegt also besonders schwer in einer traditionellen Ausbildung.
Die Behandlung von Zustand unterscheidet sich ebenfalls: in einer traditionellen Ausbildung steht sie, erzwungen durch den Einsatz einer imperativen Sprache, meist ganz am Anfang. Die Verwendung von Zustand führt aber inhärent zu schwer erklärbaren und fehleranfälligen Programmen. In Scheme - das mächtigere sprachliche Mittel anbietet -- ist sie darum für Spezialanwendungen vorbehalten und steht dementsprechend weit hinten im Lehrplan.
Da die Darstellung der spezifischen Details von Scheme als Programmiersprache im Unterricht weitaus weniger Platz benötigen als bei herkömmlichen Sprachen, ist in DEINPROGRAMM Zeit für die präzise Behandlung der eigentlichen Grundlagen des Programmierens:
Die Entwicklung von Modellierungsfähigkeiten baut auf einer Sammlung von kompakten Richtlinien für das Entwickeln von Programmen auf ("`Mantras"' in der Terminologie von Klaeren/Sperber [7] bzw. design guidelines bei Felleisen et al. [3]). Diese Richtlinien entstehen aus der Beobachtung echter Problemlösungen; die Schülerinnen und Schüler können sie also selbst entdecken und damit auch anwenden. Die wichtigsten Bestandteile dieser Richtlinien sind:
die Beschreibung der an einem Problem beteiligten Daten
die Beschreibung der gewünschten Operation auf den Daten, die das Programm berechnen soll
die Aufstellung von Beispielen
die Entwicklung einer Programmschablone
die Vervollständigung der Schablone zu einem lauffähigen Programm
Fehleranalyse und -behebung
Wiederum ist die Verwendung von Scheme entscheidend für den Erfolg dieser Vorgehensweise: die kompakte Schreibweise erlaubt es, die Richtlinien direkt an den Programmen abzulesen: insbesondere ist der Zusammenhang zwischen der Datenbeschreibung und der Programmschablone direkt erkennbar.5 Damit ermutigen die Richtlinien umgekehrt zu systematischem Vorgehen beim Erstellen der Programme: jede Stufe führt zu einem Ergebnis, das sich überprüfen läßt. Damit haben Lehrer und Schüler die Möglichkeit, schnell und präzise die Ursache von auftretenden Problemen zu finden und diese zielgerichtet zu beheben.
Während die Schülerinnen Schüler mehr und mehr dieser Richtlinien entdecken und anwenden lernen, entwickeln sie zunehmend Fähigkeiten im systematischen Zerlegen von Problem und der Konstruktion von Lösungen. Durch diese Lösungen ziehen sich häufig wiederkehrende Programmiermuster, denen im Unterricht besondere Bedeutung beigemessen wird. Durch ihre Anwendung wird es möglich, auch diejenigen Probleme anzugehen, deren Lösungsstrategie sich der anschaulichen Intuition entzieht -- dazu gehört beispielsweise die Rekursion, die wegen der Vermittlungsschwierigkeiten im traditionellen Unterricht häufig weggelassen wird.
Die Anwendung der Modellierungs-Richtlinien folgt einer Systematik, die von der Identifikation der am Problem beteiligten Daten über eine informelle Spezifikation und die Programmierung der Schnittstelle zur fertigen Lösung führt. Jeder Schritt der Systematik ist dabei für Schüler und Lehrer gleichermaßen nachvollziehbar und bietet damit wertvolle Anhaltspunkte für Hilfe bei Schwierigkeiten, ebenso wie die Bewertung.
Schüler brauchen beim Schreiben von Programmen gerade am Anfang kontinuierliche Anhaltspunkte für ihren Fortschritt und aktive Unterstützung bei auftretenden Problemen.
Die Design-Richtlinien erlauben es Schülern und Lehrern gleichermaßen, sich über ihren Fortschritt bei der Lösung eines Problems kontinuierlich zu vergewissern. Die Richtlinien helfen dabei erfahrungsgemäß bei vielen mentalen Blockaden, die Schülern Schwierigkeiten bereiten: sie trennen die systematischen von den kreativen Aspekten des Problemlösungsprozesses und erlauben damit den Schülern, sich auf diesen kreativen Teil zu konzentrieren.6
Schülerinnen und Schüler sind besonders gut motiviert, wenn sie bereits ganz am Anfang ihrer Ausbildung in die Lage versetzt werden, eigenständig vollständige Programme zu schreiben. "`Eigenständig"' heißt dabei ohne die Hilfe des Lehrers oder eines Mitschülers, der über die Schulter schaut oder gar die Tastatur in die Hand nimmt. Dabei machen sie Fehler -- selbst professionelle Programmierer geben nicht auf Anhieb korrekte Programme ein, sondern korrigieren diese in der Interaktion mit ihrer Programmierumgebung.
Damit ist eine Programmierumgebung, die speziell auf Anfänger zugeschnitten ist, kein Luxus: Ohne sie geben viele Schülerinnen und Schüler (erfahrungsgemäß besonders die Mädchen) oft früh die aktive und kreative Auseinandersetzung mit dem Programmieren auf. Eine Umgebung wie DrScheme kann die Schülerinnen und Schüler in dieser kritischen Phase unterstützen. Gleichzeitig erlaubt die Programmiersprache Scheme, bereits am Anfang der Ausbildung substantielle Programme zu schreiben, die echte Probleme aus dem Alltag lösen.7
In der Ausdrucksstärke der Sprache liegen weitere Chancen, Schülerinnen und Schüler zum eigenständigen Programmieren anzuhalten:
Scheme besitzt eine flexible Notation, die als Substrat für nicht-triviale interaktive Anwendungen, kleine Expertensysteme, Simulationen oder Adventure-Spiele dienen kann. Solche Anwendungen spornen erfahrungsgemäß die Schüler zu kreativem Engagement an, weit über die eigentliche Aufgabenstellung hinaus.
Die Realisierung von eigener Web-Server-Software und grafischen Benutzeroberflächen animiert Schüler zusätzlich, Programme zu schreiben, die über die formalen Anforderungen hinaus gehen.
[1] |
BAUMERT, JüRGEN, ECKHARD KLIEME, MICHAEL NEUBRAND, MANFRED PRENZEL, ULRICH SCHIEFELE, WOLFGANG SCHNEIDER, PETRA STANAT, KLAUS-JüRGEN TILLMANN MANFRED WEIß (): PISA 2000. Leske + Budrich, Opladen, 2001.
|
[2] |
DrScheme. http://www.drscheme.org/.
|
[3] |
FELLEISEN, MATTHIAS, ROBERT BRUCE FINDLER, MATTHEW FLATT SHRIRAM KRISHNAMURTHI: How to Design Programs. MIT Press, 2001. http://www.htdp.org/.
|
[4] |
FINDLER, ROBERT BRUCE, , CORMAC FLANAGAN, MATTHEW FLATT, SHRIRAM KRISHNAMURTHI MATTHIAS FELLEISEN: DrScheme: A Programming Environment for Scheme. Journal of Functional Programming, 12(2), 2002.
|
[5] |
HUBWIESER, PETER: Didaktik der Informatik. Springer, 2001.
|
[6] |
KELSEY, RICHARD, WILLIAM CLINGER JONATHAN REES: Revised Report on the Algorithmic Language Scheme. Higher-Order and Symbolic Computation, 11(1):7-105, 1998.
|
[7] |
KLAEREN, HERBERT MICHAEL SPERBER: Vom Problem zum Programm. Teubner, 2001.
|
[8] |
KLIEME, ECKHARD, MICHAEL NEUBRAND OLIVER LüDTKE: Mathematische Grundbildung: Testkonzeption und Ergebnisse, 3, 139-190. BAUMERT, JüRGEN . [1], 2001.
|
[9] |
MINISTERIUM FüR KULTUS, JUGEND UND SPORT BADEN-WüRTTEMBERG: Lehrplan für das Fach Mathematik in der Kursstufe des Gymnasiums. Kultus und Unterricht, (Lehrplanheft 3):189-194, 2001.
|
1 Damit ist eine Grundbildung gemeint, die der "`Mathematik als Prozeß"' neben der "`Mathematik als Produkt"' erhebliche Bedeutung zusteht, wie es zum Beispiel der Lehrplan Mathematik in Baden-Württemberg [9] vorsieht, der eine "`anwendungs- und problemlöseorientierte Mathematik"' besonders betont.
2 Die Sprachdefinition von Pascal benötigt 300, die von Java 900 Seiten, die von C++ über 1000 Seiten.
3 Auch dies ist ein Aspekt, in dem traditionelle Programmiersprachen und die in ihnen geschriebenen Programme versagen: Sie besitzen nicht die nötige Knappheit, Präzision und Klarheit, um als effektives Kommunikationsmittel zwischen Menschen zu dienen. Aus diesem Grund werden ihnen in der IT-Praxis spezielle Modellierungssprachen und -werkzeuge zur Seite gestellt, welche die Lücke schließen sollen. Leider führt die Benutzung von Modellierungswerkzeugen dazu, daß zwei Modelle erstellt und gewartet werden müssen: eins im Modellierungswerkzeug und eins im Programm. Obwohl diese eigentlich identisch sein sollten, driften sie in der Praxis unweigerlich auseinander. Dieser Bruch führt wiederum zu einer ganzen Reihe neuer Probleme.
4 Die Sprachdefinition von Scheme paßt auf 50 Seiten.
5 Damit unterscheidet sich dieser Ansatz von einer traditionellen Ausbildung, in der die Programmiersprache nicht ausdrucksstark genug ist, um die Richtlinien präzise zu illustrieren. Das Ergebnis sind vage und allgemeine Vorschläge für das Programmschreiben, die wenig direkte Anwendbarkeit in der Praxis haben.
6 In diesem Aspekt versagt wiederum die traditionelle Programmierausbildung, weil sie den Großteil ihrer Aufmerksamkeit den Details einer Programmiersprache widmet. Damit ist der Aufwand, eine kreative Idee in die spezielle Notation einer Sprache zu übersetzen, fast immer größer als der kreative Prozeß selbst.
7 Dafür gibt es mehrere Gründe: Die Schüler müssen nur wenige Konstrukte beherrschen. Auch sind Scheme-Programme besonders kurz. Außerdem hat Scheme eine besonders mächtige Datensprache, welche die Eingaben für ein Programm beschreibt. Das aufwendige und langweilige Treatment von Ein-/Ausgabe, das die traditionelle Ausbildung charakterisiert, kann entfallen.