in Software Engineering

Essential reading from a mentor

I asked my friend and mentor Dr. Leon Hewitt for the books which have shaped his career in software engineering, here’s what he had to say

Extreme Programming Explained

Kent Beck (https://www.amazon.co.uk/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/)

If you only read one book about software development make it this one. This book (well the 1st edition) started me off on a journey which is coming up to 20 years old now and shows no sign of ending. Everything I talk about when it comes to software engineering has it’s roots somewhere in this book.

Test Driven Development: By Example

Kent Beck (https://www.amazon.co.uk/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530)

I read this, absorbed it and promptly forgot about it for many years. I came back to it a few years ago and realised a lot of the practices I thought I’d discovered for myself were in there. Saying I promptly forgot about it is a bit cruel. The fundamental principles from the worked example in the first part of the book never left me and still dictate the way I code to this day.

Growing Object-Oriented Software, Guided by Tests

Steve Freeman and Nat Pryce (https://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627)

Amazon just told me I bought this back in 2010. That’s over 7 years ago. This takes the principles laid out in Kent’s book, mixes them in with some ideas from Fowler’s Refactoring book and scatters in some enterprise architectural principles. This book shows you how to build bigger applications safely and test first. Heavy on the OO front, but I think the fundamental principles are true no matter what programming paradigm you’re in. The publication of this book lead to a bit of a London/Chicago divide when it comes to TDD. The London school that this book describes utilises a lot of mocking – but in a way that helps rather than hinders the evolving design of the code. The London school is often referred to as ‘Outside-in’ (i.e. start at the outside with a failing e2e test and work you’re way into the guts of the app) and the Chicago school is more inside-out (i.e. start building you domain logic and work outwards). The book has practical tips for integrating with third parties (in which I include the front-end website and the database, as well as other services) which is handy whichever school of TDD you adopt.

Practical Object Oriented-Design In Ruby

Sandi Metz (https://www.amazon.co.uk/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330)

If you find yourself getting into OOP then this is the book to get. It has a similar approach to OOP as the Freeman and Pryce book, but is simpler and more concise (in that it doesn’t try and show you how to build a full system). I’m still waiting for the functional programming equivalent – but honestly, if every programmer that said they were programming in an Object-Oriented style had read and adopted the principles in this book, I wouldn’t have to listen to these ‘Functional Programming will save the world’ talks.

Those are my top four.

Other ones to maybe checkout for:

Ron Jeffries’ The Nature of Software Development: Keep It Simple, Make It Valuable, Build It Piece by Piece  (https://www.amazon.co.uk/Nature-Software-Development-Simple-Valuable/dp/1941222374) which is a lovely little book which builds on a lot of the ideas in xP explained (Ron worked on the original extreme programming project).

REST in Practice: Hypermedia and Systems Architecture by Jim Webber, Savas Parastatidis and Ian Robinson (https://www.amazon.co.uk/REST-Practice-Hypermedia-Systems-Architecture/dp/0596805829) which I still maintain is the definitive book on a REST style architecture  (and everyone and his dog claims they are doing Restful APIs these days)

and I subscribe to this: https://cooperpress.com/publications/javascript-weekly/

and find it really useful for keeping up to date with javascript stuff (when I remember to read it).

– Leon Hewitt