Funktionale Programmierung (DC)

Funktionale Programmierung (DC)

SWS 4
ECTS 5
Sprache(n) Deutsch (Standard)
Englisch
Lehrform SU mit Praktikum
Angebot in jedem Sommersemester
Aufwand

30 Präsenzstunden Vorlesung, 30 Präsenzstunden Praktikum, 45 Stunden Vor-/Nachbereitung des Praktikums, 45 Stunden Nachbereitung der Vorlesung und Prüfungsvorbereitung

Voraussetzungen

Computational Thinking

Ziele

LERNZIELE

Die Studierenden vertiefen ihre Programmierkenntnisse, insbesondere im Umgang mit grundlegenden und komplexeren Datenstrukturen sowie in der Anwendung funktionaler Programmierkonzepte. Darüber hinaus werden sie befähigt, parallele Algorithmen zu verstehen und erste praktische Erfahrungen im Big-Data-Umfeld zu sammeln, um sich auf anspruchsvolle Programmieraufgaben in Studium und Beruf vorzubereiten.

FACH- & METHODENKOMPETENZ

Die Studierenden sind in der Lage,

  • komplexe Datenstrukturen wie Bäume und Graphen zu modellieren und praktisch einzusetzen,
  • die Grundlagen der funktionalen Programmierung zu erläutern und auf Python oder andere Sprachen zu übertragen,
  • sich effizient in neue Programmiersprachen einzuarbeiten und deren Konzepte zu nutzen,
  • erste parallele Algorithmen umzusetzen und diese in Big-Data-Frameworks, wie z.B. Apache Spark, anzuwenden,
  • die Programmierpraxis durch strukturierte Problemlösungsansätze zu verbessern und fortgeschrittene Algorithmen in realistischen Szenarien anzuwenden.

ÜBERFACHLICHE KOMPETENZ

Teamarbeit: Die Studierenden arbeiten in Kleingruppen, um Aufgabenstellungen gemeinsam zu lösen.

Projektmanagement und Software-Engineering: Im Rahmen des Kurses wird die Code-Qualität durch den Einsatz von Versionierungstools (z. B. Git) und Unittests sichergestellt. Dabei wird Wert auf strukturierte Arbeitsweise und den Einsatz moderner Entwicklungswerkzeuge gelegt.

Analytisches Denken: Die Studierenden entwickeln die Fähigkeit, komplexe Probleme zu analysieren, zu abstrahieren und effiziente Algorithmen zu konzipieren.

Inhalt
  • Versionierung und Zusammenarbeit:
    • Einführung in Git und GitLab (z. B. Pull Requests, Branches, CI/CD).
  • Erweiterte Datenstrukturen:
    • Listen, Stacks, Queues.
    • Bäume (z. B. Binärbäume, AVL-Bäume).
    • Graphen (z. B. DFS, BFS, kürzeste Wege).
  • Komplexe Datenstrukturen und Algorithmen:
    • Hashmaps und Sets.
    • Sortieralgorithmen (z. B. QuickSort, MergeSort).
    • Graphenalgorithmen (z. B. Dijkstra, Kruskal).
  • Grundlagen der funktionalen Programmierung:
    • Einführung in funktionale Paradigmen mit Python.
    • Lambda-Ausdrücke und Higher Order Functions.
    • Immutability und Rekursion.
    • Map, Reduce, Filter und Folds.
  • Algorithmen und Daten in der Praxis:
    • Algorithmendesign und Komplexitätsanalyse.
    • Verarbeitung großer Datenmengen mit Python und Bibliotheken wie Pandas oder NumPy.
  • Parallel- und Nebenläufigkeit:
    • Einführung in parallele Berechnungen und Algorithmen.
    • Grundlagen der nebenläufigen Programmierung (z. B. Threads, Async/Await in Python).
    • Praxis: Erste Übungen mit massiv parallelen Algorithmen (z. B. MapReduce).
    • Überblick: Big-Data-Frameworks wie Apache Spark.
  • Testen und Qualitätssicherung:
    • Einführung in Unit-Tests und Test-Driven Development (TDD).
    • Werkzeuge zur Code-Qualitätskontrolle (z. B. linters, CI-Pipelines).
Medien und Methoden

Folien, Livecoding, virtuelle Lehrräume, Gruppenarbeit

Literatur
Zuordnungen Curricula
SPO Fachgruppe Code ab Semester Prüfungsleistungen