Lernziele

Die Studierenden kennen die grundlegenden und fortgeschrittenen Konzepte, Ideen und Prinzipien, die nahezu allen Programmiersprachen zugrunde liegen. Die Studierenden können aktuelle und zukünftige Programmiersprachen schnell erlernen, kompetent bewerten und effizient einsetzen.

Inhalte

Im seminaristischen Unterricht werden die wesentlichen Konzepte der deklarativen Programmierung, insbesondere der funktionalen Programmierung, eingeführt, und mit vielen Beispielen aus bekannten und weniger bekannten Programmiersprachen illustriert.

In den Übungen werden diese Konzepte mit der rein funktionalen Programmiersprache Haskell praktisch erprobt.

Voraussetzungen

  • Sicherer und produktiver Umgang mit mindestens einer Programmiersprache
  • Sicherer Umgang mit dem Versionskontrollsystem GIT
  • Aufgeschlossenheit gegenüber Neuem und etwas Spaß am Programmieren.

Seminaristischer Unterricht

Der seminaristische Unterricht findet in diesem Semester immer Montags um 14:15 Uhr in Raum B 321 statt.

Nr. Datum Thema Material
1 07.10.19 Introduction
2 14.10.19 Functional Basics
3 21.10.19 Types and Lists
4 28.10.19 More on Lists
5 04.11.19 More on Data Types
6 11.11.19 Persistent Data Structures
7 25.11.19 Functional Programming Patterns
8 02.12.19 Monadic IO
9 09.12.19 Functors and Monads
9 16.12.19 Functional Application Development

HTML Folien

Die Foliensätze werden als interaktive HTML-Dokumente (mit reveal.js) bereit gestellt (<i class="fab fa-html5">{=html}</i>{=html}). Wichtige Tastenkürzel:

  • ⇦, ⇨ — Vorherige, nächste Folie
  • ⎋ — Übersicht

Zu jedem Foliensatz existiert ein Handout, in dem die Folieninhalte nochmal linear angeordnet sind (<i class="fas fa-file-code">{=html}</i>{=html}). Dieses Format eignet sich gut zum Ausdruck oder zur Erzeugung von PDFs.

Übungsaufgaben

Zu den ersten Übungsterminen gibt es alle zwei Wochen jeweils ein Blatt mit Übungsaufgaben. Die Übungsaufgaben werden einzeln bearbeitet und per GIT Commit abgegeben.

Nr. Abgabe Thema Übungsblatt Aufgabenblatt
1 21.10.19 Haskell - First Contact
2 11.11.19 Working with lists
3 02.12.19 Klondike Gold Rush
(4) 13.01.20 Tic Tac Toe (BONUS)
5 06.01.20 Gopher Client
6 13.01.20 Gopher Server

Aufgabe 4 ist eine Bonusaufgabe. Zum Erreichen der Maximalpunktzahl von 100 Punkten ist die Lösung dieser Aufgabe nicht unbedingt notwendig (aber sie hilft).

Klausur

Am Ende der Vorlesungszeit wird eine Klausur von 90 Minuten Dauer geschrieben. Mit der Klausur können bis zu 50 Punkte erreicht werden.

Bewertung und Notenbildung

In der Summe sind mit Übungsaufgaben und Klausur 100 Punkte erreichbar. Bonuspunkte zählen extra.

Leistung Punkte
Übungsaufgaben 50
Klausur 50
Summe 100

Der aktuelle Abgabe- und Bewertungsstand kann jederzeit online eingesehen werden:

Notenspiegel

Die Gesamtnote wird mit folgender Funktion aus der Summe der insgesamt erlangten Punkte berechnet.

def grade(points):
    if points < min:
        return str(5.0)
    if points >= max:
        return str(1.0)
    return str(
        round(1.0 + (9 - math.floor((points - min) / (
            max - min) * 10)) / 3, 1))

Täuschungsversuche

Täuschungsversuche führen zum Ausschluss vom Modul mit der Modulnote 5.0. Jeder Täuschungsversuch wird an den Prüfungsausschuss des Fachbereichs gemeldet. Siehe dazu auch § 24 in der Rahmenstudien und -prüfungsordnung.

Literatur

Van Roy, P. and Haridi, S. 2004. Concepts, techniques, and models of computer programming. The MIT Press.

Sestoft, P. 2017. Programming language concepts. Springer. https://www.itu.dk/~sestoft/plc/.

Elliot, E. 2018. Composing software. LeanPub.

Miran Lipovača, 2011. Learn You a Haskell for Great Good!. http://learnyouahaskell.com/.

Bryan O’Sullivan, Don Stewart, and John Goerzen, 2008. Real World Haskell. O’Reilly. http://book.realworldhaskell.org/.

<!--
vim:spelllang=de3,en:
-->