All-Time Classics: a Selection of Recommended Books for Software Developers

February 23, 2008

A common question I’m asked is “which books should I read?”

In this article, you’ll find a selection of books for software developers aiming at becoming Generalizing Specialists.

These are mostly timeless books, delivering principles or techniques that significantly changed the way I work.

Implementing Lean Software Development (Mary and Tom Poppendieck)

This one is a must-have if you want to learn more about process improvement, team building and efficient agile principles.

Through principles like focusing on value or chasing waste, this book had a huge impact on the way I write code (I have now a very strong focus on simplicity), organize maintenance, build a team with a positive spirit, share the knowledge inside a team.

It also had a strong impact on the way I architect a system or refactor a process.

This book is precious if you want to apply SCRUM or other agile methods.

It is written in a very pragmatic and humble style, and is zealotry-free™. It’s my favourite software book in 2007 (the year I read it).

Software Estimation: Demystifying the Black Art (Steve McConnell)

We all suck at estimating. That’s how it is. Chapter 2 (How Good An Estimator Are You?) will ensure you realise it!

This book is my favourite book on estimation (and my favourite software book in 2006 as well).

You’ll see how to never throw out meat at the end of a barbecue ever again (isn’t that a concrete use?). And you won’t guess-timate anymore.

The book starts with a clear separation of what estimates, targets and commitments are (ie: an estimate is an mathematical analysis, not something that can be negociated) and is value-packed with simple and effective methods and valuable principles.

I consider it a must-read for any developer or project manager.

Nonviolent Communication: A Language of Life (Marshall B. Rosenberg)

Software development is a discipline with a lot of “human” in it. As such, I found out that I was worthy to develop my communication skills by reading books like this one.

Nonviolent Communication focuses on separation between evaluation and observation and on a 4 steps process (observing, feeling, needing, and requesting).

Although a bit difficult to get started with (I’ve done group training after reading the book), it is very useful to increase your conflict-solving abilities and to get the most out of complicated (negociations, misunderstandings) situations.

Don’t be mistaken by the first impression that it’s a “be nice with others” technique. It’s more a “be as nice with yourself as you are with others” technique.

It’s not a manipulation technique. It’s more a technique to understand everyone’s needs and try to fulfill them with a common strategy.

Discovering and learning how to practice Nonviolent Communication had a huge impact on the way I work everyday.

The Datawarehouse Toolkit (Ralph Kimball and Margy Ross)

Most programmers enter the reporting battle field unarmed, hoping to use there littl’ sql knowledge to generate loads of customer reports.

Soon they realize that something may have gone wrong. Dimensional modeling will definitely help here.

“The Data Warehouse Toolkit” will give you a deep understanding of what is dimensional modeling, both through theory and through analysis of real-life use cases to demonstrate each concept. It also underlines the importance of planning and maintenance in datawarehouses projects.

I consider this book to be a fundamental reading if you want to build datawarehouses or to get a better grasp on statistics generation.

The Datawarehouse ETL Toolkit (Ralph Kimball and Joe Caserta)

To me, this book really is the companion book of “The Datawarehouse Toolkit”.

It focuses on the extract, transform and load part and highlights data cleaning and conforming operations.

It will be very useful to you if you start a datawarehouse project or a data aggregation engine and don’t intend to reinvent the wheel to clean-up your data.

One tip: clean-up your data first to help normalize it, or you’ll spend your life doing it too late at reporting time.

Designing with Web Standards (Jeffrey Zeldman)

Anyone doing web-design should read this book.

Although you’ll see critics about the fact that it is slow to start (this feeling will depend on your own experience), I believe this book is very good to help you understand the principles behind the web standards if you are a programmer who didn’t work with x/html and css at all, or did it a long time ago (and things changed a lot since year 2000).

As well you won’t find plenty of design tricks in this book: consider it a “principles” book. It’s definitely worth reading though.

Note: this book is now largely outdated — web standards have evolved considerably since its publication. The other books in this list have aged much better.

Learn to program (Chris Pine)

“But I don’t need to learn to program!” you may say. Nope, sure!

This book helped me to become more understandable when working with non-technical people or with other programmers (and that’s a skill by itself).

As well, I’ve used this book to train non-technical users (yes, they read it!) before I give them access to a DSL built with ruby or other languages.

Good to share the joys of programming with your kid too.

Advanced Animation and Rendering Techniques (Alan Watt and Mark Watt)

Many developers I’ve worked with are fascinated by animation and graphics, yet most of them only work on enterprise software.

They wonder how it’s possible to animate and render things this way.

This book is an interesting read for anyone willing to get a good grasp about the theories and concepts behind 3D animation and rendering, including:

  • coordinates systems, rendering, rasterization (quaternions, matrices)
  • clipping, conversions to screen-space
  • light/object interaction and lightning models such as Gouraud, Phong
  • parametric surfaces, bézier curves, b-splines
  • filtering (supersampling)
  • texture mapping, environment mapping and anti-aliasing
  • soft shadows
  • ray tracing
  • radiosity
  • procedural animation and kinematics
  • and a lot more

Be warned though: this book is full of C (without the ++), it’s old (1992) and it’s full of mathematics. But to date, it’s my favourite book covering this field.

These books shaped the way I work over the years. I hope some of them will be useful to you too.