Systems Programming in C++

Information

Content

  • Gain in-depth knowledge on modern C++ programming techniques and the C++ ecosystem
  • Learn to write good C++
  • Learn to implement large systems with C++
  • Learn to write high-performance code with C++

Prerequisites

We do not expect that you have any previous programming experience with either C or C++, but you should be familiar with a general-purpose programming language of your choice. Furthermore, you should be familiar with common algorithms and data structures, as well as computer architecture and operating systems. This is roughly equivalent to having attended the following lectures.
  • Introduction to Informatics 1 (IN0001)
  • Fundamentals of Programming (IN0002)
  • Fundamentals of Algorithms and Data Structures (IN0007)
B.Sc. Informatics:
  • Introduction to Computer Architecture (IN0004)
  • Basic Principles: Operating Systems and System Software (IN0009)
B.Sc. Informatics: Games Engineering:
  • Operating Systems and Hardware oriented Programming for Games (IN0034)

Organization

  • Kickoff meeting: Thursday, 02.02.2023 at 16:00h online on BigBlueButton
  • Register for the course through the matching platform
  • Lecture: Tuesdays, 12:00h-14:00h in 02.11.018
  • Tutorial: Fridays, 10:00h-12:00h in 02.11.018
  • First lecture: Tuesday, 18.04.2023
  • Attendance is mandatory in both lectures and tutorials
  • The practical course will be held in English

Grading

  • Regular short written quizzes
  • Weekly programming assignments during the semester
  • Larger final project at the end of the semester
  • Assignments and final project must be solved individually (no teamwork)

Literature

Primary
  • C++ Reference Documentation
  • Lippman, 2013. C++ Primer (5th edition).
  • Stroustrup, 2013. The C++ Programming Language (4th edition).
  • Meyers, 2015. Effective Modern C++. 42 Specific Ways to Improve Your Use of C++11 and C++14.
Supplementary
  • André Müller: C++ Cheat Sheets & Infographics
  • Aho, Lam, Sethi & Ullman, 2007. Compilers. Principles, Techniques & Tools (2nd edition).
  • Tanenbaum, 2006. Structured Computer Organization (5th edition).

Lecture Slides

DateTopic
02.02.2023 Kickoff Meeting
18.04.2023 01.1: Organization, Introduction, Background
21.04.2023 01.2: Compiler Options, Make, CMake, Git
25.04.2023 02.1: Basic C++ Syntax
28.04.2023 02.2: Objects, Declarations, Definitions
05.05.2023 03: References, Arrays, Pointers
12.05.2023 04: Classes, User Defined Types, Iterators
16.05.2023 05: Dynamic Memory Management - Part 1
23.05.2023 05: Dynamic Memory Management - Part 2
02.06.2023 06: Inheritance
09.06.2023 07: Templates
13.06.2023 08: Standard Library 1 (Utility, Strings, Containers)
13.06.2023 09: Standard Library 2 (Functors, Algorithms, Ranges, Random)
27.06.2023 10.1: Parallel Programming below C++
30.06.2023 10.2: Multi-Threading in C++
04.07.2023 11: Organizing Larger Projects
11.07.2023 12: Linux Systems Programming
21.07.2023 13: Miscellaneous
All slides in a single document
The lecture slides contain licensed material
Errata

Programming Assignments

See GitLab.

Final Project