
Software Design for Flexibility
by Chris Hanson, Gerald Jay Sussman · first published 2021
32mentions
8recommended by
27HN commenters
2020–2026first – last mentioned
30% recommend67% neutral4% critical
Why HN recommends it
Dense, advanced treatment of designing software so it can be extended without rewrites, drawing on decades of iterated examples; often recommended as a follow-up to SICP for experienced programmers.
Summarised by Claude from recommending comments
Affiliate links. As an Amazon Associate I earn from qualifying purchases.








1. SICP 2. How to Design Programs 3. Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner
on “Ask HN: What is the best programming book you've read?” ↗> The class used a draft textbook that Chris Hanson and I have written. The book is entitled “Software Design for Flexibility (how to avoid programming yourself into a corner)”; 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) Looking…
on “Teaching my MIT classes with only free/libre software” ↗…recommend two books: A Philosophy of Software Design. Very practical, friendly book, actionable advice and some sound mental models to apply to designing interfaces, error handling, modules and so on. Software Design for Flexibility. Spiritual successor of SICP. Very challenging, dense and in some ways radical. Typical Sussman-style of throwing challenging concepts at you in rapid succession in a logically sound and clear language.…
on “Ask HN: Software design patterns for projects without a scope?” ↗1. SICP 2. How to Design Programs 3. Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner
on “Ask HN: What are some of the best well-written books on computer science?” ↗…<https://docs.google.com/spreadsheets/d/1kgFSWp7rM3ZegweXAoMN...> From my perspective, the top "must-reads" are: -- John K Ousterhout, A Philosophy of Software Design -- Titus Winter (et al), Software Engineering at Google -- Hanson and Sussman, Software Design for Flexibility Other interesting titles that caught my eye: -- Peter Naur, Programming as Theory Building -- Scott Wlaschin, Domain Modeling Made Functional -- Yehonathan Sharvit, Data-Oriented Programming: Unlearning…
on “Ask HN: Best books on managing software complexity?” ↗Well I did it in Scheme, but there's no reason it wouldn't have worked in Julia. If you're interested in this, the relatively recent Software Design for Flexibility by Chris Hanson and GJS [1] has a pretty good couple of chapters on creating a generic procedure system (and a lot of other really cool things). Edit: In fact, it has an example doing just this example:…
on “A Review of the Art of the Metaobject Protocol (2010) [pdf]” ↗Code Complete Software Design For Flexibility A Philosophy of Software Design
on “Ask HN: Best book for software engineers (besides the well-known ones)?” ↗Learn from some of the best. For example read and do the exercises of SICP followed by "Software Design for Flexibility - How to avoid programming yourself into a Corner". The authors have more than 50y of experience and go through multiple iterations and refactorings of examples, pointing out good and bad aspects of the…
on “We Need Programming Mentors” ↗…case? Outrageous. Then we would have to do proper engineering and make things flexible, anticipating potential use-cases. We would have to heed advice written in books such as PAIP (or more recently "Software Design for Flexibility". Can we be expected to know literature of our own field?
on “Don’t Build a General Purpose API to Power Your Own Front End (2021)” ↗To see really elegant and great code, I recommend looking in books. I have seen elegant code in: SICP, The Little Schemer, Software Design for Flexibility.
on “Solid and Clean Code never felt solid or clean to me” ↗…definition that it was computationally concrete. In response to new trends in the programming field, Lispers write mind-bending books like "Let over Lambda", "The Art of the Metaobject Protocol", or "Software Design for Flexibility" to show that, when your syntax and model is right, you can radically change how you solve problems not by rewriting your spec or switching languages but by just adding more lisp to the lisp you already…
on “Hy 1.0 – Lisp dialect for Python” ↗…unexpected input, and more pathological events will happen (i.e., they can’t be reasoned out of the system) and so you need a way to explicitly deal with them. This is also a big theme in the recent book Software Design for Flexibility in terms of expanding programs, getting them to handle things they couldn’t before. While fancy type systems are neat, like those in Idris, I think the most useful idea is to have mixed type systems…
on “Learning Squeak (2019)” ↗…it gives some valuable perspective. The second one is on my reading list, it was recommended around these boards. Related to software design, there are many. The two that are on my recent list are: - Software Design for Flexibility (Sussman, Hanson) - A Philosophy of Software Design (Ousterhout) I can't comment personally on their content yet, still have to work through those two, but I have zero doubts to learn something valuable.…
on “Habits of Expert Software Designers (2019)” ↗I haven't started it yet, but I have great expectations of ”Software Design for Flexibility: How to Avoid Programming Yourself into a Corner" by Hanson & Sussman. Hopefully someone else can provide a review?
on “Ask HN: Is SICP/HtDP still worth reading in 2023? Any alternatives?” ↗In Sussman's book 'Software Design For Flexibility' he uses Match? in the pattern matching chapter to run on graphs. I think OCW archived his MIT course for the book too
on “A Road to Lisp: Which Lisp” ↗