Advanced (practical) Programming (for scientists)

Things you never dared ask, things you never wanted to know about programming.

When? Where?

Time:Fr, 12:00-14:00
Room:MA 144
Duration:21.04.2017 - 21.07.2017
Veranstaltungsnr.3236 L 370
Length2 SWS
Credits5 LP (ECTS)
ExpectedRegular attendance, completion of homework assignments
Grade/ExamPart of the later homework will be a small programming project. Grades will be devised from the results
ModulFortgeschrittene Themen der Algorithmischen Diskreten Mathematik


Prof. Dr. Thorsten Koch
Daniel Rehfeldt


COMA and/or good knowledge of at least one programming language, preferably C/C++.
ADM I helpful but not necessary.
This course is intended for master and (advanced) bachelor students.
Particpants need a computer running Linux/Mac OS-X (you can try Windows, but you will be on your own).


Lecture will be in German or English depending on the participants.


Everyone knows that debugging is twice as hard as writing a program in the first place.
So if you're as clever as you can be when you write it, how will you ever debug it?

-- Brian Kernighan

The main focus will be on how to design and develop correct, maintainable, and well performing scientific software. Although typically quite some time is used for debugging, it is unfortunately still the case that many programs are not correct. If a scientific program produces a wrong result, it does not matter how fast it does so. By using good design and programming styles it is possible to reduce the time for debugging considerably, while still maintaining higher hopes for correctness.

The lecture will also give an introduction to the kind of tools that should be used in software development today. While very popular, writing correct programs was never one of the design goals of C/C++. We will investigate languages that aim to provide more help in this regard and allow even to some degree proofs of correctness.

Planned Topics (subject to change)

Slides and Exercises

Please submit a pull request on GitHub for your code - the submissions will then be tested for correctness. To this end, a GitHub account is required, which can be created here. Furthermore, please fork from the course repository to obtain you own copy. To submit you homework please create a folder with your second name(s), store your source files (and possible further necessary data/information) there, and issue a pull request. For forking and issuing a pull request you just have to press a button of the respective name; should you encounter any problems you think you cannot solve on your own, feel free to write an email to Daniel Rehfeldt.

Literature / Resources

Related stuff

Contact: Thorsten Koch
© 2014 by Thorsten Koch, Imprint, Last Update 05. May 2017