Deskriptive Programmierung, Sommersemester 2015
Für die entsprechende Vorlesung im Sommersemester 2016, siehe hier.Organisatorisches:
Die drei wöchentlichen Termine (zweimal Vorlesung, einmal Übung) sind:
- Montag, 10:15-11:45
- Mittwoch, 10:15-11:45
- Freitag, 10:15-11:45
Aktuelle Informationen und fortlaufende Materialien zur Lehrveranstaltung befinden sich nun auf der Vorlesungsseite im eCampus-System der Uni Bonn (Link; Uni-ID nötig).
Exkursionen:
MPC 2015, IFL 2015Inhaltliche Zusammenfassung:
Die Vorlesung führt deskriptive Programmierung (oder, auch gängige Bezeichnung: deklarative Programmierung) an Hand der funktionalen Programmiersprache Haskell und der logischen Programmiersprache Prolog ein. Ziel solcher Programmiersprachen ist es, Problembeschreibung und -lösung in den Vordergrund zu stellen, statt Überlegungen zu Operationen der ausführenden Maschine. Dies bedeutet Programmieren auf einem abstrakteren Niveau, insbesondere unter Anleihen in Algebra und Logik. Viele Problemstellungen können auf diese Weise sehr viel direkter modelliert werden als in "herkömmlichen" Sprachen, und im Idealfall stellt eine solche Modellierung/Spezifikation bereits ein ausführbares Programm dar. Der Hauptfokus der Vorlesung liegt aktuell auf funktionalem Programmieren mit Haskell. Haskell hält sich streng an den mathematischen Funktionsbegriff (insbesondere Seiteneffektfreiheit), bietet mächtige Abstraktionsmechanismen auf Funktions- und Typebene, und erlaubt Korrektheitsbeweise und effizienzverbessernde Programmtransformationen durch gleichungsbasiertes Schließen. Die Vorlesung führt Haskell ohne Annahme von Vorkenntnissen in funktionaler Programmierung ein und führt von einfachen Programmen zu allgemeinen Konstruktionsprinzipien, Sprachmechanismen zur flexiblen Wiederverwendung von Code, und Ansätzen zur Analyse und Transformation von Programmen. Durchgehend enthalten die Übungen einen großen Anteil Programmieraufgaben (in Einzelarbeit). Ein kleinerer Teil der Vorlesung widmet sich logischem Programmieren mit Prolog, wiederum mit Einführung von Grund auf, bis zu einfachen Programmen, den wichtigsten Sprachfeatures, und Behandlung des Operationalisierungsprinzips und der entsprechenden logischen Interpretation.Voraussetzungen:
Die Lehrveranstaltung richtet sich in erster Linie an Bachelor-Studierende der Informatik. Sie gehört zum Wahlpflichtbereich, kann jedoch auch bereits im 2. Fachsemester belegt werden. Regelmäßig nehmen auch Studierende der Mathematik teil. Vorausgesetzt werden die Beherrschung des Programmierens in einer beliebigen Programmiersprache sowie mathematische und logische Grundlagen wie etwa in der Lehrveranstaltung Logik und diskrete Strukturen (insbesondere Kapitel 2 und 5 und der allgemeine Teil von Abschnitt 4.3) vermittelt.Studentische Sicht auf die Lehrveranstaltung:
Durch die Fachschaft durchgeführte Lehrevaluationen:- Sommersemester 2015
- Sommersemester 2014
- Sommersemester 2013
- Sommersemester 2012
- Sommersemester 2011
- Sommersemester 2010
Kann man funktionale Programmierung denn auch in der "echten Welt" einsetzen?
Ja, absolut, siehe zum Beispiel Commercial Users of Functional Programming.Gibt es an der Uni Bonn weitere Lehrveranstaltungen zum funktionalen Programmieren?
Ja, als Fortsetzung denkbar sind eine Vorlesung Fortgeschrittene Funktionale Programmierung oder eine Projektgruppe Angewandte Funktionale Programmierung. Im Rahmen dieser Lehrveranstaltungen haben Studierende zum Beispiel die folgenden Webanwendungen entwickelt:- Schiffe versenken (source)
- 2048 clone (source)
- Flood It clone (source)
- Chess Board (source)
- Duotris clone (source)
- Game of Life (source)
- Das verrückte Labyrinth (source)
- Geometry App (source)
Einige Lehrbücher:
- Thinking Functionally with Haskell, book by Richard Bird
- Haskell-Intensivkurs, Buch von Marco Block und Adrian Neumann
- Programming in Haskell, book by Graham Hutton
- Learn You a Haskell for Great Good!, book by Miran Lipovaca (freely available online)
- Beginning Haskell, book by Alejandro Serrano Mena
- Haskell: the Craft of Functional Programming, book by Simon Thompson
- Learn Prolog Now!, book by Patrick Blackburn, Johan Bos, and Kristina Striegnitz (freely available online)
- Programming in Prolog, book by William Clocksin and Christopher Mellish
- The Art of Prolog, 2nd Edition, book by Leon Sterling and Ehud Shapiro
Online-Ressourcen:
- various Haskell Cheatsheets, by different people
- Haskell Kurs, deutsch, von Ralf Hinze
- Haskell homepage
- Functional Programming Fundamentals, online lectures by Erik Meijer (based on Graham Hutton's book): chapter 1, chapter 2, chapter 3, chapter 4, chapter 5, chapter 6, chapter 7, chapter 8, chapter 9, chapter 10, chapter 11, chapter 12, chapter 13
Software:
- The Haskell Platform, standard Haskell development environment
- SWI-Prolog, a comprehensive Prolog environment
Weiterführendes Material:
- Deutschsprachiger Blog zur Funktionalen Programmierung, diverse Autoren
- A History of Haskell: Being Lazy with Class, article by Paul Hudak, John Hughes, Simon Peyton Jones, and Philip Wadler
- Real World Haskell, book by Bryan O'Sullivan, Don Stewart, and John Goerzen (freely available online)
- Parallel and Concurrent Programming in Haskell, book by Simon Marlow (freely available online)
- Advanced Functional Programming, online lectures by Ralf Lämmel: lecture 1, lecture 2, lecture 3, lecture 4, lecture 5
- Curry homepage
- Functional Logic Programming, article by Sergio Antoy and Michael Hanus