Syllabus#

Please read this syllabus carefully at the beginning of the class, and return to it as often as necessary.

Learning outcomes#

This class aims at teaching modern programming techniques for (geo-)scientists. After completing the class and actively participating throughout the semester, you will:

  • be familiar with a modern and open-source programming language (Python) and its use for scientific applications

  • be able to program in a structured, extendable, and reproducible manner

  • be able to read and write Python programs of intermediate complexity, as well as Python packages

  • understand how numbers are handled by computers and be aware of numerical accuracy errors

  • be aware of simple performance considerations (vectorization)

  • know how to write and run formal tests for your code (with pytest)

  • be acquainted with various programming utility tools: IDEs, debugger

  • be able to search for, understand, install and take advantage of existing packages and libraries available in the rich scientific Python ecosystem

Non-objectives of this class:

This class is not about learning data analysis, plotting or numerics. Nor is it about learning the details of the Python packages you will use for the rest of your studies such as matplotlib, pandas, xarray, etc, although we will be using some of these packages.

The objective here is to provide you with a solid foundational knowledge about core programming concepts, in order to to make you an independent learner, able to expand and deepen your programming skills by yourself.

Don’t worry: you will have ample time to play with fancy libraries in other classes of the master curriculum.

Prerequisites#

The targeted audience for this course are students at the master level with previous experience in programming. No prior knowledge of Python is required, but it is assumed that you are familiar with a similar language (MATLAB, IDL, R…) and basic programming structures (e.g., loops, functions, conditional blocks).

Ideally, you will have the programming level of a student having completed the introduction to programming for atmospheric scientists in your BSc program. The first few units will be catching up on the materials from the BSc class, but quickly enough we will move towards more advanced topics.

Organisation of the class#

The class is taught in English. It is, however, okay to ask questions in German.

This class follows the flipped classroom concept. You will acquire new knowledge at home by reading online materials (and watching videos when appropriate). We will then use the time together in class to discuss the materials and write code.

Each week of the semester is organized as follows:

  • On Wednesday, you will receive instructions for the following week (which materials to read/watch, a quiz, and the programming assignments). You study the materials during the week and answer the quiz questions.

  • On Monday (08:15-09:00), we meet to discuss the assignment solutions from the previous week (assignments are mandatory but not graded, see “Grading” below).

  • On Tuesday (10:15-12:00), we meet to discuss the current material (the one distributed on the previous Wedesday) and work on the assignments together (the ones to be discussed on the subsequent Monday). The discussion will be based on the short online quizzes and on th questions you bring to the classroom. The quizzes are intended for you to see if you have understood the new material correctly. Note that four of the Tuesday classes had to be moved to either Monday or Friday (see weekly lesson plan below).

Important

You will receive 5 ECTS if you pass the course: with 1 ECTS corresponding to 25 hours of work, this represents 8-9 hours of work per week (15 weeks). For this course, it means that you will spend more time working independently at home than in class.

It is strongly recommended that you work regularly for the class. Programming is quite different from other disciplines, and “doing nothing for a few months” cannot be replaced by a “no-sleep-48-hours-push” at the end of the semester. Programming is a bit like learning how to ski or climb: it is best learned by doing, and you will notice that regular practice will make you better each week.

Learning checklist#

At the end of each lesson, there is a “learning checklist”: go over it at the end of the lecture and see if you can check all the boxes. It is a good way for you to check if you are ready to go on, or if you still need to go back to some reading and learning!

Grading#

Your final grade will be a combination of a mid-term exam (20%), a final exam (50%), and a programming project (30%). Participation in both exams, handing in and presenting the programming project, at least one assignment presentation, and completing at least 50% of the quizzes are necessary to pass the class. At the beginning of the course, you will be assigned to small groups of 3-5 students. For the programming project and the assingment presentations, you will work in these groups.

  1. The mid-term exam (open-book exam, combination of muliple choice, essay, and programming questions) will take place on Tuesday 24.11.2025 from 10:15 to 12:00.

  2. The final exam (open-book exam, combination of muliple choice, essay, and programming questions) will take place on Tuesday 03.02.2026 from 10:15 to 12:00.

  3. Each week you will be given a short quiz to test your understanding of the lecture material. You will have to fill out the quiz prior to the in-class discussion (Tuesday classes). The quizzes are not graded, but you need to complete at least half of the quizzes for a positive grade (submitted the latest 15 min before the class start time).

  4. Each week there will be an assignment (unless specified otherwise, e.g. while you are working on the group project). These assignments can be worked through alone or in groups. The assignments will be discussed on Mondays and, each week, one group will be asked to present their results to the rest of the class. The presentation is not graded, but participation and at least one group presentation are required to pass the class. Further information about the style of the presentations will be provided in class.

  5. After the midterm, you will be assigned a programming project, on which you will work as a group over several weeks. You will have to present your code packages to the class on 27.01.2025 and hand in the final packages before the presentation. To make sure that you make good progress on your project and to receive feedback while you are working on your code, there will be intermediate deadlines that will be announced later. Your project grade will consist of an individual component (50%) and a group component (50%).

Weekly lesson plan#

This is a tentative schedule, which may change slightly during the semester.

  • Week 01 (Mon 06/Tue 07 Oct) - Welcome and getting started with Python and the command line

  • Week 02 (Mon 13/Mon 13 (1015-1200, seminar room) Oct) - Assignment 02, Python packages, programming environments, and language fundamentals

  • Week 03 (Mon 20/Tue 21 Oct) - Assignment 03, Variable scopes, modules, and strings

  • Week 04 (Mon 27/Tue 28 Oct) - Assignment 04, Floating point arithmetics and introduction to numpy

  • Week 05 (Mon 03/Tue 04 Nov) - Assignment 05, Numpy arrays and the scientific python stack

  • Week 06 (Mon 10/Tue 11 Nov) - Assignment 06, Programming style, and using AI for programming

  • Week 07 (Mon 17/Tue 18 Nov) - Assignment 07, Revision

  • Week 08 (Mon 24/Tue 25 Nov) - Mid-term exam

  • Week 09 (Mon 01/Tue 02 Dec) - Code testing

  • Week 10 (Tue 9 (1015-1100)/Fri 12 (0830-1000) Dec) - Assignment 08, Python packages and Group Project

  • Week 11 (Mon 15/Tue 16 Dec) - Code Documentation

  • Week 12 (Mon 12/Fri 16 (0830-1000) Jan) - Object Oriented Programming

  • Week 13 (Mon 19/Fri 23 (0830-1000) Jan) - Assignment 10, Object Oriented Programming

  • Week 14 (Mon 26/Tue 27 Jan) - Assignment 11, Final project submission and Project presentations

  • Week 15 (Mon 02/Tue 03 Feb) - Final exam