benlowery.co.uk

A Philosophy of Software Design (05/2020)

Author(s): John Ousterhout
ISBN-10: 1732102201
ISBN-13: 978-1732102200

This is my favourite development related book of the last decade.

In 190 pages Dr John Ousterhout condenses down 50 years of his knowledge on how he thinks software should be designed.

It's a short book and could be devoured in a few days (like I did) but I found myself coming back again and again to different parts of it and mulling over different chapters.

Chapter 2 gives an amazing definition of complexity in programs and then Chapter 3 titled "Working Code isn't Enough" describes the difference between strategic and tactical programming and why the latter tends to be the one that happens the most.

What I find interesting about the way Ousterhout discusses this is that he makes a case and then argues against it for specific scenarios - in a world where every development book author seems to define "The One True Way™" it's incredibly refreshing to see both sides.

The following chapters each touch on a different area of software design, make an argument for a particular approach and then discuss the various trade-offs.

The 'red flag' footnotes sprinked through are brilliant as well, it's rare to see knowledge that experienced programmers have internalised by blood and toil so eloquently summarised.

For example:

A shallow module is one whose interface is complicated relative to the functionality it provides. Shallow modules don’t help much in the battle against complexity, because the benefit they provide (not having to learn about how they work internally) is negated by the cost of learning and using their interfaces. Small modules tend to be shallow.
—John Ousterhout A Philosophy of Software Design - Chapter 4.5

I can't begin to count the times I've run into modules in systems that are a thin wrapper over something that simply doesn't need a wrapper, they just become a layer of indirection you end up ripping out at some point in frustration.

Chapter 5 follows on from 4 by explaining in more detail how to implement the ideas of module design from 4 and so on.

I'm not going to summarise the other chapters here because frankly Ousterhout is a better writer than me so I'd suggest go buy the book, you won't be disappointed.

Conclusion

This is a brilliant book written by a practising programmer (and academic) with 50 years experience that summarises an excellent Philosophy of software design.

He said in one of the talks I've seen him give (below) that he wanted to start a debate on this topic because while there is a lot of work around the process of writing software (Agile, Scum etc. etc.) there hasn't been much debate on the design of software, We have design patterns and such but they are often bricks and not the wall.

This talk made me immediately go buy the book and I heartily recommend you do to.

Amazon Link - No affiliate link