Teaching

Full list by academic year
Course2026/272025/262024/252023/242021/222020/212019/202018/192017/182016/172015/162014/152013/142012/132011/122010/112009/102008/092007/082006/072005/062004/052003/042002/032001/022000/011999/001995/961994/951993/941992/931991/92
PhD
Computer Systems and NetworksPhD11111111
Transactional SystemsPhD1111111
Doctoral School · PhD
Scientific Text Processing with LaTeXDoctoral School×2×2×2
MSc
Concurrent SystemsMSc112
High Performance ComputingMSc1
Concurrency and ParallelismMSc222111111
Big Data Processing SystemsMSc111
Operating SystemsMSc212
Advanced Topics in Parallel and Distributed ComputingMSc1222
BSc
Computer ArchitectureBSc2212222222
Curricular Development ActivityBSc1
Informatics for Sciences and Engineering EBSc2
Introduction to Programming for Science and EngineeringBSc1
Foundations of Operating SystemsBSc1
Integrative ProjectBSc22
Cross-cutting Skills for Science and TechnologyBSc1
Introduction to Computer Systems and NetworksBSc1111
Lic
Operating SystemsLic22222222222
Parallel and Distributed Computing SystemsLic111
Computer Systems and Architecture IIILic1111
Advanced Operating SystemsLic1111
Computer Systems and Architecture IILic111

1 1st semester 2 2nd semester ×2 two or more editions in the same year taught (no semester, e.g. Doctoral School courses)

Computer Architecture BSc
2026/27 (2nd), 2025/26 (2nd), 2020/21 (1st), 2019/20 (2nd), 2018/19 (2nd), 2017/18 (2nd), 2016/17 (2nd), 2014/15 (2nd), 2013/14 (2nd), 2009/10 (2nd)
2026/27, 2025/26: Computer Architecture is a first-year course on how computers work, from the representation of information to the execution of programs by the hardware. It covers digital representation of data (integers and their operations, floating point, text and Unicode), C programming, the RISC-V instruction set and assembly language (including procedure calls and the call stack), and the translation from C to assembly and machine code. It then turns to processor organization (the datapath, pipelining and its hazards), the memory hierarchy (caches and virtual memory), and input/output. In the practical classes, students write weekly exercises and programming projects in C and RISC-V assembly. Assessment combines regular Moodle quizzes, the projects and tests about them, and written theory tests. The course aims to give students a solid understanding of the hardware/software interface and of how architecture affects program behaviour and performance.
Computer Systems and Networks PhD
2026/27 (1st), 2025/26 (1st), 2024/25 (1st), 2023/24 (1st), 2021/22 (1st), 2020/21 (1st), 2019/20 (1st), 2018/19 (1st)
2026/27, 2025/26: Lecturing a module on Concurrency.
Concurrent Systems MSc
2026/27 (1st), 2025/26 (1st), 2024/25 (2nd)
2026/27: Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In a semester-long group project, students design, implement, test and evaluate a concurrent system, from lock-free data structures and synchronization primitives to memory reclamation and analysis tools. They develop it in checkpointed phases, review each other’s work, present it publicly, and defend it individually. The course aims to make students able to reason rigorously about concurrent algorithms and to build, measure and justify efficient, correct concurrent software.
2025/26, 2024/25: Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In the practical classes, students solve exercises that put these concepts into practice and develop a project in groups of two: implementing and evaluating a concurrent algorithm or system. The course aims to make students able to reason rigorously about concurrent algorithms and to build correct, efficient concurrent software.
Curricular Development Activity BSc
2024/25 (1st)
Informatics for Sciences and Engineering E BSc
2023/24 (2nd)
High Performance Computing MSc
2023/24 (1st)
Introduction to Programming for Science and Engineering BSc
2023/24 (1st)
Concurrency and Parallelism MSc
2021/22 (2nd), 2020/21 (2nd), 2019/20 (2nd), 2018/19 (1st), 2017/18 (1st), 2016/17 (1st), 2015/16 (1st), 2014/15 (1st), 2013/14 (1st)
Big Data Processing Systems MSc
2021/22 (1st), 2020/21 (1st), 2019/20 (1st)
Foundations of Operating Systems BSc
2021/22 (1st)
Scientific Text Processing with LaTeX Doctoral School · PhD
2019/20, 2018/19, 2017/18, 2016/17 (×2), 2016/17 (×2), 2015/16 (×2), 2015/16 (×2), 2014/15 (×2), 2014/15 (×2)
Co-lectured with José Alferes and João Leitão.
Transactional Systems PhD
2017/18 (1st), 2016/17 (1st), 2015/16 (1st), 2014/15 (1st), 2013/14 (1st), 2011/12 (1st), 2010/11 (1st)
Integrative Project BSc
2012/13 (2nd), 2010/11 (2nd)
Operating Systems MSc
2012/13 (2nd), 2009/10 (1st), 2006/07 (2nd)
Cross-cutting Skills for Science and Technology BSc
2012/13 (1st)
Introduction to Computer Systems and Networks BSc
2012/13 (1st), 2008/09 (1st), 2007/08 (1st), 2006/07 (1st)
Advanced Topics in Parallel and Distributed Computing MSc
2007/08 (1st), 2006/07 (2nd), 2005/06 (2nd), 2004/05 (2nd)
Operating Systems Lic
2005/06 (2nd), 2004/05 (2nd), 2003/04 (2nd), 2001/02 (2nd), 2000/01 (2nd), 1999/00 (2nd), 1995/96 (2nd), 1994/95 (2nd), 1993/94 (2nd), 1992/93 (2nd), 1991/92 (2nd)
Parallel and Distributed Computing Systems Lic
2005/06 (1st), 2004/05 (1st), 2003/04 (1st)
Computer Systems and Architecture III Lic
2002/03 (1st), 2001/02 (1st), 1999/00 (1st), 1995/96 (1st)
Advanced Operating Systems Lic
1994/95 (1st), 1993/94 (1st), 1992/93 (1st), 1991/92 (1st)
Computer Systems and Architecture II Lic
1994/95 (1st), 1993/94 (1st), 1992/93 (1st)