Erfolgreiche Anfängerausbildung im Programmieren



Ähnliche Dokumente
Objektorientierte Programmierung für Anfänger am Beispiel PHP

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Fragebogen zur Evaluation der Vorlesung und Übungen Computer Grafik, CS231, SS05

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Was meinen die Leute eigentlich mit: Grexit?

Leichte-Sprache-Bilder

Informationsblatt Induktionsbeweis

Grundbegriffe der Informatik

Einführung in. Logische Schaltungen

Studieren- Erklärungen und Tipps

Einführung in PHP. (mit Aufgaben)

Grundlagen der Theoretischen Informatik, SoSe 2008

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Die Post hat eine Umfrage gemacht

Anleitung über den Umgang mit Schildern

Ein Vorwort, das Sie lesen müssen!

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Programmierparadigmen

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Eine Logikschaltung zur Addition zweier Zahlen

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Alle gehören dazu. Vorwort

Das System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert.

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

Das Persönliche Budget in verständlicher Sprache

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Einführung in die Informatik

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Einführung in die Informatik

Erstellen von x-y-diagrammen in OpenOffice.calc

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Primzahlen und RSA-Verschlüsselung

Einführung und Motivation

Arbeiten mit UMLed und Delphi

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht BREMERHAVEN. Der Zauberwürfel-Roboter. Paul Giese. Schule: Wilhelm-Raabe-Schule

Leitbild. für Jedermensch in leicht verständlicher Sprache

Erklärung zu den Internet-Seiten von

Installation LehrerConsole (für Version 6.2)

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Übungsaufgaben Tilgungsrechnung

Installation der SAS Foundation Software auf Windows

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Das Leitbild vom Verein WIR

Lernmaterial für die Fernuni Hagen effizient und prüfungsnah

4D Server v12 64-bit Version BETA VERSION

Einführung in die Informatik II

Einführung in die Java- Programmierung

Statuten in leichter Sprache

Visual Basic Express Debugging

Tipps zur Nutzung der ViT 1 Lernen ViT Üben HAU ViT ViT ViT ViT ViT Testen ViT VORSC Bewerten RAGTIME ViT zur Vollversion ViT

Übungen zur Softwaretechnik

Die neue Aufgabe von der Monitoring-Stelle. Das ist die Monitoring-Stelle:

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

Programmierung von Konturzügen aus Geraden und Kreisbögen

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Forschen - Schreiben - Lehren

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Welchen Nutzen haben Risikoanalysen für Privatanleger?

Leit-Bild. Elbe-Werkstätten GmbH und. PIER Service & Consulting GmbH. Mit Menschen erfolgreich

Jeopardy and andere Quizformate im bilingualen Sachfachunterricht Tipps zur Erstellung mit Powerpoint

teischl.com Software Design & Services e.u. office@teischl.com

Anwendungsbeispiele Buchhaltung

lippmannstr hamburg tel: fax:

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

4. In dem Kurs lernt sie, was zu tun ist, wenn etwas Schlimmes passiert.

2. Speichern und öffnen

Anleitung zur Bearbeitung von Prüferkommentaren in der Nachreichung

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Zeichen bei Zahlen entschlüsseln

Fragebogen ISONORM 9241/110-S

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Informatik I Tutorial

Unsere Ideen für Bremen!

Europäischer Fonds für Regionale Entwicklung: EFRE im Bundes-Land Brandenburg vom Jahr 2014 bis für das Jahr 2020 in Leichter Sprache

Wir machen neue Politik für Baden-Württemberg

Bitte beantworten Sie die nachfolgenden Verständnisfragen. Was bedeutet Mediation für Sie?

Professionelle Seminare im Bereich MS-Office

Informatik 1 Tutorial

Theoretische Grundlagen der Informatik WS 09/10

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Dokumentation Schedulingverfahren

E-Commerce Recht Organisatorisches

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Wir arbeiten mit Zufallszahlen

SMART Newsletter Education Solutions April 2015

Kreativ visualisieren

Fax einrichten auf Windows XP-PC

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Herzlich Willkommen beim Webinar: Was verkaufen wir eigentlich?

