Modern C++ Software Design (Advanced)

Enterprises & SME Research & Science
Modern C++ Software Design (Advanced)

Overview

This advanced C++ training is a course on object-oriented (OO) software design with the C++ programming language. The focus of the training are the essential OO and C++ software development principles, concepts, idioms, and best practices, which enable programmers to create professional, high-quality code. Additionally, the course gives insight into kernel development with C++. The course will not address special areas and applications of C++, such as for instance Template Meta Programming (TMP), or the quirks and curiosities of the C++ language. It rather teaches guidelines to develop mature, robust, maintainable, and efficient C++ code.

Since 2020 we provide two types of C++ courses, each offered two times per year:

  • intermediate: Mar. 8-11, 2022, and June 21-24, 2022
  • advanced: May 3-6, 2022 (this course), and Nov. 22-25, 2022

with two different levels of prerequisites.

On-site / COVID

On-site course & COVID rules

Although this event is a training course, another important aspect is the scientific exchange between participants, which did not work as well as we hoped in our online courses.

The concept to enable this communication among our participants consists of

  • common coffee and lunch breaks, and
  • if you want and permitted by COVID-19 rules in May, working together in groups of two during the exercises.

For your security, we allow only completely vaccinated, or fully recovered, or participants tested negatively on COVID-19 on all days. Note that participation with tests might be prohibited when the course starts or even while the course runs. In the course room and when not eating/drinking, FFP2 masks are required. See here for details (available when registration is open). Of course, these rules also apply to the instructors.

Prerequisites
Prerequisites

Prerequisites Advanced C++ (this course):

Course participants should have basic UNIX/Linux knowledge (login with secure shell, shell commands, simple scripts, editor vi or emacs). At least two to three years of experience with the language is needed. This includes a solid knowledge of the syntax of C++, experience with both template-based and inheritance-based designs and some experience with design patterns.

Prerequisites Intermediate C++ (other course type):

Course participants should have basic UNIX/Linux knowledge (login with secure shell, shell commands, simple scripts, editor vi or emacs). At least one year of experience with the language is needed. This includes a good understanding of the basic mechanics (header files, source files, compilation), good knowledge of the syntax of C++, and some experience with templates and inheritance.

Please choose the course that fits best to you!

Gained Skills
Gained Skills

After this course, participants will:

  • have a detailed understanding of the essential OO design principles
  • have gained knowledge about fundamental C++ programming concepts and idioms
  • be able to properly design classes and class interfaces
  • know about the importance of exception safe programming
  • have gained insight into kernel development with C++
  • avoid the usual pitfalls in the context of inheritance
  • comprehend the advantages of value-based design
  • understand the virtue of clean code
Program
Program

Local registration (8:30 - 9:00)

1st day course schedule (9:00 - 17:30)

  • The Basic Design Principles
    • Defining a Goal
    • The SOLID Principles
  • Concepts and the STL
    • STL Allocators
    • constexpr

2nd day schedule (9:00 - 17:30)

  • Advanced Templates
    • Type Traits
    • SFINAE
    • Concepts
    • CRTP
    • Forwarding References

3rd day schedule (9:00 - 17:30)

  • Dynamic Polymorphism
    • The Perils of Inheritance
    • Value Semantics
    • Public Inheritance
    • Surprises in Object Hierarchies
  • Design Patterns
    • Strategy
    • Visitor
    • Type Erasure

4th day schedule (9:00 - 16:30)

  • Design of HPC Components
    • Choice of the Proper Data Structures
    • Kernel Design
    • Loop Unrolling
    • SIMD Vectorization


Language
Language

The course language is German. The slides are in English.

If you want a similar course in English, then please look at the 4 day courses at VSC in Vienna,
or directly on Klaus Iglberger's course page.

Teacher
Teacher

Klaus Iglberger (External)

Registration

via online registration form.

extended Deadline
Deadline

for registration is April 17, 2022 (extended deadline).

Fee
Fee

Students without Diploma/Master: 35 EUR.
Students with Diploma/Master (PhD students) at German universities: 75 EUR.  
Members of German universities and public research institutes: 75 EUR.
Members of universities and public research institutes within EU or PRACE member countries: 150 EUR.   
Members of other universities and public research institutes: 300 EUR.
Others: 780 EUR.  

Our course fee includes coffee breaks (in classroom courses only).

Organization

Travel Information and Accommodation

see our How to find us page. We strongly recommend to choose travel options and hotels with the possibility to cancel (even close to the event) because we might be forced to deliver the course as an online course.

Breaks

There will be several shorter breaks and a lunch break every day. Unfortunately, due to the COVID-19 pandemic, we can only offer water (carbonized and natural) and apple juice in single bottles in breaks but no coffee. If you would like to drink coffee you might bring it in a thermos yourself or you can go to a nearby bakery. All bottles that contain liquids must be safely lockable by a screw cap to protect the laptops and underfloor in the lecture hall.

We recommend that you bring your own lunch. As of today, due to COVID-19 restrictions, there will be no possibility to have lunch at the canteen. We are only aware of the following two publicly accessible nearby places for lunch:

PRACE PATC and bwHPC

HLRS is part of the Gauss Centre for Supercomputing (GCS), which is one of the six PRACE Advanced Training Centres (PATCs) that started in Feb. 2012.
HLRS is also member of the Baden-Württemberg initiative bwHPC.
This course is provided within the framework of the bwHPC training program. This course is not part of the PATC curriculum and is not sponsored by the PATC program.

Contact

Andreas Ruopp phone 0711 685 87259, ruopp@hlrs.de
Rolf Rabenseifner phone 0711 685 65530, rabenseifner@hlrs.de
Tobias Haas phone 0711 685 87223, tobias.haas@hlrs.de

Shortcut-URL & Course Number

http://www.hlrs.de/training/2022/CPP2