If i could recommend to read only a single book in entire life, that would be this one. It is very all encompasing book covering a lot of aspects of software development. Some of them in more than enough capacity. Some of them is showing only briefly and redirecting to where to learn them further. With this book u will have much clear picture that there is still a lot to learn ahead. It has plenty of recommendations what to read next.
Despite it being written in 2004 year as second edition, it still remains relevant for 98%+ of its text. With reading its material you will learn reusable skills that will remain persistent through your full career. it will help you to write more cleaner, more readable and maintainable code in any programming language. It will help you to understand possible goals in development to aim for, and what you could be missing to code with more efficiency.
This book teaches theory behind unit testing. For which goals to aim for, how to escape pitifals. It will explain you importance of unit testing and what kind of testing exists. This book is important to weaponize your skills to an average commercial level development.
This book teaches practice behind unit testing. On a specific example it walks you through how to have unit testing as part of your development cycle at every moment. It teaches you feeling how much gap between tests is allowed in your working code.
This book helps to have a global look onto code design of a single application. It helped me in achieving a necessary view for designing libraries.
The book makes walk through steps of Software Development Lifecycle. From getting approved draft, gathering requirements for its functional and technical requirements, to working with user usage case scenarios, designing database, infrastructure and application development. You can save a ton of time, with refactoring the design of application before a single code line was written.
Structured learning of docker. Important thing for any DevOps engineer, Backend developer or any other job role dealing with web applications and their related ecosystem of databases and other stuff. Docker is helping to document as a code your web application building and freeze entire everything needed for its running. Containers became standard for immutable deployments, and with learning docker you will make your app compatible with modern ecosystem and get ability for easier rollback to previous version.
In case u need jump start in learning kubernetes this book is for you. From same author as Docker Deep Dive. a structured dive into k8s.
This book teaches you instrument to automate all actions of dealing with cloud providers, like AWS / GCP / Azure. Without terraform or pulumi it is not very recommended diving into them, for a reason of a high complexity to tune all things. Infrastructure as a code changes things and helps to utilize the power of such cloud providers in a comfortable way.
P.S. this book is AWS oriented, but its material will be useful for you for any cloud provider. Also recommending learning terraform first instead of kubernetes, as it is covering more necessary things first, from setting up servers, to configuring networks, iam permissions, security groups to managed databases and other gazillion of moden cloud services.