These days, I mainly teach one large course: Introduction to Imperative and Object-Oriented Programming Methodology, a 20 credit course with 120–140 active students on the 2nd year. Students come with a pre-knowledge of computational thinking (using Haskell) and some computer architecture, and learn imperative and object-oriented programming (using C and Java), along with basic software development methodology, meaning processes for breaking a simple specification down into smaller building blocks, top-down and bottom-up development, debugging, version control, testing, etc.
The last course evaluation is available here (in Swedish only). We are happy to report an “approval rating” of 4.6/5 (avg, median 5/5). This course relies heavily on a small army of TA:
I also teach a few lectures on task-based parallelism in the course Language-Based Abstractions for Concurrent and Parallel Programming.
Master in Concurrency and Parallelism
In 2012–2013, I lead the process of developing a master programme in concurrency and parallelism, an initiative from the UPMARC research centre on parallelism and multicore architectures at Uppsala University.
2014–2015, I served as the coordinator for this programme. Starting in 2016 the coordinator is Tjark Weber.