Transkript:

Erfolgreiche Anfängerausbildung im Programmieren Marcus Crestani Universität Tübingen crestani@informatik.uni-tuebingen.de Michael Sperber DeinProgramm sperber@deinprogramm.de Abstract: Das Tutorial gibt einen Überblick über Inhalte und Techniken zur effektiven Anfängerausbildung im systematischen Programmieren. Der im Tutorial vermittelte Ansatz baut auf den design recipes bzw. Konstruktionsanleitungen des TeachScheme!- bzw. DeinProgramm-Projekts auf einem System expliziter Anleitungen zur systematischen Konstruktion von Programmen. Diese Anleitungen werden durch eine Progression spezieller auf Anfänger zugeschnittener Programmiersprachen ermöglicht, die in einer Programmierumgebung, die ebenfalls speziell auf Anfänger zugeschnitten ist. Ein über viele Jahre entwickeltes Übungskonzept bringt das Konzept zur vollen Entfaltung. Dieser Artikel beschreibt Motivation und wichtige Bestandteile des Lehransatzes und demonstriert die Anwendung der Konstruktionsanleitungen an einem Beispiel. Zum Lehransatz sind ein universitäres Lehrbuch, Die Macht der Abstraktion, ein wachsendes Schulbuch, umfangreiche Software sowie weiteres Lehrmaterial (darunter eine umfangreiche Aufgabensammlung) verfügbar. 1 Einleitung Programmieranfänger haben andere Bedürfnisse als fertig ausgebildete professionelle Programierer. Traditionelle Programmierkurse tragen diesen Bedürfnissen nur unzureichend Rechnung: Das Ergebnis sind oft Absolventen, die nicht oder nur unsystematisch und fehlerhaft programmieren können [BDH + 08a]. Der im Tutorial vermittelte Ansatz baut auf den design recipes [FFFK04] bzw. Konstruktionsanleitungen des TeachScheme!/DeinProgramm-Projekts [KS07] auf. Das Konzept ist die Grundlage für die Vorlesungen Informatik I an den Universitäten Tübingen und Freiburg und wird dort seit mehreren Jahren erfolgreich praktiziert und verbessert [BDH + 08b]. Es hat sich durch mehrere Evaluationen über verschiedene Dozenten als robust erwiesen und wird kontinuierlich aktualisiert und verbessert. Die Konstruktionsanleitungen fangen mit einer Analyse der Daten eines Problems an und liefern Schritt für Schritt die Elemente des Programms, die sich aus der Struktur der Daten ergeben. Die systematische Konstruktion wird durch eine Progression spezieller, auf Anfänger zugeschnittener Programmiersprachen ermöglicht, die eine seichte Lernkurve mit direktem Anschluss an den Mathematikunterricht über den Umgang mit Daten hin zu

