Programming Architecture by Paul Coates (2010)