WS26/27 Scientific programming - Advanced concepts (Ma-33)

Fakultät Mathematik | Wintersemester 2026 / 2027 WS26/27 Scientific programming - Advanced concepts (Ma-33)

What is this course about?

Scientific programming is more than implementing a mathematical formula or writing code that produces the expected result. Scientific software connects an application problem with its mathematical model, numerical algorithms, suitable data structures, and an efficient and reliable implementation.

In this course, we use modern C++ to study principles and techniques for developing scientific software. We discuss how scientific problems can be decomposed into computational and software components, how suitable abstractions and interfaces can be designed, and how mathematical properties can guide the choice of algorithms and data structures.

The course covers advanced concepts of modern C++ and generic programming, including classes and types, templates, function objects and lambdas, iterators and views, concepts, and selected techniques from the C++ standard library. These concepts are studied in the context of concrete scientific programming problems rather than as isolated language features.

An equally important part of the course is the software development process. We consider code structure and maintainability, version control and collaborative development with Git and GitLab, build systems, documentation, testing and validation, debugging, benchmarking and profiling, and automated development workflows. We will also discuss how AI-assisted programming tools can support this process and, in particular, how their results can be understood, reviewed, and validated.

Learning outcomes

After successfully completing the course, students should be able to:

  • analyze a scientific programming problem in terms of its mathematical model, numerical algorithms, data structures, and computational workflow, and decompose it into suitable software components;

  • design and implement solutions using appropriate data representations, abstractions, interfaces, libraries, and modern C++ facilities, and justify important design decisions with respect to the problem at hand;

  • develop readable, maintainable, and reusable scientific code using appropriate abstractions, clear responsibilities and interfaces, meaningful naming and documentation, and established C++ programming practices;

  • identify mathematical and computational requirements, preconditions, postconditions, and invariants and use suitable software mechanisms, such as types and interfaces, assertions, error handling, and tests, to validate an implementation;

  • recognize algorithmic, data-structural, and implementation-level performance characteristics, choose suitable approaches, and use benchmarking and profiling to investigate and improve performance;

  • reproduce, understand, modify, and extend existing scientific software incrementally and use version control and collaborative development practices to organize, document, review, and integrate changes.

Prerequisites

The course is aimed at Master's students in mathematics, computational science, and related disciplines. Basic programming experience is expected, but previous experience with C++ is not required.

Since students enter the course with different programming backgrounds, the first part of the semester provides an onboarding into C++ and the development environment used throughout the course. This establishes a common basis for working with C++ programs, compilers and libraries, build systems, Git, and small software projects.

The course is not intended as a general introduction to programming. After the initial onboarding, the focus shifts towards advanced programming concepts, software design, and their application to scientific computing.

Teaching and learning format

The course combines lectures, small programming exercises, and larger programming projects.

The lectures introduce programming and software-design concepts, discuss their motivation and implications, and demonstrate their use in scientific applications.

The tutorials focus on practical programming and project work. Students apply concepts from the lectures to concrete scientific programming problems and progressively develop and extend small software projects.

In addition, small programming exercises provide regular opportunities to practise individual techniques and develop programming fluency. The projects emphasize the integration of these techniques and increasingly require students to make and justify their own design decisions.

There are no mandatory homework assignments and completion of the exercises is not a prerequisite for admission to the examination. Nevertheless, programming is a practical skill that can only be acquired through regular practice. Continuous work on the exercises and projects and active participation in the tutorials are therefore strongly recommended.

Version control with Git and GitLab is used throughout the course. Where appropriate, students will also work with tools for building, testing, debugging, documenting, benchmarking, and analyzing their software.

Schedule

Lecture

  • Thursday, 11:10–12:40, every week, WIL/B122/U

  • Friday, 09:20–10:50, even weeks, WIL/B122/U

Tutorials

  • Monday, 16:40–18:10, odd weeks, Z21/217/U

  • Friday, 09:20–10:50, odd weeks, WIL/B122/U

Students may choose one of the tutorial groups.

Teaching team

Lecturer: Dr. Simon Praetorius (Institute for Scientific Computing)

The lecturer is responsible for the course and lectures and develops the scientific, programming, and software-design concepts together with the students. The lecturer also supervises one of the tutorial groups.

Tutorial instructor: Maik Porrmann (Institut for Scientific Computing)

The tutorial instructors support students in their practical programming and project work and are the primary contacts for questions concerning exercises and programming projects.

Examination

The examination is conducted according to the applicable study regulations. Depending on the number of participants, the examination takes the form of a 90-minute written examination.

The examination assesses the ability to understand, analyze, and reason about scientific software and programming decisions rather than merely recalling C++ syntax. Further information about the examination format and permitted resources will be announced during the course.

Zugang zum Kurs gesperrt. Bitte melden Sie sich an. Login
Informationen zum Zugang
Sie haben zu wenig Berechtigungen, um diesen Kurs zu starten.