umfangreicheren Programmen (z.b. reaktiven Animationen) ermöglichen. Diese laufen in einer Programmierumgebung, die speziell auf Anfänger zugeschnitten ist. Ein über viele Jahre entwickeltes Übungskonzept bringt den Ansatz zur vollen Entfaltung. 2 Traditionelle Programmierausbildung Die traditionelle Programmierausbildung tut sich oft schwer, das Programmieren erfolgreich zu vermitteln: Professionelle Programmiersprachen (wie z.b. C++, Java und Pascal/Delphi) sind sehr umfangreich; die Behandlung ihrer Sprachelemente, der Syntax und idiosynkratischen Aspekte der Semantik nimmt einen Großteil der Ausbildung in Anspruch. Damit bleibt wenig Zeit, die Grundkonzepte des Programmierens zu behandeln [Köl99a]. Programmierumgebungen, die für professionelle Software-Entwickler entwickelt wurden, setzen sie vieles voraus, das Anfänger erst noch lernen müssen. Außerdem liefern sie für Anfänger ungenügendes Feedback, wenn es Probleme gibt. [Köl99b, FCF + 02]. Damit bleiben frühe Erfolgserlebnisse aus, die für die Freude am eigenständigen Lernen wichtig sind. Anfänger, welche auf dem Weg zur Lösung nicht schnell sichtbare Fortschritte machen, geben oft auf und schreiben ab [BDH + 08a]. Da Konzepte nicht systematisch vermittelt werden, sind diese nur autodidaktisch zugänglich. Damit verkümmert der Unterricht zu einer reinen Polarisation zwischen den Autodidakten die zudem oft nur unsystematisch programmieren lernen und denjenigen Studierenden, die den Unterricht ohne Gewinn wieder verlassen. (Obwohl das Problem schon lange bekannt ist [Gri74], ist die heutige Ausbildung erstaunlich frei von Lösungen.) 3 Effektive Programmierausbildung für Anfänger Die folgenden, aufeinander abgestimmten Bausteine, lösen gemeinsam die Probleme der traditionellen Ausbildung: Explizite Anleitung Die design recipes in der Terminologie von Felleisen [FFFK01] bzw. Konstruktionsanleitungen bei Klaeren/Sperber [KS07] bieten explizite Anleitungen zur systematischen Programmieren. Abschnitt 4 beschreibt, wie die Konstruktionsanleitungen das systematische Problemlösen ermöglichen. Programmiersprache Der Ansatz verwendet eine Lehrsprache basierend auf der funktionalen Sprache Scheme [SDFvS10], die es erlaubt, im direkten Anschluss an den

Mathematikunterricht alle grundlegenden Konzepte des Programmierens nachvollziehbar darzustellen. Vollständige Programme werden bereits in der ersten Unterrichtsstunde geschrieben. Die Sprachen sind sehr klein, womit Dozenten nur wenig Zeit der spezifischen Behandlung der Sprachen widmen müssen. Programmierumgebung Die Programmierumgebung DrRacket (früher DrScheme) ist speziell auf Anfänger zugeschnitten [FCF + 02]: Sie ist interaktiv und ermöglicht das schrittweise sofortige Testen und visualisiert den Programmablauf. DrRacket liefert präzise Fehlermeldungen, die Anfänger aktiv bei der Fehlersuche unterstützen [CS10]. In DrRacket ist aber auch die Entwicklung anspruchsvoller Programme mit grafischer Benutzeroberfläche bis hin zu professionellen Applikationen möglich. Übungen Im Rahmen der traditionellen Übungsorganisation bieten wir eine umfangreiche, annotierte Aufgabensammlung. Zudem haben wir neue Ansätzen zur Betreuung ( Betreutes Programmieren ) und innovative Konzepte für Gruppenarbeit ( Gruppentestate ) [BDH + 08a] entwickelt, die den Lernstoff besonders effektiv vermitteln. Ein Online-Kursinformationssystem erleichtert die organisatorische Umsetzung und unterstützt den Übungsbetrieb. 4 Systematische Problemlösung nach Konstruktionsanleitung Die Konstruktionsanleitungen unterscheiden unseren Ansatz von traditioneller Programmierausbildung, die mit Beispielen funktionierender Programme oder design patterns arbeiten. (Die mächtigen Abstraktionsmöglichkeiten unserer Lehrsprachen machen design patterns weitgehend überflüssig.) Die Konstruktionsanleitungen trennen die systematischen von den kreativen Aspekten des Problemlösungsprozesses und erlauben damit Anfängern, sich auf den kreativen Teil zu konzentrieren. Im Folgenden stellen wir die Problemlösung mit Konstruktionsanleitung anhand einer einfachen Beispielaufgabe vor. Die Erarbeitung der Aufgabenlösung folgt den Schritten der Konstruktionsanleitungen: Ein Computer besteht vereinfacht gesehen aus Prozessor, Hauptspeicher und Festplatte. Die Taktfrequenz des Prozessors gibt man in Ghz, die Größe des Hauptspeichers und der Festplatte in GB an. Programmieren Sie Computer! Schreiben Sie ein Programm, in dem es möglich ist, den Gesamtspeicher eines Computers zu berechnen! Kurzbeschreibung Die Kurzbeschreibung fasst die Aufgabe der Prozedur in einer einzelnen Zeile zusammen: ; Gesamtspeicher eines Computers berechnen Datenanalyse Die Datenanalyse ist der zentrale Teil der Konstruktionsanleitung. Sie klassifiziert die Arten von Informationen, die in der Aufgabenstellung auftauchen: In der Aufgabenstellung taucht die Größe Computer auf. Der Begriff Computer kann anhand der Aufgabenstellung weiter ausgeführt werden:

