Reading List

Recommended reading list for software engineers. The majority of the books and talks that will be recommended are technology agnostic as these age well.

Foundation

These books are recommended as must reads for developers of all experience levels they cover software and agile/extreme practices that serve as a foundation for every programmer. More experienced programmers will also gain value from rereading these once every few years to help them stay focuses on core principles rather than becoming dogmatic about particular approaches.

Extreme Programming Explained - Kent Beck, Cynthia Andres

This is at the top of the reading list because it is by far the best bang for buck. In just 200 pages of large font Kent Beck and Cynthia Andres distil the practice of being a professional developer who has to deal with real world constraints. This book covers humanity, respect, feedback, working as a team, pairing, continuous integration, planning, quality, testing, and so much more.

This book on GoodReads

Test Driven Development by Example - Kent Beck

“By Example” is the key here, rather than just describing theory and expecting you to learn TDD, in this book, Kent Beck provides practical examples which start very simple so that he can show TDD best practice and why it is such a core programming skill. Note that the examples are all in Java but they are easy to follow regardless of what language you might be familiar with.

This book on GoodReads

Modern Software Engineering - Dave Farley

Dave’s modern software engineering builds on the principles and practices from Extreme Programming (XP). It uses what we have learnt in the industry since the 90s to fill in more detail and gives actionable techniques for applying the principles of XP. It begins by exploring the difference between a craftsperson and an engineer, covers all the foundational principles like the importance of measurements to working iteratively and getting feedback before moving on the management of complexity. The management of complexity is used as the context for why Modularity, Cohesion, Separation of Concerns (Dependency Injection, Domain Driven Design and architectural concepts like ports and adapters) and Coupling are discussed.

This book on GoodReads

Intermediate

These are resources useful for any level but are more focused and specialized than the foundational reading.

Learning Domain-Driven Design - Vlad Khononov

This book talks about the analysis of business domains, building a ubiquitous language and takes it a step or two further by explaining how you can apply these principle in modern application and system design. Learning Domain-Driven Design manages to cover the same ground as other DDD books more concisely and then expands on the concepts by giving practical advice on how to use them. It covers distributed systems as well as large modular applications and spends a lot of time exploring the trade-offs between different designs and so is aligned with the way we think about design problems.

This book on GoodReads

The Practical Testing Pyramid - Ham Vocke

An article on Martin Fowlers site rather than a book. This article explains different styles and scopes of automated test. This article builds a ubiquitous language around testing scopes and describes a lot of testing theory which is important for comprehensive automated testing.

Read the article

Continuous Delivery - Jez Humble & David Farley

This book is a technology agnostic description of how to shorten feedback loops in the software delivery lifecycle and develop high quality software efficiently.

This book on GoodReads

Advanced

Anyone can read these books/articles, and some value will be gained, but we feel that to get the most out of them, you will need to have some experience in the topic.

Designing Data-Intensive Applications - Martin Kleppmann

Subtitled “The big ideas behind reliable, scalable, and maintainable systems” this (rather thick) book is full of extremely valuable knowledge about Storage, Replication, Encoding, Partitioning, Transactions, Distributed Data, Stream & Batch processing, Consistency and consensus, data models and query languages. It does all this while being almost entirely tool agnostic.

This book on GoodReads

Accelerate - Nicole Forsgren, Jez Humble & Gene Kim

This book is a conclusion of academic research into DevOps and where it provides value demonstrably to organisations. This book provides proof that DevOps works and explains the key metrics that organisation can use to get the most out of organisational change. This is the book to use to help convince management and leadership that DevOps and Continuous Delivery are worthwhile practices.

This book on GoodReads

Reference

Only get these if you like using books for reference. These are not good learning resources to read front to back.

Site Reliability Engineering - Betsy Beyer, Chris Jones, Jennifer Petoff and Niall Richard Murphy

An operations handbook for running highly available services. Covers a huge amount of “Operations” knowledge you might not get elsewhere.

This book on GoodReads

Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Published originally in 1994, this is one of the most famous software books ever written. Collectively the authors are known as “The Gang of Four”.

The book is divided into two parts, with the first two chapters exploring the capabilities and pitfalls of object-oriented programming, and the remaining chapters describing 23 design patterns. The book includes examples in C++ and Smalltalk alongside diagrams of the pattern.

The first two chapters are a good read but really the point of the book is as a reference guide to the 23 design patterns.

This book on GoodReads