I haven't read any of the books on architecture recommended in this thread, but I learned how to manage software complexity by: 1. Counter-intuitively, being deeply interested and reading about a topic in natural science. Software is complex because it is a system, and especially if you're using a programming language with plenty of OOP features, you're going to benefit a lot from understanding how nature separates p…
The nature approach sounds intriguing, any pointers on where to start or what to read?
Ask HN: Best books on managing software complexity?
61–70 of 127 posts
Re: Ask HN: Best books on managing software complexity?
#62Earlier quoted context omitted.
A philosophy of software design is an excellent book. Although its ideas are heavily couched in OO terminology, it's changed my ideas about interfaces and exposure to complexity utterly. Not comprehensive, but every programmer should absolutely read it (it's a tiny book after all).
I just finished it and haven't sat down to write a proper review yet. But I thought it was very uneven in value. The parts about deep and shallow modules, what good interfaces are, _why_ keeping everything about their implementation hidden is so important -- those were very good. He also advocated against having small routines, which are almost dogma nowadays (mostly because they're easier to unit test), and he's pre…
I assume that quote is talking about unit tests, but it's becoming more and more accepted that integration tests are more important than unit tests. https://kentcdodds.com/blog/write-tests
This shift away from unit tests is the corollary to Ousterhout's preference for deep modules.
Re: Ask HN: Best books on managing software complexity?
#63These are quite different missions since it's rarely possible to recover form complexity if you've already gone there.
Re: Ask HN: Best books on managing software complexity?
#64Earlier quoted context omitted.
The nature approach sounds intriguing, any pointers on where to start or what to read?
It doesn't even have to be nature -- I learned a lot about managing complexity from The Death and Life of Great American Cities which is about city planning!
Re: Ask HN: Best books on managing software complexity?
#65The least complex software is the one never built. We often over-automate. Automation is brittle and inflexible and easily ends up lined with edge cases and other types o complexity. Automation is great when it replaces a stable, well-working manual process. The way to introduce automation is to first experiment with humans doing something manually until you have a great process. Then take the dumbest, most reliable…
Wait what ?
Mine automation works for years without an issue. Flaky automation is meaningless.
> that alerts a human if it encounters an edge case.
No. It shouldn't alert anybody almost never if it's good. When you have 300 automation routines, even if it alerts once a year you will have some alert every day. So it needs to alert lower then that, when the world falls out or something...
Re: Ask HN: Best books on managing software complexity?
#66It's very unorthodox, but cuts through a lot of the bullshit.
Re: Ask HN: Best books on managing software complexity?
#67Michael Feather's book on legacy code contains a lot of advice that ought to be obvious, and yet every time I'm handed a scary piece of complex legacy software, I leaf through Feather's book and I almost always find something useful.
You can also google up a fair amount of related blog text, and video talks content.
Re: Ask HN: Best books on managing software complexity?
#68Earlier quoted context omitted.
I just finished it and haven't sat down to write a proper review yet. But I thought it was very uneven in value. The parts about deep and shallow modules, what good interfaces are, _why_ keeping everything about their implementation hidden is so important -- those were very good. He also advocated against having small routines, which are almost dogma nowadays (mostly because they're easier to unit test), and he's pre…
> That would mean that "making your code easier to test also improves its design" is wrong. I assume that quote is talking about unit tests, but it's becoming more and more accepted that integration tests are more important than unit tests. https://kentcdodds.com/blog/write-tests This shift away from unit tests is the corollary to Ousterhout's preference for deep modules.
And integration tests are nice, but the idea of testing small units was that every branch in the code under test doubles the number of possible execution paths, so tmit becomes harder and harder to test every path.
So we should branch less, I guess. His parts about "define errors put of existence" and writing more general code with fewer obscure details would probably help.
Re: Ask HN: Best books on managing software complexity?
#69Re: Ask HN: Best books on managing software complexity?
#70Scott Wlaschin - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#