Ein Computer hat einen Prozessor mit Taktfrequenz in Ghz, einen Hauptspeicher mit Größe in GB und eine Festplatte mit Größe in GB. Diese Formulierung ist eine Datendefinition. Eine Formulierung der Form x hat identifiziert ein Objekt als zusammengesetzte Daten: Es besteht aus mehreren Bestandteilen. Solch eine Datendefinition wird als Kommentar formuliert und dann direkt in Code in Form einer Record-Definition übersetzt: ; Ein Computer besteht aus: ; - Prozessor (in Ghz) ; - Hauptspeicher (in GB) ; - Festplatte (in GB) (define-record-procedures computer make-computer computer? (computer-processor computer-ram computer-drive)) (: make-computer (rational rational rational -> computer)) Diese Form definiert die Signatur computer für Computer sowie mehrere Prozeduren für den Umgang mit Record-Werten: den Konstruktor make-computer, um Computer herzustellen, das Prädikat computer?, um Computer von anderen Sorten von Werten zu unterscheiden und die Selektoren computer-processor, computer-ram und computer-drive, die für einen Computer jeweils den Prozessor, den Hauptspeicher und die Fesplatte liefern. Schließlich wird noch die Signatur für die Konstruktorprozedur make-computer deklariert: make-computer akzeptiert drei Zahlen (Taktfrequenz des Prozessors und Größen von Hauptspeicher und Festplatte). Die Signatur rational für rationale Zahlen ist eingebaut. Signatur Die Signatur ähnelt einer Typsignatur der Prozedur. Sie enthält den Namen der Prozedur, welche Arten von Daten die Prozedur erwartet und welche Art sie zurückgibt. Aus der Aufgabenstellung ist ersichtlich, dass die Prozedur, die den Gesamtspeicher berechnet, einen Computer konsumiert und eine Zahl zurückgibt: (: total-memory (computer -> rational)) Testfälle Die Testfälle werden vor der Prozedur geschrieben und erlauben den Studierenden, erste Korrektheitskriterien aufzustellen. Der erste Schritt für die Testfälle ist die Erstellung von Beispiele für die auftretenden Daten. Diese Beispiele sollten durch Kommentare die Beziehung zwischen den Daten und der repräsentierten Information klarstellen. In diesem Fall könnten Beispiele so aussehen: ; Computer mit 1 Ghz, 2 GB RAM, 500 GB Festplatte (define c1 (make-computer 1 2 500)) ; Computer mit 2 Ghz, 4 GB RAM, 1000 GB Festplatte (define c2 (make-computer 2 4 1000)) Mit diesen Beispielen lassen sich folgende Testfälle formulieren: (check-expect (total-memory c1) 502) (check-expect (total-memory c2) 1004)

