Diese Übung war als ein Zusammenarbeits- und Erforschungslabor gedacht. Wir werden uns im April und Mai regelmäßig treffen, um uns auszutauschen.
Unsere Arbeitsweise fokussiert Ihre individuelle Entwicklung von Software in einer oder mehreren funktionalen Sprache: Wir diskutieren praktische Beispiele, Methoden, und versuchen diese Diskussionen mit Prinzipien und Theorie zu verbinden, die in Literatur und Onlinepräsentationen zugänglich sind.
Unsere Treffen werden in April und Mai in Riot stattfinden. Wir werden auch Riot durchgehend als Forum für Plenumsdiskussionen, in text oder audio/video, verwenden. Vielleicht werden wir auch in Juni und Juli nur online arbeiten, das müssen wir später klären. Sie können sehr gerne miteinander zusammenarbeiten, natürlich unter Berücksichtung des aktuellen Stands zum Coronavirus und der relevante Sicherheitshinweise, z.B. können Sie unsere Aktuellen Hinweise und die Informationsseite der Fakultät mit weiteren Referenzen dazu nutzen. Kreative digitale Zusammenarbeitsformen können wir in Riot diskutieren.
Semesterplan
Treffen 21. April
Erstes Treffen (in Riot). Ich werde dazu alle registrierten Studierenden einladen, wenn Sie in Riot registriert sind (vgl. die Informationen zu Riot unten). Zunächst werden wir alle basalen technischen Probleme lösen. Es folgt auch eine kurze Erklärung des beschriebenen Arbeitsformats.
Aufgabe bis 27. April
Bitte schreiben Sie eine kurze „Selbsterklärung”, wohin Sie diese Fragen antworten:
- Zwei Listen der Programmiersprachen, die Sie kennen und (mehr oder weniger) verwenden können
- Nach Kenntnissen eingeordnet: die am besten bekannte als 1, usw.
- Nach Präferenz eingeordnet: die interessantesten/am besten gefallen/etc. als 1, usw.
- Was ist funktionale Programmierung?
- Warum programmiert man funktional?
- Sind funktionale Sprachen für den Produktivbetrieb geeignet, oder sind sie nur als Forschungswerkzeuge oder gar Spielzeuge geeignet?
Für 2–4 können Sie ein bisschen Desktop-Recherche betreiben, Sie können aber auch nur Ihre Vorkenntnisse wiedergeben.
Bitte laden Sie Ihre Präsentationen in Ilias hoch. Dateiname: FunkProgr_IhrName
, Ordner: Selbsterklärungen für 28. April
.
Treffen 28. April
Wir gehen alle Selbsterklärungen durch und diskutieren die erste Arbeitsphase. Sie werden bis zu unserem nächsten Treffen eine Sprache für ihr ersts Projekt wählen.
Treffen 5. Mai
Wir planen Ihre erste Arbeitsphase, die im Mai stattfinden wird.
Treffen 12. Mai
Wir treffen uns in Riot/Zoom für eine kurze Überlegung. Danach können wir Kanäle in Discord verwenden. Server: Funktionale Programmierung.
Treffen 19. Mai
In Discord.
Treffen 26. Mai
In Discord.
Treffen 9. Juni
Zusammenfassung Phase 1 und Planen für Phase 2, in Zoom.
Bitte laden Sie bis 8. Juni eine Präsentation in Ilias hoch. Dateiname: FunkProgrPhase1_IhrName
, Ordner: Zusammenfassungen für 9. Juni
.
Treffen 16. Juni
In Discord.
Treffen 23. Juni
Zoom-Termin mit Lageberichte.
Treffen 30. Juni
In Discord.
Treffen 7. Juli
Zoom-Termin mit Lageberichte.
Treffen 14. Juli
Zoom-Termin mit Endberichte.
Bitte laden Sie bis 10. Juli eine Präsentation in Ilias hoch. Dateiname: FunkProgrEndbericht_IhrName
, Ordner: Endberichte für 14. Juli
.
Riot
Zur Vereinfachung der Kommunikation nutzen wir Riot. Bitte loggen Sie sich mit Ihrem Uni-Benutzernamen (Beispiel: Lautet Ihre (ursprüngliche) Smail-Adresse mmuster@smail.uni-koeln.de, so ist Ihr Benutzername mmuster) und Ihrem Uni-Passwort auf unserer Riot-Instanz https://maelstrom.hki.uni-koeln.de ein. Treten Sie unserem veranstaltungsbegleitenden Raum https://maelstrom.hki.uni-koeln.de/#/room/#sosem-20-funktionale-programmierung:maelstrom.hki.uni-koeln.de bei.
Literatur und Ressourcen
Unser Hauptbuch für diese Übung ist:
Abelson, H. and Sussman, G.J. (1996). Structure and interpretation of computer programs. Cambridge, Mass.: MIT Press.
Eine digitale Version liegt in Ilias vor. Es gibt auch eine deutsche Übersetzung, die Sie (hoffe ich) später des Semesters in der UB finden können:
Abelson, H. und Sussman, G.J. (1996). Struktur und Interpretation von Computerprogrammen : eine Informatik-Einführung. 4., durchges. Aufl. Berlin: Springer
Das erste Kapitel wird die UB für Ilias einscannen.
Sie sollen unbedingt Kapitel 1 von Abelson und Sussman lesen. Ich empfehle Ihnen, auch 2–4 durchzulesen. Wenn einige mathematische Beispiele schwierig sind, können Sie diese überspringen.
Wichtig sind einige Paar Grundbegriffe für ein tieferes theoretisches und praktisches Verständnis von Programmierung allgemein und funktionale Programmierung, insbesondere:
- Abstraktionen
- Algorithmen
- Prozeduren höherer Ordnung
- Rekursion
- Modularität
- Umgebungen
Wir werden im Rahmen Ihrer praktischen Arbeit diese Begriffe diskutieren. Insbesondere werden wir die Unterschiede zwischen nicht-mutierbaren (mathematischen) Variabeln und mutierbare Variabeln, wie wir sie von prozeduralen Programmiersprachen kennen, erläutern. LISP und Scheme (der LISP-Dialekt, der in Abelson und Sussman verwendet wird) stellt mutierbare Variabeln zur Verfügung. In z.B. Haskell gibt es keine solche Variablen.
Lambda Papers
Diese sind wichtig für ein tieferes Verständnis der Grundkonzepte und ihrem historischen Hintergrund: https://en.wikisource.org/wiki/Lambda_Papers
Hier finden Sie weitere Informationen über einige (nicht ganz zufällich) ausgewählte funktionale Programmierungssprache:
Common LISP
Fundamentals of CLOS. Common Lisp Object System stellt Objektorientierung zur verfügung in LISP. Es gibt Mehrfachvererbung :-)
Für FormalistInnen: The Common Lisp HyperSpec. Einkaufsmöglichkeiten des offiziellen Standards finden Sie bei ANSI.
Scheme
Eine wichtige Lernressource für Scheme ist Abelson und Sussman: Struktur und Interpretation von Computerprogrammen.
The Scheme programming language.
Definierende Beschreibung: Revised5 Report on the Algorithmic Language Scheme in Higher-Order and Symbolic Computation 11, 7–105(1998).
Haskell
Simon Peyton-Jones: Escape from the ivory tower: the Haskell journey ist ein gutes Einleitungsvideo mit vielen historischen Anekdoten.
Tutorials: Programming Haskell.
XSLT
SAXON: The XSLT and XQuery Processor.
XSLT im Rahmen Text Encoding Initative (TEI): Teil 1 (Teil 2–5 folgt). Es gibt eine Uni Köln Site-Lizenz für Oxygen, die sich für die XSLT-Entwicklung verwenden lässt Treten Sie bitte bei Bedarf mit mir in Kontakt.
XSLT ist normalerweise als eine Sprache an funkationale Programmierung-Ideen basiert, aber nicht völlig funktional. Argumente dagegen gibt, z.B.: The Functional Programming Language XSLT - A proof through examples.
Studienleistung
- Aktive Teilnahme in Diskussionen
- Umsetzung von mindestens zwei kleinerer Entwicklungsprojekte
- diese Projekte können miteinander verbunden sein
Modulprüfung
Wenn Sie ein Modulprüfung auf Grundlage dieser Übung absolvieren möchten, dann kontaktieren Sie mich bitte bis 16. Juni. Danach melden Sie sich bitte zu der Prüfung in Klips an. Sie können, bei bedarf, bis 6. Juli abmelden.