Five books to read about programming
I am sure you can offer the options no worse, and perhaps better. I call books that impressed me, or those that I came across more often. In any case, it will be useful to read them both to novice developers, and those who already have sufficient experience.

Direction: Programming as a profession
Book: E. Hunt, D. Thomas. “The pragmatic programmer. The journey from apprentice to master ”

This book is not about technology and programming languages. It is about principles and approaches - about what programming is at its core. That is why I put it first on the list. Much will seem obvious, you will argue with something, doubt something, and will search for answers for a long time on your own experience. But it is precisely these and similar principles and approaches that determine you as a developer.
Languages and technologies are changeable. But the main thing is not a tool, but the ability to use it to solve assigned tasks. This is what determines how good a developer you are.
Direction: Architecture
Book: E. Gamma, R. Helm, R. Johnson, D. Vlissides. “Techniques of object-oriented design. Design Patterns. A

surprisingly useful book by the famous Gang of Four. A great example of a structured and thoughtful presentation. In fact, the book laid the terminology that almost all programmers use when discussing a particular architectural solution.
It is thanks to her that we spend much less time both in communication and in trying to understand someone else's code (of course, provided that the author has also read this book and follows the proposed terms).
Direction: Programming Languages
Book: B. Kernigan, D. Ritchie. “C Programming Language”

Good books do not age. You may never come across C development, but if you have time, read the book. A great example of how to simply, concisely and intelligibly describe the structure and capabilities of a language. It is amazing how on a relatively small number of pages the authors managed to expose the essence of the language while avoiding the dryness and excessive rigor of the wording. Just a great book about a great programming language from its creators.
Direction: Technology
Book: J. Richter. "CLR via C #"

Almost perfect .NET tutorial.
Jeffrey Richter talks in detail about the C # language, as well as about the device and the fundamental principles of the functioning of the .NET platform. The traditional question at our interviews was: “Have you read Richter? How many times?". The question has been invariably for many years, only books are changing. There used to be “Windows via C / C ++”, now this one. Jeffrey has a real talent for opening doors for beginners, creating the right and deep enough foundation for further development. This book is not the only one, but if you are starting out with .NET technology, start with it. You will not regret!
Direction: Areas of development and other areas
Book: E. Tanenbaum, M. van Steen. “Distributed systems. Principles and paradigms ”

Perhaps this is not Tanenbaum’s most striking work (recall at least his“ Operating Systems. Development and Implementation ”or a debate with Linus Torvalds), but a worthy book to read.
Definitely do not finish the study of distributed systems on it, since a lot has appeared since its publication. It may look too academic, but if you are looking for the foundation for your knowledge in this field, then this book is worth reading.
There are many areas of programming, as well as useful books in each of them. These are databases, web, networks and others. But my advice to you: choose books that will give first of all understanding, and not just superficial information. Don't memorize what you can find on Google in five minutes.
Enjoy reading!