> Strategies for building systems that can be adapted for new situations with only minor programming modifications.<p>The problem is I'd rather make a medium size changes to a simple system than a minor change to a complex system.<p>>The authors explore ways to enhance flexibility by:• Organizing systems using combinators to compose mix-and-match parts, ranging from small functions to whole arithmetics, with standardized interfaces• Augmenting data with independent annotation layers, such as units of measurement or provenance• Combining independent pieces of partial information using unification or propagation• Separating control structure from problem domain with domain models, rule systems and pattern matching, propagation, and dependency-directed backtracking• Extending the programming language, using dynamically extensible evaluators<p>And this doesn't sound like a simple system.
One of the seminal books for me was <i>Writing Solid Code</i>[0], written about 25 years ago.<p>It's quite dated, but has a lot of stuff that is still relevant.<p>I remember that one of his sections was titled <i>"FLEXIBILITY BREEDS BUGS"</i>.<p>Here's the first paragraph:<p><pre><code> Another strategy you can use to prevent bugs is to strip unnecessary flexibility from your designs.
You've seen me use this principle throughout the book.
In Chapter 1, I used optional compiler warnings to disallow redundant and risky C language idioms.
In Chapter 2, I defined ASSERT as a statement to prevent the macro from being mistakenly used in expressions.
In Chapter 3, I used an assertion to catch NULL pointers passed to FreeMemory even though it's quite legal to call the free function with a NULL pointer.
From every chapter I could list examples in which I reduced flexibility in order to prevent bugs.
</code></pre>
I like to put flexibility into my designs, but I've learned to be very careful about it, and usually test the unused code paths anyway.<p>[0] <a href="https://dl.acm.org/doi/book/10.5555/2502682" rel="nofollow">https://dl.acm.org/doi/book/10.5555/2502682</a>
There doesn't seem to be much information about the content of this book. But the quote by Dan Friedman is intriguing:<p>“Hanson and Sussman's Software Design for Flexibility has introduced additive programming, a game changer. An additive style allows for making changes to existing designs without the programmer's efforts looking like the work of a contortionist. With elegance, clarity, and care, they point out long-overlooked problems in software design and offer their Scheme-friendly, clever solutions. Enjoy!”<p>Dan FriedmanProfessor of Computer Science, University of Indiana; author of The Little Prover
The site design makes me want to throw something. The massive header bar with literally 7 words on it that is more than inch wide, taking up more than 25% of the vertical space and has a bizarre iiiIji logo (or something) that has no mouseover. What a waste of space!
Gerald Sussman is one of the authors (along with Hal Abelson and Julie Sussman) of the famous, absolutely incredible “SICP”: <i>Structure and Interpretation of Programs</i>.
> it will be published by MIT Press soon, with a Creative Commons Share Alike license (and all the code in support of the book is under the GNU GPL).[1]<p>[1] <a href="https://www.gnu.org/education/teaching-my-mit-classes-with-only-free-libre-software.en.html" rel="nofollow">https://www.gnu.org/education/teaching-my-mit-classes-with-o...</a>
Presumably the book goes with this course:<p><a href="http://groups.csail.mit.edu/mac/users/gjs/6.945/" rel="nofollow">http://groups.csail.mit.edu/mac/users/gjs/6.945/</a>
The problem with flexibility is that while it may take you one or two steps away from a corner, you'll likely find yourself in a corner soon enough anyway. It's like buying a larger hard drive, thinking you'll never use all the space.<p>The only real solution, that most managers don't get, is to know all requirements upfront.
Sussman built a course ostensibly around this book, but I couldn't find any indications of the specific material inside of the book itself; on the course pages there were just a bunch of essays not written by them. Any leads?