I've slightly more than 7 years of work experience designing and developing distributed systems in largely C++ (and some Perl) at a very large internet firm and am currently in the role of a technical lead. The next step for me is to either be an engineering manager or an architect. I've chosen the path of an architect (for all the reasons I'm already comfortable with). What books would the experts here recommend me to read to become a good architect?
I recommend Domain Driven Design by Eric Evans. It details some very important concepts, like the importance of actively pursuing an ubiquitous language (architects, developers and customers all speaking the same language), a rich domain model, differences between Entities and Value Objects, and generally how to handle complexity in software development and modelling.
Read more at http://domaindrivendesign.org/, or get the book at Amazon.
More answers in this thread.
read this S.O.L.I.D ebook, just to make sure you have the bases of code related design well covered.
Being involved with distributed systems you should already have plenty of the architectural stuff covered.
On the more high level view, you should really read this article - a better path to enterprise architectures
(Looking at my bookshelf)
Microsoft .NET: Architecting Applications for the Enterpise PoEAA
Patterns of Enterprise Application Architecture
ASP.NET Enterprise App Developement (Ok book but not as good as the above two)
.NET Driven Design with C#
Professional Refactoring C# and ASP.NET (not really an architectural book, and in my experience I found it a little bit junior, but it's a good read anyway).
There's also the usual patterns books, but they're more developer oriented, so you're probably already beyond that.
DDD by Eric Evans is a really good book, so I agree with Magnar on that one. I would also recommend reading xUnit test patterns and also gang of four if you haven't already.
Furthermore, here a bunch of links that you may find interesting:
TDD: http://en.wikipedia.org/wiki/Test-driven%5Fdevelopment
DDD: http://en.wikipedia.org/wiki/Domain-driven%5Fdesign
Patterns and practices:
http://en.wikipedia.org/wiki/Separation%5Fof%5Fconcerns
http://en.wikipedia.org/wiki/Dependency%5Finjection
http://en.wikipedia.org/wiki/Hollywood%5Fprinciple
http://en.wikipedia.org/wiki/You%5Fain%27t%5Fgonna%5Fneed%5Fit
Related to testing:
http://en.wikipedia.org/wiki/Mock%5FObject
http://xunitpatterns.com/Test%20Double.html
Code hygiene:
http://msdn.microsoft.com/en-us/library/ee1hzekz%28VS.80%29.aspx
UI:
This "Reading Guide To Becoming A Better Developer" has an excellent collection of books with a suggested order for different "stages" of understanding. I would suggest reading the article in full, but here is a sampling of the recommendations for the first "stage":
- Test-Driven Development (Kent Beck)
- Refactoring (Martin Fowler)
- Implementation Patterns (Kent Beck)
- Code Complete: 2nd Edition (Steve McConnell)
- Working Effectively With Legacy Code (Michael Feathers)
- Clean Code (Robert C. Martin)
I'm surprised nobody has mentioned the Gang of Four:
Understanding these design patterns and knowing when and how to use them is essential for a software architect. I also think that every manager/architect should read the Mythical Man Month, but that might not be your style.
- The Mythical Man Month
Some excellent links have been suggested although most are focussed on technology and process. I'd like to throw something about the role of a software architect into the mix (disclaimer, it's my site):
http://www.codingthearchitecture.com/pages/role.html
Good luck, Simon
Greatest book for this would be
Patterns of Enterprise Application Architecture
http://www.amazon.com/exec/obidos/ASIN/0321127420
I also recommend you to follow more books from Martin Fowler.
I think the book: Pattern-Oriented Software Architecture would be helpful.
The book comes in four volumes with each volume covering different areas. I've read
parts of Volume I and what I found useful was the explanation provided about how
various design patterns gel together while building a non-trival software application.
Richard Gabriel's Patterns of Software, as well as some of his other writings at http://www.dreamsongs.com/ -- particularly the whole "Worse is Better" saga & the essays on Christopher Alexander. ( Alexander's books would be the next ones on the list. )