notsotrivial.net

Non-trivial matters of interest to software architects and other like minded geeks.

Bookshelf

I love books. Always have and always will. In fact, there was a time (before I had kids) when I would buy at least two books every time I recieved a paycheck. As a result, I own about 40 technical books that I've lugged around with me over the years and every year or two add a new one to my bookshelf that I consider a classic. This page is where I'll list those that I think are of particular importance to Architects.

 

Architecture & Design

Universal Principles of Design by WIlliam Lidwell, Kritina Holden, and Jim Butler

This is a great first book for designers. It contains 100 common design concepts that everyone should know - things like the 80/20 Rule, Ockam's Razor, and Fitts' Law. If you're a code slinger, this may not the book for you. But if you do design in any capacity, this book has something for you that I guarantee will help refine your craft. It's a beautiful book and the explanations and examples are dead on.

 

 

 

Domain-Driven Design by Eric Evans

I love this book because it offers most elegant model for software design I've ever seen. All software is boiled down into four elements: ENTITIES, VALUE OBJECTS, SERVICES, and MODULES. Not only does it offer a great mental model for conceptualizing design, it offer tons and tons of real world examples. Chapter 5 alone is worth the price of the book. This book WILL make you a better designer and developer.

 

 

 

Design Patterns - Elements of Resusable Object-Oriented Software by Erich Gamma, et. al.

This is the book that launched a thousand software architect careers. Considered by all to be a classic, it was the first serious attempt to document repeatable high-level software designs. The patterns themselves have aged fairly well, but what really made this book stand out was the taxonomy and prescriptive format used to document the patterns. It's one of those books that you get more out of each time you crack it open. It's dense and has a somewhat academic/scientific flavor to it, making it difficult to read in places. If you find this a turn off, the derivative works are more approachable and cover all the same topics this book does. It may be nostalgia, but I prefer this version over the derivatives.

 

Framework Design Guidelines - Conventions, Idioms, and Patterns for Resusable .NET Libraries by Krzysztof Cwalina and Brad Abrams

This book is the result of an internal effort at Microsoft to share framework design best practices during the development of the .NET 1.0 framework. Krzysztof and Brad were part of a team that conducted API usability studies and reviews of the emerging framework APIs with the development teams doing the work. It began as a word document and review consultations with teams but eventually turned into a series of internal lectures offered to all developers working at Microsoft. That was where I first heard about this effort. The lectures were recorded and for a while made publicly available (they have since been removed). The series ultimately let to the creation of this book, which is jam packed with years of wisdom and anecdotes about good API design. If you work on shared libraries, this book is a must read. P.S. I still keep a dvd with the original lectures in my backpack. Catch me at an event and I'll share.

 

Refactoring - Improving the Design of Existing Code by Martin Fowler, et. al.

Ever inherit a big mountain of nasty code and have to add new features to it?  You can only play the "we have to rewrite it all from scratch" card with management a once every couple of years. This book is THE canonical reference for identifying smelly code and getting it cleaned up.  It provides an enormous toolbox of tactics you can use to make incremental improvements to an existing code base.  Using these tactics along with an iterative approach, you could very well rewrite an application from scratch over the period of a few releases and your management will be none the wiser. Every developer on your team needs to own this one.

 

Systems Thinking - Managing Complexity and Chaos by Jamshid Gharajedaghi

This book is a cornucopia of ideas, patterns, and solutions for looking at complex systems and creating order and structure throughout them. It's a book about organizing businesses and people but applies equally well to software systems, especially those built through domain driven design principles. It's a dense read but full if mind-blowing concepts. It's is a business book but I'm classifying it as a architecture and design book for one good reason - it has the best description of architecture that I've ever encountered. Hint: it's on page 189.

 

 

Business

The Ten Day MBA by Steven Silbiger

After spending 5 years on a bachelor's degree in Mechanical Engineering and 5 more on a master's in Computer Science, I swore that I would never set foot on a college campus again. As I moved into leadership roles, I found myself becoming more and more immersed in the crazy world of business management. I began to wonder if I needed a Master's of Business Administration (MBA) degree to keep moving up the ranks. This book has been a life-saver for me. The author has distilled the core topics from the curriculums of America's top business schools into ten easily digestible chapters: Marketing, Ethics, Accounting, Organizational Behavior, Quantitative Analysis, Finance, Operations, Economics, Strategy, and MBA Mini-Courses. An MBA may still be in my future at some point, but for now this book has equipped me with a fundamental understanding of business concepts and terminology. I've owned this book for over ten years now and still refer to it once or twice a year. Highly recommended.

 

 

People

Peopleware by Tom DeMarco & Timothy Lister

This is one of the most influential books in our industry and should be required reading for all technical leaders. It makes an incredibly strong argument for hiring really smart people, giving them direction, and the space and freedom to run (Scott Guthrie comes to mind). In fact some people have called it the "Anti-Dilbert" manifesto. It starts off looking at environmental conditions for development teams and provides guidance on productivity problems in those oceans of cubes we now find ourselves in. And those evil intercom systems? They break flow - duh!  It follows up with a roadmap for hiring, motivating, and growing super stars and super teams. It concludes with advice on how to begin influencing your organization to make changes in order to create more successful outcomes.