lived up to and exceeded my expectations.
I approached this book with some trepidation, partly because both "Art" and "Architecture" when applied to software can be controversial subjects, and partly because the title and cover hint at a difficult subject covered comprehensively and I have been disappointed in the past when books fail to deliver their promises. However, once I opened the book I found it lived up to and exceeded my expectations.
If "Art" is the "application of imaginative skill" (Collins Concise) then it does not preclude practising it using procedures and process as well as accepting an element of creativity. Architecture invites a comparison to civil architecture, but the author addresses the metaphor early on, comparing software systems with urban developments rather than individual buildings, and warns against the fallacy of this metaphor by analogy.
After introducing the subject in chapter one, the next few chapters delve deeper into the subject: Chapter two, with the slightly misleading title "Software Product Lifecycle", covers the development or project lifecycles from different viewpoints based on the Rational Unified Process (RUP). Chapter three "Architecture Design Process" looks at architecture design compared with engineering design looks at the interdependencies of design elements. Chapter 4 "Introduction to Software Design" discusses Function (what it does), Form (What it looks like) and Fabrication (how it is built) and reflects that software design is more a creative or artistic process rather than an engineering discipline. Chapter 5 covers complexity, modularity, coupling, cohesion and interdependences illustrated with examples of design structure matrix diagrams.
At this point, almost half way through the book, the narrative takes a step back from the detail of design and implementation and chapter 6 looks at models and knowledge representation: UI models, behavioural and functional models, and models of form. Chapter 7 follows on with architectural representation such as data view and process view. Chapter 8 covers the conflicting and differing views of quality including the use of metrics to measure quality.
The remaining chapters delve more deeply into software architecture building on the material introduced earlier in the book, and the book ends with a chapter on software architecture quality.
If I can find fault at all, it is in that, by necessity, it is a difficult book to read as it covers a complex subject area in depth. Thus, it is not a text to be consumed quickly, but a valuable resource to be sampled in manageable chunks over months and years in-between applying the knowledge and principals gained. Recommended.