Syllabus#

German: Lehrveranstaltungskonzept. Please read it carefully at the beginning of the class, and return to it as often as necessary.

Warning

It is the second time I’m giving this class. The syllabus will likely change in the course of the semester, but each change will be communicated in class.

Prerequisites#

The targeted audience for this lecture is students at the master level with previous experience in programming with Python. I’ll assume that the fundamentals learned in my other scientific programming class are well understood. You have a working python installation on your laptop and are able to install new packages and troubleshoot installation problems on your own (mostly).

Learning outcomes#

After successful completion of the course, you will:

  • be able to write scientific programs of advanced complexity.

  • know how to use the version control software git and the associated online platforms gitlab/github.

  • be aware of performance culprits in your code and develop strategies to address them.

  • learn how to parallelize your code (multiprocessing) and realize “out-of-memory” computations with the Dask library

  • know how to apply more advanced OOP design patterns (decorators, interfaces, etc.) to your code, and know when not to use them.

  • be ready to make meaningful contributions to collaborative open-source software projects.

These topics will be addressed with the help of practical applications in the atmospheric and cryospheric sciences, statistics and numerical modelling.

Organisation of the class#

I don’t know yet how the class will be organized, but we will find out together!

Grading#

The lecture can only be passed / not passed (no grading). To pass the class, you need to:

  1. opening of a meaningful contribution to a scientific open-source project

  2. participate in class

  3. present an individual or group programming project at the end of the semester

Contribution to a scientific open-source project#

You’ll need to send me proof of your contribution by participating to the following issue tracker on gitlab.

Any contribution in a repository you do not own would be enough. Examples:

  • a documentation update on the xarray or OGGM repositories

  • a new feature in an existing repository

  • corrections or improvements on one of my class notes (e.g. Scientific Programming, or Climate).

  • etc.

Programming project#

The programming project should be a standalone programming task realized in a group or alone (group work is preferred). The criteria are:

  • the project should have its own public repository (github or gitlab)

  • it should serve a general purpose (i.e. not solving a problem for your thesis only, but be generalizable to a broader scope or offer a new tool or app to the community)

  • therefore, it should be documented (so that others can use it and build on your work)

I do not want you to work on your thesis in this class. If you are writing your thesis and want to build upon your work, a good project could be to extract parts of your work and turn it in a general purpose package. Other good examples can be seen from last year’s class:

mdd
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[1], line 1
----> 1 mdd

NameError: name 'mdd' is not defined