Course Materials

Download PDFs for current and past course sessions.

Advanced C Programming for Computer Scientists

I first taught this course in the Fall semester of the 2025-2026 academic year. This course is the second one that students have specifically on C programming, and it covers more advanced topics such as memory management, data structures, networking, and concurrency.

Although the course gets technically advanced and low level, it assumes students starts from scratch and does not require any prior experience with C programming (or programming in general).

As usual in my courses, it has a strong emphasis on software engineering best practices, such as testing, documentation, and version control. As well as basic computer literacy (e.g. how to use the command line, how to handle dependencies, how to use a version control system, how to use a debugger, etc.).

Files

Computer Programming II: C++

I taught this course for the first time in the Fall semester of the 2024-2025 academic year. The course is an introduction to programming in C++ and covers most of the fundamental features of the language, including object-oriented programming, templates, and the Standard Template Library (STL).

Missing in these materials are the solutions to the exercises, some slides and many class code examples.

I did also not include a lesson specifically dedicated to tooling, which I have done in future iterations of my programming courses. You may find some of the notes for tooling in other courses.

Files

Good Software Engineering Practices for Software-writing Scientists

I have been teaching this course in several forms all around for some years now. It is an introduction to software engineering for scientists, with a focus on good practices and tools that can help scientists write better software. The course covers topics such as version control, testing, documentation, and code review.

Besides the slides and a tutorial article I published in JCP, I also include here specific materials for spins of this course that I tailored for Python and C (although they will work just fine for C++ too).

Files

Advanced Python programming for applied math

I taught this course for the first time in the Spring semester of the 2024-2025 academic year. The course assumes basic notion with the Python syntax and semantics (although it comes with a refresher) and covers more advanced features of the language, including object-oriented programming, high performance, decorators,…

The course has a strong emphasis on software engineering best practices, such as testing, documentation, and version control. It also tries to convey basic notions of software design, such as modularity, abstraction, and separation of concerns.

Perhaps more importantly, the course makes an effort to teach basic computer literacy (e.g. how to use the command line, how to handle dependencies, how to use a version control system, how to use a debugger, etc.).

Files