Programming in the Large with Design Patterns (2012)