## Software design books

 E. Gamma Design Patterns: Elements of Reusable Object-Oriented Software / E. Gamma, R. Helm, R. Johnson, J. Vlissides. – Addison-Wesley Professional, 1994

It is a classical book about patterns design. The each of patterns description is so detailed, contains several implementations with their pros and cons. The books examples writes on C++ and Smalltalk languages, but verbal descriptions and UML-flowcharts help to understand the book to programmers on other languages. I recommend this book to every future programmers.

 Jason McC. Smith: Elemental Design Patterns – Addison-Wesley, 2012

Jason’s book is more scientific work than tutorial, although it is so interesting and useful. In the first instance, author considers elemental design patterns – such as delegation, inheritance, recursion. Then he shows how to produce more complex patterns and describes PIN – Pattern Instance Notation. The PIN is UML extension, that represents dependencies between patterns more concise, without implementation details. In fine, Jason explains the $$\rho$$-calculus, which is a formal theory of patterns. I suggest this book all good programmers.

 Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship. – Upper Saddle River, NJ: Prentice Hall, 2009

The book concentrates on clean code problems: coding styles, code formatting, clean code structure, unit testing, exception handling issues, etc. In the clean code context describes several design patterns. I advise this book to students, which achieved mastery of object oriented programming course.