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, 04.02.2021 at 10:00h online on BigBlueButton
  • Register for the course through the matching platform
  • Lecture: Tuesdays, 12:00h-14:00h online on BigBlueButton
  • Tutorial: Fridays, 10:00h-12:00h online on BigBlueButton
  • First lecture: Tuesday, 13.04.2021
  • Attendance is mandatory in both lectures and tutorials
  • The practical course will be held in English

Grading

  • Regular short written quizzes (on Moodle)
  • 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
  • Aho, Lam, Sethi & Ullman, 2007. Compilers. Principles, Techniques & Tools (2nd edition).
  • Tanenbaum, 2006. Structured Computer Organization (5th edition).

Lecture Slides and Recordings

DateTopic
04.02.2021 Kickoff Meeting
13.04.2021 Lecture 01.1: Organization & Introduction Recording
16.04.2021 Lecture 01.2: Introduction to the C++ Ecosystem Recording
20.04.2021 Lecture 02.1: Basic C++ Syntax Recording
23.04.2021 Lecture 02.2: Compiling C++ Files & Declarations and Definitions Recording
30.04.2021 Lecture 03: References, Arrays, and Pointers Recording
07.05.2021 Lecture 04: Classes Recording
14.05.2021 Lecture 05: Dynamic Memory Management & Ownership Recording
21.05.2021 Lecture 06: Inheritance Recording
01.06.2021 Lecture 07: Templates Recording
08.06.2021 Lecture 08: Standard Library I Recording (Choppy sound, sorry)
15.06.2021 Lecture 09: Standard Library II Recording
22.06.2021 Lecture 10.1: Concurrency in Modern Hardware & Parallel Programming Recording
29.06.2021 Lecture 10.2: Multi-Threading in C++ Recording
02.07.2021 Lecture 11: Organizing Larger Projects Recording
09.07.2021 Lecture 12: C++ Systems Programming on Linux Recording
16.07.2021 Lecture 13: Miscellaneous Recording
all slides in a single document
The lecture slides contain licensed material
Errata

Programming Assignments

Sheet GitLab Repository Due Date
01 https://gitlab.db.in.tum.de/cpplab21/sheet01 22.04.2021 23:59
02 https://gitlab.db.in.tum.de/cpplab21/sheet02 29.04.2021 23:59
03 https://gitlab.db.in.tum.de/cpplab21/sheet03 10.05.2021 23:59
04 https://gitlab.db.in.tum.de/cpplab21/sheet04 17.05.2021 23:59
05 https://gitlab.db.in.tum.de/cpplab21/sheet05 24.05.2021 23:59
06 https://gitlab.db.in.tum.de/cpplab21/sheet06 31.05.2021 23:59
07 https://gitlab.db.in.tum.de/cpplab21/sheet07 10.06.2021 23:59
08 https://gitlab.db.in.tum.de/cpplab21/sheet08 08.07.2021 23:59