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:

  1. Zwei Listen der Programmiersprachen, die Sie kennen und (mehr oder weniger) verwenden können
    1. Nach Kenntnissen eingeordnet: die am besten bekannte als 1, usw.
    2. Nach Präferenz eingeordnet: die interessantesten/am besten gefallen/etc. als 1, usw.
  2. Was ist funktionale Programmierung?
  3. Warum programmiert man funktional?
  4. 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

Common-Lisp.net.

Gnu CLISP.

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

The Haskell language.

Simon Peyton-Jones: Escape from the ivory tower: the Haskell journey ist ein gutes Einleitungsvideo mit vielen historischen Anekdoten.

The Haskell Tool Stack.

Tutorials: Programming Haskell.

XSLT

What is 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.

W3C Standarddokumente.

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.