Programmieren für alle

(Michael Sperber, 30.8.2002)

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:

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:

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.

1  Die traditionelle Programmierausbildung

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:

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.

2  Effektive Programmierausbildung für Anfänger

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:

  1. eine didaktische Konzeption, welche die Grundkonzepte der Programmierung gezielt und systematisch identifiziert und entwickelt

  2. der Einsatz einer kompakten Notation für Programme, die es erlaubt, diese Konzepte nachvollziehbar darzustellen

  3. 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:

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.

3  Programmierausbildung und Mathematische Grundkompetenzen

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]:

Stufe I
Rechnen auf Grundschulniveau
Stufe II
Elementare Modellierungen
Stufe III
Modellieren und begriffliches Verknüpfen auf dem Niveau der Sekundarstufe I

15jährige sollten diesen Standard erreichen.

Stufe IV
Umfangreiche Modellierungen auf der Basis anspruchsvoller Begriffe
Stufe V
Komplexe Modellierung und innermathematisches Argumentieren

Die Stufen II-V haben dabei den Begriff des Modellierens gemeinsam  -- das Lösen einer anwendungsbezogenen Aufgabe durch Mathematisierung, verstanden als kognitiver Vorgang.

Figure 1:  Der Prozeß des Mathematisierens [1] (links), Entwicklung eines Informatikprodukts [7] (rechts)

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:

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.

4  Bausteine der Programmierausbildung

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.

4.1  Programmiersprache

Die für die Ausbildung besonders geeignete Programmiersprache ist Scheme [6]. Sie hat folgende entscheidende Vorteile gegenüber anderen Sprachen:

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.

4.2  Programmierumgebung

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 [42] 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:

4.3  Inhalte

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:

Algebra
Programme laufen nach den Regeln der Algebra ab. Damit haben die Schüler bei der Konstruktion von Programmen ständig mit Algebra  -- in einer konstruktiven Form  -- zu tun.
Abstraktion
Das entscheidende Werkzeug bei der Lösung komplexer Probleme ist die Abstraktion: formell gesehen das Ersetzen von konkreten Größen durch Namen oder, direkt auf den Problemlöseprozeß bezogen, die Fähigkeit, einen Teil des Problems unabhängig von den anderen zu lösen, um es so schrittweise zu bezwingen.
Komposition
Gute Abstraktionen für die Lösung kleiner Probleme sind wiederverwendbar und lassen sich für die Lösung größerer Probleme systematisch zusammensetzen.
Datenmodellierung
Praktische Programme lösen Probleme, die auf Größen der realen Welt formuliert sind. Die Schule der Datenmodellierung erarbeitet Techniken, um diese Größen als Daten im Programm abzubilden und mit ihnen zu arbeiten.
Rekursion
Viele Daten nehmen die Form von Listen oder Bäumen an, die beliebig wachsen können und zu diesem Zweck induktiv aufgebaut sind  -- sie enthalten Teilstrukturen, welche die gleiche Form haben: eine (nichtleere) Liste besteht aus einem ersten Element und einer restlichen Liste; ein (nichtleerer) Baum besteht aus Teilbäumen. Die Rekursion ist das programmiertechnische Mittel, um diese Daten zu verarbeiten. Damit ist sie in flexiblen Programmen und in der realistischen Datenmodellierung ein entscheidender Bestandteil.
Zustand
Zustand ist ein Modell für Zeit und Gedächtnis. In Programmen wird Zustand durch Zuweisung an Variablen und Mutation von Daten modelliert.

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.

4.4  Methodik

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:

  1. die Beschreibung der an einem Problem beteiligten Daten

  2. die Beschreibung der gewünschten Operation auf den Daten, die das Programm berechnen soll

  3. die Aufstellung von Beispielen

  4. die Entwicklung einer Programmschablone

  5. die Vervollständigung der Schablone zu einem lauffähigen Programm

  6. 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.

4.5  Motivation

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:

References

[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 OLIVERDTKE: 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.

Last modified: Fri, Feb 14, 2003, 1:45 pm MET-1MST-2,M3.5.0,M10.5.0
HTML conversion by TeX2page 4q7d