# :sunglasses: Middle

## :pencil: C++

- [Scott Meyers - Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14](https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996)

    It's a new chapter in the collection of books by Scott Meyers. This book compiles a set of tips for the C++11/14 standards.

- [Anthony Williams - C++ Concurrency in Action](https://www.amazon.com/C-Concurrency-Action-Anthony-Williams/dp/1617294691/ref=sr_1_3?keywords=C%2B%2B+Concurrency+in+Action%3A+Practical+Multithreading&qid=1636314477&s=books&sr=1-3)

    This book is a comprehensive guide to multithreading programming and the use of standard library features. It provides detailed explanations about all primitives and their intricacies "behind the scenes."

- Herb Sutter:
    - [Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Engineering-Programming-Problems-Solutions/dp/0201615622)
    - [Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Style-Engineering-Programming-Solutions/dp/0201760428) 
    - [More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/More-Exceptional-Engineering-Programming-Solutions/dp/020170434X)

    The collection of books covers many tasks related to designing or writing code in C++, offering a range of effective solutions. Many of these solutions have been deemed classic idioms and are widely used in various projects.

- [David Vandevoorde - C++ Templates: The Complete Guide](https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121)

    The newest and relevant book about C++ metaprogramming, specifically templates, is a comprehensive work that describes relevant techniques and foundations added in recent standards, including C++17. If you're looking to write generic and parameterized code, this book will become an indispensable resource for you, offering insights into the basics of templates as well as a multitude of nuances related to different techniques.


## :bicyclist: Optimization for C++ applications

- [Kurt Guntheroth - Optimized C++: Proven Techniques for Heightened Performance](https://www.amazon.com/Optimized-Proven-Techniques-Heightened-Performance/dp/1491922060)

    This book is a guidebook for improving the performance of C++ applications. Some of the advice in this book is based on various idioms and tricks outlined in books by Herb Sutter or Scott Meyers. It is recommended to read this book after reading the previously mentioned books.

- [Agner Fog - Optimizing software in C++](https://agner.org/optimize/optimizing_cpp.pdf) or [Optimization manuals](https://agner.org/optimize) 

    Practical-oriented guides provide comprehensive information about the potential optimization possibilities for applications developed in C++ or related to interaction with the CPU, memory, etc.

## :electric_plug: Hard skills

- [Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides or "Gang of Four" - Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)

    This book is a classic guidebook on design patterns. Each pattern is described in detail and advised on its appropriate use case. This book is a good follow-up to "Head First Design Patterns" by Eric Freeman. However, be prepared, as this book is more complex than the previous one.

- [Gary McLean Hall - Adaptive Code](https://www.amazon.com/Adaptive-Code-Developer-Best-Practices/dp/0136891446)
    
    This book is an excellent resource for understanding the SOLID principles of software design. The explanations are presented in simple terms, making them easy to understand. The code examples, which are written in C#, are also simple and serve to illustrate the principles effectively.

- [Robert Martin - Clean Architecture: A Craftsman's Guide to Software Structure and Design](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164)
 
    This book, written by Uncle Bob, provides guidance on how to approach software design with a focus on architecture. It emphasizes the importance of thinking about the architecture of an application or component before starting to code. The book provides insights on what to consider when analyzing the design of a solution and helps prevent common mistakes in software design. This book is a great starting point for individuals interested in architectural tasks in software design who are seeking to gain a deeper understanding of the field. The knowledge contained in this book is widely used among engineers and will help them in avoiding widespread mistakes.

- [Samary Baranov - Finite State Machines and Algorithmic State Machines: Fast and Simple Design of Complex Finite State Machines](https://www.amazon.com/Finite-State-Machines-Algorithmic-Complex-ebook/dp/B078RYYBCJ)

    This is a short and practical guide on how to approach programming using the theory of finite machines. You won't find a simpler and more elegant explanation of finite machine theory and its practical applications.

- [Vladimir Khorikov - Unit Testing Principles, Practices, and Patterns: Effective testing styles, patterns, and reliable automation for unit testing, mocking, and integration testing with examples in C#](https://www.amazon.com/Unit-Testing-Principles-Practices-Patterns-ebook/dp/B09782L692)

   The book provides insights into the best practices and common anti-patterns that surround the topic of unit testing. After reading this book, armed with your newfound skills, you’ll have the knowledge needed to become an expert at delivering successful projects that are easy to maintain and extend, thanks to the tests you build along the way.


## :zap: Operating systems

- [Andrew S. Tanenbaum - Modern Operating Systems](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X)

    This is a comprehensive guide to operating systems, covering its construction and various aspects such as file systems, networks, memory management, task scheduling, and multithreading. The book provides in-depth explanations in simple terms, without focusing on a specific OS distribution. Each chapter offers a detailed exploration of different aspects of operating systems, making it a fundamental resource for understanding this complex subject.

- [Mark Russinovich - Windows Internals, Part 1](https://www.amazon.com/Windows-Internals-Part-architecture-management/dp/0735684189), [Mark Russinovich - Windows Internals, Part 2](https://www.amazon.com/Windows-Internals-Part-2-7th/dp/0135462401)

    This book delves into the same topics as the previous book, but with a focus exclusively on the Microsoft Windows operating system. It provides a deep and detailed look at every aspect of the OS with a specific focus on Windows and covers various nuances and aspects that may not be officially declared by the developers. It is a useful resource for those who develop low-level applications that require intensive interaction with the OS system libraries.

- [Christopher Negus - Linux Bible](https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/1119578884)

    This book can serve as a follow-up to Tanenbaum's work, delving into the intricacies of the Linux operating system. The book includes detailed analysis of various aspects of the OS, with a focus on popular distributions like Red Hat, Ubuntu, and Fedora. It is an ideal resource for developers who use Linux on a daily basis

- [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)

    This article provides a comprehensive overview of how PC memory works and why it operates in the manner described. It presents not only high-level information, but also delves into low-level aspects, making it ideal for those who want to delve deeper into the subject matter.


## :globe_with_meridians: Computer networks

- [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958)

    A classic book on the theoretical foundations of computer networks provides a detailed description, starting from the physical layer and ending with data transfer protocols. It will be extremely useful for developers who are closely involved in projects that interact with networks.

- [Victor Olifer - Computer Networks: Principles, Technologies and Protocols for Network Design](https://www.amazon.com/Computer-Networks-Principles-Technologies-Protocols-ebook/dp/B001GQ35P4)

    This book provides comprehensive information on the basics of computer networks. It may present information in a slightly more complex manner compared to Tanenbaum's work. As a result, it is recommended to choose the book that presents the information in a style that is most suitable for you

---

[**Go back**](Overview.md) | [**To main page**](../../README.md)