I had a chance to read such a book after long time on system design and architecture. It presents a range of design methodologies and software architectures.
First few chapters of the book are dedicated to software architecture and role software architecture plays in software development. Then, the authors introduce the different architectural approaches or styles. Finally, the introduction of functional and non-functional requirements and how to recognize and categorize both types of requirements.
The book uses C++ as the programming language to demonstrate different concepts. C++ is a multi-paradigm language that has been around for a few decades and many of the most successful software are developed in C++. The authors of the book leverages what the C++ language offers and explains the best industry practices for type safety, avoiding memory issues, and creating efficient code. Features and techniques of almost all major C++ versions are covered i.e. from C++ 98 all the way to C++ 20 such as template, concepts, modules and declarative programming and RAII.
There is a detailed discussion on various C++ features such as Implementations of the standard library, Class Template Argument Deduction (CTAD introduced in C++ 17), Smart Pointers, inline namespaces, preconditions and postconditions, safe types, rules of three and five (introduced in C++ 98 and C++ 11 respectively), Niebloids (C++ 17), dynamic versus static polymorphism, creational design patterns, memory optimization using C++ 17 features (polymorphic allocators, memory arenas, etc).
Much attention is given to the high-level software quality concepts such as design and manage automated tests, Continuous Integration (CI) and Continuous Deployment (CD), design applications with a focus on security, and increasing the performance of the software. Similarly, equal attention is given to modern architectural style that originated with distributed systems and within cloud environments. It includes Service-Oriented Architecture (SOA), microservices and their benefits and use of containers to standardize installation and configuration.
Overall this is a good reference book to have in the shelf. This is highly recommended book on C++ for relatively experienced programmers and knowledge of C++. The authors share practical code example with most of the design principles discussed in this book. The book “Software Architecture with C++: Design modern systems using effective architecture concepts, design patterns, and techniques with C++20” does full justice to it’s title and focuses on all aspects of design and development of a successful distributed system.