|
Lutz Kohl
Abteilung für Didaktik
Fakultät für Mathematik und Informatik
Friedrich-Schiller-Universität Jena
Ernst-Abbe-Platz 2
07743 Jena
Lutz.Kohl@uni-jena.de
http://www.uni-jena.de/puck.html
Abbildung 1: Ein Puck-Programm zur Berechnung der ersten 20 Quadratzahlen
Der größte Nachteil visueller Programmiersprachen, komplexe Inhalte vergleichsweise unübersichtlich darzustellen, tritt bei von Anfängern konstruierten Programmen nicht auf, da diese nur einen geringen Umfang haben3. In einer vom Autor an der Friedrich-Schiller-Universität Jena verfassten Diplomarbeit wurde nach einer vorherigen Erhebung von Anforderungen eine visuelle Programmiersprache mit einem zugehörigen Programmiersystem für den Einsatz in Schulen entwickelt. Mit Hilfe dieses Systems können Anfänger ein Programm per Drag and Drop konstruieren. Im Verlauf des Lernprozesses werden den Schülerinnen und Schülern - je nach Konfiguration durch den Lehrer - nur bestimmte Bausteine zur Verfügung gestellt. Dadurch bekommt ein Anfänger die Möglichkeit, das Programmieren schrittweise, also Anweisung für Anweisung, zu erlernen. Die visuell erstellten Programme können stets direkt ausgeführt werden.
"Herr Lehrer, ich hab da so eine komische Fehlermeldung."Wer einen dieser Sätze schon einmal im Unterricht gehört oder gesagt hat, wird die Vorteile von Puck zu schätzen wissen. Nun mag der Leser entgegnen, dass die dargestellten Probleme beim Übergang zu einer textuellen Sprache trotzdem auftreten können. In der Tat sind dazu weitere Untersuchungen erforderlich. Der Autor ging bei seiner Arbeit aber davon aus, dass es einfacher ist, eine abstrakte textuelle Programmiersprache zu erlernen, wenn die verwendeten Konstrukte bereits bekannt sind. Außerdem können die Schülerinnen und Schüler schon während der Arbeit mit Puck durch den generierten Quelltext auf die richtigen Schreibweisen vorbereitet werden.
"Du hast dort ein Semikolon vergessen."
"Wenn du eine Variable verwendest, musst du sie vorher deklarieren."
"Du hast dort das Schlüsselwort 'WHILE' falsch geschrieben."
"In deinem Programm ist ein 'END' zu wenig."
Das entwickelte visuelle Programm kann über die Menüleiste (Quelltext - Programm ausführen) direkt ausgeführt werden. Die Ausgaben des Programms bei den Eingabewerten 308 und 66 sind in Abbildung 3 dargestellt.
An diesem Beispiel sollen nun einige Eigenschaften des Puck-Systems erläutert werden.
Variablen werden deklariert, indem das kleine schwarze Dreieck rechts neben dem Schlüsselwort VAR angeklickt wird. Sie werden fortlaufend mit kleinen Buchstaben des Alphabetes benannt. Name und Datentyp können in der Attributtabelle, die sich beim Anklicken der Bausteine jeweils auf der rechten Seite des Bildschirms befindet, verändert werden. Es wird nach jeder Veränderung überprüft, ob ein Variablenname im gegebenen Kontext bereits vergeben wurde bzw. ob er den Namenskonventionen entspricht. Variablen vom Typ Integer sind dunkelblau, Variablen vom Typ Boolean sind grau dargestellt.
Bei einem Prozeduraufruf müssen die aktuellen mit den formalen Parametern in Anzahl, Typ und Reihenfolge übereinstimmen. Um dies zu garantieren, wurde im Puck-System durchgängig mit dem Observer-Entwurfsmuster (vgl. [Ga97]) gearbeitet. Wenn der Benutzer die Signatur einer Prozedur verändert, indem er zum Beispiel einen weiteren Wertparameter vom Typ Integer hinzunimmt, so wird vom System in jeder Anweisung, in der diese Prozedur aufgerufen wird, ein Integer-Ausdruck eingefügt, der der Prozedur als aktueller Parameter übergeben wird. Auch das Verändern des Namens einer Prozedur oder einer Variablen wirkt sich nicht nur auf die Deklaration, sondern auch auf jede Verwendung derselben im gesamten Programm aus. Referenzparameter werden in Puck durch eine Schraffierung gekennzeichnet.
Ausdrücke werden in verschiedenen Anweisungen verwendet und können
innerhalb des Puck-Systems immer in der gleichen Art und Weise modifiziert
werden. Ein Ausdruck innerhalb eines Anweisungsbausteins besteht zunächst
aus einem Wert8, der
in der Attributtabelle verändert oder nach einem Rechtsklick durch
eine im aktuellen Kontext gültige Variable des richtigen Typs ersetzt
werden kann9. Sollen
zu einem Ausdruck noch weitere Operatoren und Operanden hinzugefügt
werden, so kann dies durch einen Linksklick auf das kleine Dreieck an der
rechten Seite des Ausdrucks geschehen. Daraufhin werden immer ein Operator
und ein Operand in den Ausdruck eingefügt. Die je nach Datentyp möglichen
Operatoren können über ein Kontextmenü ausgewählt werden.
Nach jeder Aktion entsteht stets ein korrekter Ausdruck des jeweiligen
Typs.
Klammern werden paarweise um einen Operanden gesetzt und können
anschließend einzeln verschoben werden, wenn ein Verschieben in die
jeweilige Richtung möglich ist. Öffnende und schließende
Klammern werden stets gemeinsam gelöscht.
Die Grenzen eines Blockes werden in textuellen Programmiersprachen meist durch geschweifte Klammern, durch BEGIN-END-Strukturen oder durch Einrückung gekennzeichnet. In Puck wird ein Block durch eine Anweisungsfolge charakterisiert. Diese besteht anfänglich aus einer einzelnen Anschlussstelle für einen Anweisungs-Baustein. Klickt der Benutzer eines der beiden Dreiecke der Anschlussstelle an, so entsteht oberhalb bzw. unterhalb eine weitere Anschlussstelle, die wieder ebenso erweitert werden kann. Wenn zum Beispiel ein IF-THEN-Baustein an eine Anschlussstelle angehängt wird, so beinhaltet dieser zwei nach rechts versetzte Anweisungsfolgen, die den Block des THEN- und des ELSE-Zweigs beschreiben. Um Überschneidungen zu verhindern, werden im übergeordneten Block automatisch leere Anschlussstellen eingefügt.
Zum Einstieg in das Programmieren wurden Punkte, Linien und Fadengrafiken gezeichnet. Im Verlauf der ersten Phase wurden den Schülerinnen und Schülern die benötigten Bausteine schrittweise zur Verfügung gestellt. Dies wurde vom Lehrer als wichtiges methodisches Mittel für den Anfangsunterricht erkannt, denn die Schülerinnen und Schüler wurden dadurch nicht mit einer Vielzahl von Befehlen konfrontiert, sondern konnten, je nach Problem, nur mit den vorgegebenen Anweisungen arbeiten. Am Anfang einer Doppelstunde waren die Computer gesperrt. Das jeweils zu bearbeitende Problem wurde im Klassenverband analysiert, in Teilprobleme zerlegt und mögliche Schwierigkeiten, wie zum Beispiel der Datenfluss zwischen den Programmteilen, wurden besprochen. Struktogramme wurden im Unterrichtsgespräch an der Tafel erstellt.
Anschließend entwickelten die Schülerinnen und Schüler in Einzelarbeit das Programm im Puck-System. Durch die ausführliche Vorarbeit entstanden nur wenige semantische Fehler. Durch die Verwendung der visuellen Programmiersprache waren syntaktischen Fehler praktisch ausgeschlossen. Somit hatten nahezu alle Schülerinnen und Schüler jeweils am Ende einer Doppelstunde ein funktionstüchtiges Programm.
Nach Meinung des Lehrers konnten die Schülerinnen und Schüler in der ersten Phase selbstständiger als bisher arbeiten und auch schneller mit neuen Befehlen umgehen, da die Syntax nicht im Mittelpunkt stand. Außerdem wurde mehr Kreativität und Experimentierfreude verzeichnet.
Wann genau der Übergang vom Erstellen der Programme mit Puck hin zum direkten Entwickeln des Oberon-2-Quelltextes stattfindet, wurde den Schülerinnen und Schülern in der zweiten Phase freigestellt. Dadurch hatte der Lehrer mehr Zeit für die jeweiligen Umsteiger. Während einige Schülerinnen und Schüler noch lange mit Puck arbeiteten, hatten sich andere schnell an die textuelle Programmierung gewöhnt. Das Verändern des von Puck generierten Quelltextes war für viele Schülerinnen und Schüler ein wichtiger Zwischenschritt. Der Lehrer empfand das Kompilieren der Programme im !-System als wichtig, da sich die Schülerinnen und Schüler so von Anfang an mit der Oberfläche der Oberon-2-Entwicklungsumgebung vertraut machen konnten13.
Auf den direkten Umgang mit dem Puck-System gab es keine Zensuren. Die Leistungskontrollen bezogen sich in den ersten zwei Phasen ausschließlich auf Problemanalysen und das Erstellen von Struktogrammen. Erst nachdem alle Schülerinnen und Schüler den Wechsel von Puck zu Pow! vollzogen hatten, begann die dritte Phase, in der auch der Quelltext mit in die Leistungsbewertung aufgenommen wurde.
Nach Meinung des Lehrers bietet das Puck-System eine gute Möglichkeit, erste Programmiererfolge zu erlangen und die Komplexität des Anfangsunterrichts zu vermindern. Im Schuljahr 2005/06 wird Puck im Adolf-Reichwein-Gymnasium Jena wieder eingesetzt. An dieser Stelle möchte sich der Autor bei dem unterrichtenden Lehrer Herrn Gert Stamm für die Kooperation bedanken.
[Age] | http://www.agentsheets.com/index.html
(Stand: Dezember 2006) |
[Fo02] | Fothe, M.: Problemlösen mit Python. Thüringer Institut für
Lehrerfortbildung, Lehrplanentwicklung und Medien (Hrsg.): Reihe Materialien,
Heft 72, Bad Berka, 2002. http://www.uni-jena.de/data/unijena_/faculties/minet/casio/Publikationen/python.pdf
(Stand: Februar 2006) |
[Fo04] | Fothe, M.: Unterricht - bald nur noch mit Computer? (Antrittsvorlesung),
Jenaer Schriften zur Mathematik und Informatik, Math/Inf/13/04, Jena, 2004.
http://www.minet.uni-jena.de/preprints/fothe_04/avl.pdf (Stand: Februar 2006) |
[Ga97] | Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. 11. Auflage, Reading, 1997. |
[Ke03] | Kelleher, C.; Pausch, R.: Lowering the Barriers to Programming: a survey
of programming environments and languages for novice programmers. Pittsburgh,
2003.
http://reports-archive.adm.cs.cmu.edu/anon/2003/CMU-CS-03-137.pdf (Stand: Februar 2006). |
[Ko04a] | Kohl, L.: Konzepte der visuellen Programmierung und ihrer Einsatzmöglichkeiten
an Schulen. (Studienarbeit), 2004.
http://www.uni-jena.de/Lutz_Kohl.html (Stand: Februar 2006) |
[Ko04b] | Kohl, L.: Entwurf und Implementierung einer visuellen Programmiersprache
für den Einsatz in Schulen. (Diplomarbeit), 2004.
http://www.uni-jena.de/Lutz_Kohl.html (Stand: Februar 2006) |
[Ko05] | Kohl, L.: Puck - eine visuelle Programmiersprache für die Schule. In: S. Friedrich (Hrsg.): Unterrichtskonzepte für informatische Bildung, INFOS 2005, 11. GI-Fachtagung Informatik und Schule, 28.-30. September 2005 an der TU Dresden, Gesellschaft für Informatik, 2005, S. 309-318. |
[Ko06] | Kohl, L.: Mit Puck einfach Programmieren lernen - Eine Einführung
mit fünf Beispielen. Jenaer Schriften zur Mathematik und Informatik,
Math/Inf/01/06, Jena, 2006.
http://www.minet.uni-jena.de/preprints/kohl_06/Lutz%20Kohl%20Mit%20Puck%20einfach%20Programmieren%20lernen.pdf (Stand: Februar 2006) |
[LabV] | http://www.ni.com/labview/d/
(Stand: Dezember 2006) |
[LoB] | http://artdecom.mesh.de/projekte/werkzeuge/software/microcomputer-sensorik_familie/cricket/logo-blocks-for-crickets.html
(Stand: Dezember 2006) |
[Pow] | http://www.fim.uni-linz.ac.at/pow/Download.htm
(Stand: Dezember 2006) |
[Ro03] | Robins, A.; Rountree, J.; Rountree, N.: Learning and Teaching Programming: A Review and Discussion. In: Computer Science Education, 2003, Vol. 13, Nr. 2; S. 137-172. |
[Sc98] | Schiffer, S.: Visuelle Programmierung: Grundlagen und Einsatzmöglichkeiten. Bonn, 1998. |
[2] In [Ro03] sind folgende schwierige Aufgaben für Programmieranfänger angegeben: generelle Orientierung, wofür Programme da sind und was man mit ihnen machen kann; ein imaginärer Maschinenbegriff: Ein Computermodell, das mit der Programmausführung verbunden ist; Notation des Programms, das heißt Syntax und Semantik einer Programmiersprache; Schemas und Pläne zum Lösen von Aufgaben; praktische Fähigkeiten wie Planen, Entwickeln, Testen, Fehlersuchen.
[3] Vor- und Nachteile visueller Programmiersprachen sind in [Sc98] und [Ko04a] ausführlicher zusammengestellt.
[4] Die verwendeten Datentypen reichen für eine Einführung in die Programmierung aus. In [Fo02] werden die Grundbegriffe imperativer Programmierung mit der Programmiersprache Python in einem ersten Kapitel auch unter ausschließlicher Verwendung der Datentypen Integer und Boolean erklärt.
[5] Die Quelltextgenerierung wurde exemplarisch für die Programmiersprache Oberon-2 implementiert, da diese an vielen Thüringer Schulen eingesetzt wird. Der Oberon-2-Quelltext kann mit der Programmierumgebung Pow! geöffnet, kompiliert und ausgeführt werden. Es ist möglich, das System so zu modifizieren, dass textueller Code für eine andere Programmiersprache erzeugt wird.
[6] Puck ist unter der URL http://ww.uni-jena.de/puck.html verfügbar. Das Programm ist in Java implementiert. In dem ausführbaren Archiv SetuPuck.jar sind ca. 100 Klassen mit den zugehörigen Quelltexten enthalten. Das Entwickeln eines Bausteines für das Puck-System ist in [Ko04b] exemplarisch an einem Beispiel dargestellt.
[7] Der Lehrer hat zusätzlich zu dem Menüpunkt "Optionen" die Möglichkeit, mit einem Setup-Programm das Puck-System jede Unterrichtsstunde neu einzustellen und für die Schülerinnen und Schüler so die zu verwendenden Bausteine festzulegen. Außerdem kann der Menüpunkt "Optionen" für die Schülerinnen und Schüler unzugänglich geschaltet werden, so dass diese nichts an der aktuellen Einstellung des Systems verändern können.
[8] Der Wert ist bei Integer 0 und bei Boolean je nach Anweisung TRUE oder FALSE. Boolean-Ausdrücke in Schleifen sind so initialisiert, dass eine Schleife höchstens einmal durchlaufen wird.
[9] In einen Boolean-Ausdruck kann der Vergleich zweier Integer-Ausdrücke als Operand eingefügt werden. Der Vergleichsoperator kann über ein Kontextmenü ausgewählt werden und die Integer-Ausdrücke können verändert werden.
[10] Vgl. [Ko06].
[11] Eingabe -> Verarbeitung -> Ausgabe
[12] Der Autor hatte die Möglichkeit, in vier Doppelstunden, in denen das Puck-System verwendet wurde, zu hospitieren.
[13] Während der Erprobung war es noch nicht möglich Puck-Programme direkt auszuführen. Die Schülerinnen und Schüler speicherten den generierten Oberon-Quelltext in eine Datei. Diese Datei wurde anschließend mit der Programmierumgebung POW! compiliert und ausgeführt.
|