Quite recently a team member wanted to suggest interesting technical books to read for a junior engineer. I figured I might as well write my top 5 books here, in no particular order. I believe every Software Engineer should own these books, but reading them is a very good start ;)
The Pragmatic Programmer: From journeyman to master
If you have to read just one book, specially when starting to write software, it should be The Pragmatic Programmer. It covers ideas, always focused on self-improvement, mastery of the craft, and professinalism. I see this book as an extended list of ideas and suggestions for self-improvement, similar to the programmer competency matrix. While reading it, it’s better to keep growing a list of topics to investigate further, as the book covers wildly different practices, ideas, and techniques.
The Art of Unit Testing
This book opened my eyes into the world of unit testing, from a practical (not philosophical) point of view. It introduced me to practical techniques to use in unit testing. Most imporptantly, it helps understand the crucial understanding of the necessity of maintainable test code, and ‘good’ tests. I think it’s the best introductory book on unit testing. Period.
Seven Languages in Seven Weeks
More than a book, “Seven Languages in Seven Weeks” is an exploration into wildly different concepts across programming languages. It’s a book about paradigms, and crucially, sparks the curiosity of why these exist at all. The way that the concepts are introduced, focusing on the reasons, advantages, disadvantages and design decisions of a language were very insightful for me. If you don’t try the proposed challenges the book still will give you a lot of material to think about and to take ideas from.
Domain-Driven Design
Most software projects are about tackling complexity, and I must say many projects fail in this regards. The book taught me how to think about the act of writing code in a more abstracted way, as a modelling problem. Eric Evans introduces many concepts that in my opinion should be as ubiquitous as the OO Design patterns of the Gang of Four book.
The Algorithm Design Manual
I prefer “The Algorithm Design Manual” over the canonical “Introduction to Algorithms”, because of the ‘Catalog’ section. The section focuses on problems first, and acts as an index to get ideas for solutions. This section alone is very helpful, not only for practical reasons, but also to understand motivations and see the breath of problems tackled by algorithms.