initial
This commit is contained in:
74
Coding/Haskell/FFPiH.md
Normal file
74
Coding/Haskell/FFPiH.md
Normal file
@ -0,0 +1,74 @@
|
||||
---
|
||||
tags:
|
||||
- Drezil
|
||||
- Experience
|
||||
categories:
|
||||
- Lecture
|
||||
- Haskell
|
||||
date: 2018-01-01
|
||||
title: Fortgeschrittene funktionale Programmierung in Haskell
|
||||
---
|
||||
|
||||
FFPiH ist eine Vorlesung, die ich zusammen mit einem Kommilitonen im Sommer 2015
|
||||
erstmals erstellt und gehalten haben.
|
||||
|
||||
Insgesamt haben wir die Vorlesung 3x gehalten, wobei von der ersten zur zweiten
|
||||
Iteration der Inhalt massiv überarbeitet wurde und bei der Iteration von der
|
||||
zweiten zur dritten Vorlesung die Übungen komplett neu erstellt wurden.
|
||||
|
||||
Die gesamten Übungen sind unter anderem in der FFPiH-Organisation in meinem
|
||||
gitea hinterlegt:
|
||||
[https://gitea.dresselhaus.cloud/FFPiH](https://gitea.dresselhaus.cloud/FFPiH)
|
||||
|
||||
Einige der aktualisierten Übungen sind privat geschaltet, da diese iterativ
|
||||
aufeinander aufbauen und jeweils die Musterlösung der vorherigen enthalten.
|
||||
|
||||
## Aufbau der Vorlesung
|
||||
|
||||
Vorausgesetzt wurde, dass die Studierenden das erste Semester abgeschlossen
|
||||
hatten und somit bereits leichte Grundlagen in Haskell kannten (aber z.b. Dinge
|
||||
wie Functor/Applicative/Monad noch nicht _wirklich_ erklärt bekommen haben).
|
||||
|
||||
Stück für Stück werden die Studis dann zunächst in abstrakte Konstrukte
|
||||
eingeführt, aber diese werden dann schnell in die Praxis umgesetzt. Etwa mit dem
|
||||
Schreiben eines eigenen Parsers.
|
||||
|
||||
Schlussendlich gibt es dann einen "Rundumschlag" durch die gesamte Informatik.
|
||||
Erstellung eines Spieles (auf basis einer kleinen Grundlage), erstellung von
|
||||
WebApps mit Yesod, Parallelisierung und Nebenläufigkeit für rechenintensive
|
||||
Anwendungen inkl. synchronisation mittels STM.
|
||||
|
||||
Optional gab es weitere Übungen zu dingen wie "verteiltes Rechnen".
|
||||
|
||||
Ziel hierbei war nicht, diese ganzen Themen in der Tiefe beizubringen, sondern
|
||||
aufzuzeigen, wie sie sehr schnell abstrakte Konstrukte, die ihnen ggf. 3
|
||||
Semester später erst begegnen bugfrei benutzen können, da Haskell hier in sehr
|
||||
vielen Fällen einfach nur die "richtige" Lösung kompilieren lässt und alle
|
||||
gängigen Fallen schlicht ausschließt. Beispiel ist z.b. STM innerhalb von STM,
|
||||
Mischen von DB-Monade, Handler-Monade und Template-Engine in Yesod, Process ()
|
||||
statt IO () in der Nutzung von CloudHaskell, etc. pp.
|
||||
|
||||
## Studentisches Feedback
|
||||
|
||||
Sehr gutes Feedback von den Studenten bekamen wir insbesondere für Übungen wie:
|
||||
|
||||
[Übung 2, Aufgabe 2](https://gitea.dresselhaus.cloud/FFPiH/uebung2017_2/src/branch/master/src/Aufgabe2.hs),
|
||||
weil hier durch "einfaches" umformen hin zu Abstraktionen und mit den Regeln
|
||||
dieser im ersten Fall die Laufzeit (vor Compileroptimierungen) von O(n²) auf
|
||||
O(0) ändert.
|
||||
|
||||
[Übung 4](https://gitea.dresselhaus.cloud/FFPiH/uebung2017-4), welche ein
|
||||
komplett fertigen (sehr rudimentären und simplen) Dungeon-Crawler bereitstellt,
|
||||
der "nur" 1-2 bugs hat und "wie ein echtes Projekt" erweitert werden muss. Diese
|
||||
Übung hat sich dann über 4 weitere Übungen gestreckt, wobei folgende Aufgaben
|
||||
gelöst werden müssen:
|
||||
|
||||
- Einarbeitung in QuickCheck zur Behebung eines Bugs im Test
|
||||
- Umschreiben von explizitem Argument-Passing hin zu Monad-Transformers mit
|
||||
stateful [Lenses](Lenses.md)
|
||||
- Continuation-Basierendes Event-System
|
||||
- Hinzufügen eines Parsers für Level, Items & deren Effekte und implementation
|
||||
dieser
|
||||
- Ändern des GUI-Parts von CLI auf 2D GL mittels gloss
|
||||
- Ändern von `StateT World` auf `RWST GameConfig Log World` und somit nutzen von
|
||||
individuellen Konfigurationen für z.b. Keybindings
|
Reference in New Issue
Block a user