PLC banner

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 geeigneten Programmiersprachen illustriert.

In den Übungen werden diese Konzepte mit den Programmiersprachen Clojure und 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 Mittwochs um 14:15 Uhr in Raum B 325 statt.

Nr. Datum Thema
1 03.04.19 Introduction
2 10.04.19 Functional Programming Basics
3 17.04.19 Programming with Lists
4 24.04.19 Persistent Data Structures
5 08.05.19 Macros and more
6 15.05.19 Haskell Basics
7 22.05.19 Type Classes and Polymorphism
8 05.06.19 Monads
9 12.06.19 Student Talks
10 19.06.19 Student Talks
11 26.06.19 Exam Preparation

HTML Folien

Die Foliensätze werden als interaktive HTML-Dokumente (mit reveal.js) bereit gestellt (). Wichtige Tastenkürzel:

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

Folien als PDF

PDF-Versionen der Foliensätze können mit Google Chrome selbst erzeugt werden:

  1. Foliensatz in der Print-Version () in Google Chrome öffnen
  2. Datei > Drucken …
  3. Ziel auswählen > Als PDF speichern …

Zu jedem Foliensatz existiert ein Handout, in dem die Folieninhalte nochmal linear angeordnet sind (). Auch 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. Jede rechtzeitig abgegebene Lösung wird mit 7 Punkten bewertet.

Nr. Thema
1 Clojure - First Contact
2 Working with Lists
3 Haskell - First Contact
4 Student Talks
5 Project

Projekt

In der zweiten Hälfte des Semesters wird eine etwas umfangreichere Aufgabe in kleinen Teams von bis zu 2 Personen bearbeitet. Die erfolgreiche Bearbeitung des Projekts wird mit bis zu 30 Punkten vergütet.

Klausur

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

Vortrag

Optional kann gegen Ende des Semesters ein 20-minütiger Vortrag zu einem für das Modul relevanten Thema gehalten werden. Eine Themenliste wird während des Semesters zusammengestellt. Vorträge können ebenfalls kleinen Teams von bis zu 2 Personen bearbeitet werden. Jeder Vortrag wird mit bis zu 10 Bonuspunkten vergütet.

Bewertung und Notenbildung

In der Summe sind mit Übungsaufgaben, Projekt und Klausur 100 Punkte erreichbar.

Leistung Punkte
Übungsaufgaben 21
Projekt 29
Klausur 50
Summe 100
Vortag Bonus 10

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.