A visually stimulating and practical guide to design patterns for Software Developers and Aspiring Architects