As I'm progressing in my career, I am increasingly responsible for architecting libraries and systems. I've acquired some quality architecture ideas from working on a wide variety software projects (though most of those ideas are firmly in the "don't do it that way" camp). I'm always trying to learn more about good software architecture, though it seems to be a lot like firmware: there is plenty of information available, but most of it is not useful, hard to find, or disorganized.
I was thrilled to learn about The Architecture of Open Source Applications, which is dedicated to investigating the structure and reasoning behind the architecture of various open source applications. This is a treasure trove of data and rationale that will help anyone who is seeking to learn more about software architecture.
To quote AOSA directly:
Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes.
AOSA currently provides four books, all of which are available online and in print form:
- The Architecture of Open Source Applications, Vol. 1
- The Architecture of Open Source Applications, Vol. 2
- The Performance of Open Source Applications
- 500 Lines or Less
While most of the programs that are analyzed are pretty far from the embedded space, there are plenty of interesting architectures to learn from. Here are some of my standout recommendations:
I hope you find this resource extremely helpful for improving as a programmer and architect.