In our workshops on software architecture, one of the questions towards the end is: “There is so much to learn about software architecture – what books would you recommend us to read?”. To answer this question, we provide you a list of 10 must to read books in our opinion useful for software architects.
|1. “Software Architecture: Foundations, Theory, and Practice”, Richard N. Taylor, Nenad Medvidović, and Eric M. Dashofy, John Wiley and Sons, 2009.We were quite impressed by the rigor with which the topics were covered and the depth of treatment of the topics. In our opinion, this is the best textbook available in the world today for us to learn about software architecture. However, if you don’t like books written in “academic” style, this book is not for you. [Note: Slides available online here]|
|2. “Pattern-Oriented Software Architecture Volume 1: A System of Patterns”, Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal, Addison-Wesley, 1996.This is one of the earliest and best books on architectural patterns.This book presents a catalog of architectural patterns with a detailed discussion with examples, benefits, and liabilities. It is only a surprise that this book is not as popular as the classic “Design Patterns” book. This book is often referred to as POSA-I book because it is first in the series of books on patterns/styles.
Note that this book came out in 1996 and is not updated yet. But books on patterns/styles are as relevant today as it was 20 years back, so we highly recommend reading this book.
|3. “Design Patterns: Elements of Reusable Object-Oriented Software”, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Addison-Wesley, 1995.This is a book that architects and designers re-read because it condenses design knowledge in reusable patterns. Of course, it is dated – published in 1994 and not revised after that – but it is a timeless classic. Make sure you read it even if you don’t like design patterns. For example, we liked the beginning chapter – it helps us think at a deeper level about design in general and object-oriented design in particular.|
|4. “Software Architecture in Practice” (3rd Edition), Len Bass, Paul Clements, Rick Kazman, Addison Wesley, 2012.This is perhaps the best book available for students and practitioners alike for learning software architecture. It focuses on key topics in software architectures: “ilities”, patterns/styles, documenting architectures, and evaluating architectures. However, with all respect to the book, we doubt if the phrase “in Practice” in the title accurately reflects the contents of the book!|
|5. “Software Architecture for Developers”, Simon Brown, LeanPub, 2012.If you like “no-nonsense” introduction to software architecture (especially useful if you are a programmer), this book is for you. This book provides a good overview of software architecture. What we like about this book: It is written in an easy-to-read style with practices that an architect can adopt in their regular work. You may be interested in going through the presentation available here before deciding if you want to read the book or not.|
|6. “Essential Software Architecture”, Ian Gorton, Springer, 2006.This book shares practical experiences in architecting enterprise IT systems. When reading this book, we realized that this book does not take a general perspective on software architecture. We felt that it is more relevant for architects working in Information Systems domain; if you are working in embedded systems or other specialized domains, you may perhaps gain a very little from it. Otherwise, it is an excellent and practical book on software architecture.|
|7. “Refactoring in Large Software Projects: Performing Complex Restructurings Successfully”, Martin Lippert, Stephen Roock, Wiley, 2006.Refactoring is an important topic for large software projects (especially in projects that follow Agile methodology) given the fact that architectures evolve with changing requirements. Refactoring can be performed at a different scale or granularity. This book covers refactoring at a large scale and covers architectural smells. We don’t know why this book is not well-known, but we found it to be an excellent book, and highly recommend reading it.|
|8. “Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives”, 2nd Edition, Nick Rozanski, Eoin Woods, 2011.Since this book is written by experienced/practicing architects, you will find it to be quite practical (though the book mixes quite a bit of theory). The book emphasizes on working with stakeholders and using viewpoints and perspectives. Read this if you are looking for gaining an in-depth understanding of working with stakeholders and using viewpoints and perspectives. However, be warned: with the focus on viewpoints and perspectives, many other important topics in software architectures (e.g., NFRs, styles) are not covered well. Also, it is a bit voluminous, so you need patience if you want to complete reading this book.|
|9. “Patterns of Enterprise Application Architecture”, Martin Fowler, Addison-Wesley Professional, 2002.This book is strictly for software professionals entrusted with building enterprise applications. It covers patterns related to domain logic, database mapping and access, web presentation, concurrency, etc. Considering the vastness of the topic, Fowler has done an amazing job in making the contents clear through examples. He also guides us on choosing from a vast number of different types of patterns available (structural, web presentation, behavioral, domain logic, etc.). In a nutshell: This book does for enterprise application development in comparison to what GoF (Gang of Four) did for software development in general. We strongly recommend this if you are involved in developing enterprise applications.|
|9. “Patterns of Enterprise Application Architecture”, Martin Fowler, Addison-Wesley Professional, 2002.This book is strictly for software professionals entrusted with building enterprise applications. It covers patterns related to domain logic, database mapping, and access, web presentation, concurrency, etc. Considering the vastness of the topic, Fowler has done an amazing job in making the contents clear through examples. He also guides us on choosing from a vast number of different types of patterns available (structural, web presentation, behavioral, domain logic, etc.). In a nutshell: This book does for enterprise application development in comparison to what GoF (Gang of Four) did for software development in general. We strongly recommend this if you are involved in developing enterprise applications.|
|10. “12 Essential Skills for Software Architects”, Dave Hendricksen, Addison-Wesley Professional, 2011.Having only technical skills isn’t enough for an architect – soft skills (in addition to business skills and domain knowledge) are equally important to live effectively as an architect. This book presents a lucid and detailed discussion on 12 specific skills required for an architect. If you are a developer and aspire to become an architect, you’ll find this fun-to-read book useful to hone your non-technical skills.|
|Detect architecture smells in your project using Designite