# Junior

## Motivation and experience

- [Robert Martin - The clean coder](https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073)

    Uncle Bob shares his recommendations on how to "survive" and be successful in the IT industry. This book isn't just about technical skills. It also presents psychological challenges and struggles with them.

- [Robert Martin - Clean Code: A Handbook of Agile Software Craftsmanship](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)

    Nowadays, you might find a lot of criticism about this book. Despite all, we still guess this book can be quite helpful for newbies rather than harmful in short-term distance. This book contains a collection of working tricks which will help you to write well-structured, readable and maintainable code. As with any other knowledge, don't try to place on the "throne" and transform it to cargo-cult. Use this knowledge wisely. Try to collect a set of tricks from the book which are suitable for you and helpful for improving of your code-style.

- [Steve McConnell - Code Complete: A Practical Handbook of Software Construction](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670)

    Despite the book ages, it might be called a developer's "bible". It systemizes all knowledge of how the IT industry looks like. This book also proposes tons of useful advice: how to grow and become a 1-st class professional.


## Computer Science

- [Thomas H. Cormen - Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)

    This book is a perfect continuation after "Grokking algorithms". This book introduces common algorithms of sorting, working with lists, etc., but gives more details. It is written in a friendly way. It will be helpful to prepare yourself for deep diving in algorithms area.


## C++

- [Scott Meyers  - Effective C++: 55 Specific Ways to Improve Your Programs and Designs](https://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876)

    This book is a perfect cookbook of C++ foundations. This book is about C++03 features, but it's still valuable and relevant information. All recommendations described in this book are perfectly suitable for the newest standards.

- [Jason Turner - C++ Best Practices: 45ish Simple Rules with Specific Action Items for Better C++](https://www.amazon.com/Best-Practices-Simple-Specific-Action/dp/B08SJSZKJ5)

    A collection of tips for developers with little experience writing C++ code. It contains recommendations on the most common errors. All explanations are presented briefly and concisely. The most of these recommendations contain links to additional sources. This book doesn't provide a fundamental analysis of each advice, therefore it is recommended to deal with each recommendation in more detail in the future in order to understand true reasons behind them.

- [Herb Sutter, Andrei Alexandrescu - C++ Coding Standards: 101 Rules, Guidelines, and Best Practices](https://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586)

    This tiny book describes common best practices of code writing around commercial projects. It's an aggregation of experience collected from different companies. This book was also a foundation for the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). You can immediately visit C++ Core Guidelines, but it's still recommended starting with this book first. It will help you to get a first impression of code guidelines spread around projects. When it's done, you can visit the C++ Core Guidelines website and get the latest approved approaches.


## Hard skills   

- [Eric Freeman, Elisabeth Robson - Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124)

    This book is a perfect start to studying design patterns. As another alternative, you can also visit [refactoring.guru](https://refactoring.guru/design-patterns), but in case of using this book, you will be able to have a lot of practice on-the-fly which help you to better understand ideas of common design patterns.

- [Sanjay Madhav, Josh Glazer - Multiplayer Game Programming: Architecting Networked Games](https://www.amazon.com/Multiplayer-Game-Programming-Architecting-Networked/dp/0134034309)

    This book is an excellent introduction to networking theory. It will explain network foundations through video games examples. They will help you to write your first application working via a network. Besides a theory, you will gain experience in how to work with it in C++. All examples are written in C++11/14.
