Modernes C++
Ziel und Motivation
Jeder Teilnehmer soll in die Lage versetzt werden, deutlich gut wartbaren von schlecht wartbaren Quellcode unterscheiden zu können. Die Vorteile von gut wartbaren Quellcode sollen in das Bewusstsein der Entwickler gerufen und dazu motiviert werden. Der Workshop wird dazu den Entwicklern bewehrte Ansätze der modernen Leistungsmerkmale von C++ hin zu besserer Modularisierung und guter Code Qualität vermitteln.
Mit der Nutzung der neuen Leistungsmerkmale von C++ nach der Schulung ist eine höhere Code Qualität und Modularisierung möglich. In Verbindung mit aussagekräftigen Unit Tests kann eigenes und fremdes Vertrauen in den Quellcode erhöht und mehr Fehler in der Entwicklung aufgedeckt werden. Letztendlich kann damit auch eine schnellere Fehleranalyse stattfinden können.
Vorgehen
Um den Stoff nachhaltig vermitteln und motivieren zu können, werden sich Theorie-Vorträge mit praktischen Sessions untereinander abwechseln. Auch die Vorträge beziehen die Teilnehmer proaktiv mit ein und beantworten deren Fragen aus dem Programmieralltag. In den praktischen Sessions werden realitätsnahe Szenarien benutzt. Selbst erfahrene Entwickler sollen dabei etwas lernen können und motiviert werden. Ausgerichtet werden kann die Schulung anhand aller aktueller C++ Versionen, wie C++ 11, C++ 14, C++ 17 und C++ 20.
Organisation
Der Workshop unterteilt sich in theoretische und praktische Sessions. Die Länge der einzelnen Sessions variiert je nach Komplexität zwischen 20 und 120 Minuten. Alle Teilnehmer werden ermuntert, sich einzubringen und Fragen zu stellen. Die Schulung ist dafür ausgelegt, dass jeder Teilnehmer die modernen Leistungsmerkmale von C++ danach richtig im Alltag einsetzen kann.
Grundlagen
- Stand der Dinge bei C++ – ein Überblick
- „Almost always auto“ – wie das funktionieren kann
- Praxis: Umbau auf auto – wo es sinnvoll ist
- Neue statische & dynamische Container
- Praxis: Container einsetzen
Erweitertes
- C++ value object design in der std::chronos Bibliothek
- Lambdas richtig benutzen mit STL-Algorithmen
- Praxis: Lambdas & Algorithmen einsetzen
- „Type erasure“ – am Beispiel von std::function
- Praxis: Inheritance als Implementationsdetail
Weiterführendes
- Threads mit C++ verstehen
- Praxis: std::thread richtig einsetzen
- Atomics in C++
- Praxis: Themen übergreifende Praxis
- Zusammenfassung des Workshops
Moderne Werkzeuge: CMake
- Einführung am Beispiel
- Vorstellung eines einfachen Projektes
- Was macht CMake macht
- Erweiterungen für Bibliotheken und Unit Tests
- Erklärung der Ideen und Konzepte
- CMake Toolchains und Presets
- Vorstellung der verfügbaren Möglichkeiten
- Guide: Wie entschieden wird, was wie gemacht wird
- Abhängigkeiten in CMake
- Welche Varianten geboten werden
- Wie mit Drittanbieter-Bibliotheken umgegangen werden sollte
- Vorstellung der Werkzeuge vcpkg, conan und CPM
- Installation von eigenen Bibliotheken
- Details zur Arbeitsweise von
find_package
- Vorstellung: Der von CMake angedachte Weg
- Navigation in der CMake Dokumentation
- Debugging von CMake Skripten
- Details zur Arbeitsweise von
Moderne Werkzeuge: Paketmanager Conan
- Best Practices für Conan
- Umgang mit Sourcen (eigene und Drittanbieter)
- Versionierung von Conan-Paketen neben den Source-Versionen
- Umgang mit eigenen Paketen in einer frühen Entwicklungsphase: Austausch zwischen Konsument und Paketentwickler
- Integration in eine Continuous Integration-Pipeline