In my never ending quest of total meters of bookshelves expanded, I have ordered two, relatively recently published books on C++, namely

Embracing Modern C++ Safely
By John Lakos, Vittorio Romeo, Rostislav Khlebnikov and Alisdair Meredith (Dec 2021), Addison Wesley and

C++ Software Design: Design Principles and Patterns for High-Quality Software
By Klaus Iglberger (Oct 2022), O’Reilly Media

I expect both books to be of some value to me while being on a new project working on an engine for image processing written in C++

Embracing Modern C++ Safely should be a reference while focusing on how to apply C++ 11/14 features (correct, no C++17/20 reference) with their potential pitfalls while understanding which of these demand additional learning. The book by Iglberger, C++ Software Design is in the same area of literature, namely focusing on the maintainability, changeability, and extensibility of the delivered software.

Design decisions and their consequences

The consequences of making specific software design decisions may be felt for a decade or more, thus it is vital to understand which design alternatives are available to you as a software engineer prior of starting the project. We probably have all been on projects where we sit refactoring code and where the design of the artifacts was not getting center stage while the software was implemented.

I have recently been involved in a larger refactoring project with thousands of classes and files. These projects can be highly costly and if the software had had a better design from the start, it would have cut down on these maintenance and redesign costs later. Software has a tendency to always grow organically and often the engineers that started the project are then far and long gone.

Often the design ideas are platform and programming language agnostic, whereas as you get down to the nitty-gritty, you want to understand exactly why e.g. this or that container is better to use than another.

More to come…