This is a good book about real world software architecture and how it came to be. It consists of essays on many different software systems by the designers of those systems. As such some of the essays are less than useful due to repetition or writing where the author hasn't considered the best way to present his knowledge. These are far outweighed by the real world experience and architectural information handed out by people who've designed a very wide variety of successful software systems. This book will definitely inform my future software design.
This is the printed version of the set of papers you may downloaded from the website with the same name. So one should check for oneself if having the paper form is worth it. Note that all royalties go to Amnesty International, which I suppose is a Good Thing.
PLUS: The book is a good addition to the reading material of students making the passage from "programming in the small" to "programming in the large", so that they get an idea of what problems they may actually encounter and have to solve. The papers are also useful as intros to detailed studies of the systems they describe (in case one wants to help out and code a bit). One should not be afraid of technical details and have a general idea about program structure and implementation when reading this.
MINUS: The book should probably have been organized by themes. Instead of that, the papers come in alphabetical order of title. The bibliography might have been more extensive and an index would have been of some use. Finally, not everyone will be interested in all (or possibly even most of) the systems, problem areas or approaches explained herein.
WHAT THE HELL: The printed version has a problem with the f-ligatures - anywhere it is needed in the headings there are big jarring holes. Apparently the typeface used was incomplete and the editor asleep. The non-vector diagrams are fuzzy, evidently their resolution is not high enough for the printed form.
As said above, the book is not organized by themes, so let's do it here, in no other particular order.
* Berkeley DB (Margo Seltzer and Keith Bostic): For those who always wanted to know how a "serverless" database actually works. * The Hadoop Distributed File System (Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas): Structure of the same. * The NoSQL Ecosystem (Adam Marcus): An overview of the NoSQL approach; not fully sure about the theory. Consult February 2012 issue of IEEE Computer for more! * Riak and Erlang/OTP (Francesco Cesarini, Andy Gross, and Justin Sheehy) - A distributed database written in Erlang.
* VisTrails (Juliana Freire, David Koop, Emanuele Santos, Carlos Scheidegger, Claudio Silva, and Huy T. Vo): An extensive data exploration and visualization framework. * VTK (Berk Geveci and Will Schroeder): Another visualization toolkit. * Graphite (Chris Davis): Drawing and Graphing as with RRDtool.
* Battle For Wesnoth (Richard Shimooka and David White): A turn-based fantasy strategy game. * Thousand Parsec (Alan Laudicina and Aaron Mavrinac): A game framework for multiplayer turn-based space empire strategy games.
* The Bourne-Again Shell (Chet Ramey): A must-read for beginning computer science Unix users, I reckon. * Sendmail (Eric Allman): Eric talks about the life of Sendmail. He could have mentioned the Morris worm of 1988.
It would have been very interesting to also have a paper on the competing Postfix SMTP server. Sadly, no.
* Mercurial (Dirkjan Ochtman): The distributed version control system. * Eclipse (Kim Moir): The complex Eclipse IDE, how is it constructed?
* LLVM (Chris Lattner): The LLVM compiler toolchain * CMake (Bill Hoffman and Kenneth Martin): Something to replace autoconf/libtool nastiness. * Continuous Integration (C. Titus Brown and Rosangela Canino-Koning): A rather short discussion of various Continuous Integration Models (Buildbot, CDash, Jenkins, Pony-Build.) * Python Packaging (Tarek Ziadé)
* Selenium WebDriver (Simon Stewart): Exercise your web interface using Firefox and scripting.
* SnowFlock (Roy Bryant and Andrés Lagar-Cavilla): VM Cloning in the Xen hypervisor.
* Asterisk (Russell Bryant): Overview of the telephony application platform Asterisk, unfortunately at reference manual level. * Telepathy (Danielle Madeley): Modular framework for real-time communication.