9
votes
Books or other good content on software design?
Wondering if anyone has any good books or other content to recommend on software design. I feel like when I start out on a new project I always get stuck in a rut of trying to design something good, then end up with an awful design anyways. On the other hand, I've been around professors and more experienced software engineers who seem to effortlessly come up with simple, powerful architectures and interfaces.
While I know that reading a book or two won't get me the experience I need to improve, it does seem like that might be a good jump-start. Anyone have any suggestions for me? Thanks!
Sampling of the popular books we have floating around the office are:
For quick reads I've learned and referenced a lot of concepts from Martin Fowler's blog.
I have three suggestions off the top of my head:
While the last one is really about testing, it can give a good insight into how you can bootstrap your project with good testing practices (by teaching you how to shoehorn testing Harnesses into legacy code). The first two are classic compsci books that I read later in my career because I didn't go to school for Computer Science and they really helped explain a lot of the architecture and patterns I have seen around throughout my years.
As a bonus, there is also Domain Driven Design. This one focuses a lot on thinking about the business problem you are trying to solve.
I also recommend Design Patterns. It's pretty old now, though. Some of the design patterns might be outdated or inapplicable in newer languages. Game Programming Patterns might be interesting if you want to know what people use in games.
When people read about design patterns, they tend to overuse them at first to try them out, but after a while you get a better sense of when they're necessary and a simpler solution won't do.
A caveat: just because it seems effortless doesn't mean it is. Often, when people write up what they did, they don't share anything about their mistakes and the blind alleys they went down. Other times, if it seems easy, it because they're implementing a variation on a design they've used before, or at least read about before.
If you want something that is more process oriented, Better Embedded System Software is a good one. Even if you are not writing embedded software, most of the process lessons should still apply.