Die Form check-expect akzeptiert zwei Operanden, deren Werte gleich sein sollen. Sind sie es nicht, werden Testfall-Fehlschläge in einem Protokoll festgehalten. Gerüst Der erste Schritt zur Konstruktion der eigentlichen Prozedur ist das Gerüst, das sich direkt aus der Signatur ergibt: Die Studierenden müssen lediglich die Namen für die Parameter wählen....)) Das define benennt einen Wert mit dem Namen total-memory der lambda- Ausdruck liefert eine Prozedur mit dem Parameter c (für den Computer). Die Ellipse steht für den noch zu schreibenden Rumpf der Prozedur. Schablone Die Schablone leitet sich rein aus der Form der Daten her, ohne die Bedeutung oder Zweck der Prozedur in Betracht zu ziehen. Die Studierenden können an der Form der Daten die Programmelemente ablesen, die im späteren Rumpf der Prozedur auftauchen. In den meisten Fällen kommen mehrere Schablonen zum Einsatz: 1. Der Parameter c muss im Rumpf auftauchen:... c...)) 2. Da es sich bei c um zusammengesetzte Daten handelt, wird eine Prozedur die Bestandteile des Computers benötigen. Die Schablone wird also erweitert:... c...... (computer-processor c)...... (computer-ram c)...... (computer-drive c)...)) Rumpf Erst in diesem Schritt ist problemspezifisches Wissen nötig, um die Lücken der Schablone im Rumpf der Prozedur zu füllen bis hierher ist das Programm systematisch aus der Datenanalyse der Problemstellung entstanden. Zunächst spielt für die Berechnung des Gesamtspeichers eines Computers die Prozessor-Komponente keine Rolle. Dann geht es noch darum, die Verknüpfung der im Rumpf verbliebenen Größen zu finden, in diesem Fall die Addition. Damit ist die Konstruktion des Rumpfes abgeschlossen, der vollständig so aussieht: (+ (computer-ram c) (computer-drive c))) Testen Der letzte Schritt ist das Testen: Die vorher erstellten Testfälle werden ausgeführt und Fehler werden behoben, die durch die Testfälle aufgedeckt wurden.

5 Aufruf zur Zusammenarbeit Wir laden alle Interessenten ein, den Ansatz auszuprobieren und gemeinsam zu verbessern. Literatur [BDH + 08a] Annette Bieniusa, Markus Degen, Phillip Heidegger, Peter Thiemann, Stefan Wehr, Martin Gasbichler, Marcus Crestani, Herbert Klaeren, Eric Knauel und Michael Sperber. Auf dem Weg zu einer robusten Programmierausbildung. In Andreas Schwill, Hrsg., 3. Workshop des GI-Fachbereichs Hochschuldidaktik der Informatik, Potsdam, Germany, Dezember 2008. [BDH + 08b] Annette Bieniusa, Markus Degen, Phillip Heidegger, Peter Thiemann, Stefan Wehr, Martin Gasbichler, Marcus Crestani, Herbert Klaeren, Eric Knauel und Michael Sperber. HtDP and DMdA in the Battlefield. In Frank Huch und Adam Parkin, Hrsg., Functional and Declarative Programming in Education, Victoria, BC, Canada, September 2008. [CS10] [FCF + 02] [FFFK01] [FFFK04] [Gri74] [KS07] Marcus Crestani und Michael Sperber. Growing Programming Languages for Beginning Students. In Stephanie Weirich, Hrsg., Proceedings International Conference on Functional Programming 2010, Baltimore, Maryland, USA, September 2010. ACM Press, New York. Robert Bruce Findler, John Clements, Cormac Flanagan, Matthew Flatt, Shriram Krishnamurthi, Paul A. Steckler und Matthias Felleisen. DrScheme: A Programming Environment for Scheme. Journal of Functional Programming, Seiten 159 182, Marz 2002. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt und Shriram Krishnamurthi. How to Design Programs. MIT Press, 2001. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt und Shriram Krishnamurthi. The TeachScheme! Project: Computing and Programming for Every Student. Computer Science Education, Marz 2004. David Gries. What should we teach in an introductory programming course? In Proceedings of the Fourth SIGCSE Technical Simposium on Computer Science Education, Seiten 81 89, Detroit, Michigan, USA, 1974. Herbert Klaeren und Michael Sperber. Die Macht der Abstraktion. Teubner Verlag, 1st. Auflage, 2007. [Köl99a] Michael Kölling. The Problem of Teaching Object-Oriented Programming, Part 1: Languages. Journal of Object-Oriented Programming, 11(8):8 15, January 1999. [Köl99b] Michael Kölling. The Problem of Teaching Object-Oriented Programming, Part 2: Environments. Journal of Object-Oriented Programming, 11(9):6 12, April 1999. [SDFvS10] Michael Sperber, R. Kent Dybvig, Matthew Flatt und Anton van Straaten, Hrsg. Revised[6] Report on the Algorithmic Language Scheme. Cambridge University Press, 2010.