5 ms·
Software Design for Flexibility
- kkylin 6y agoPresumably the book goes with this course: http://groups.csail.mit.edu/mac/users/gjs/6.945/ http://groups.csail.mit.edu/mac/users/gjs/6.945/
- WalterGR 6y agoGerald Sussman is one of the authors (along with Hal Abelson and Julie Sussman) of the famous, absolutely incredible “SICP”: Structure and Interpretation of Programs.
- banjomet 6y agoHardcover | $55.00 X ISBN: 9780262045490 448 pp. | 6 in x 9 in March 2021
- titzer 6y agoThe 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!
- stevesimmons 6y ago> a bizarre iiiIji logo (or something) The logo is a stylized "mitp" for MIT Press.
- enw 6y agoSorry for being off-topic, but could you give an example of what you'd consider great design? (Genuine question; I'm intrigued)
- titzer 6y agoI'm an old fuddy-duddy. I prefer a small number of links written in text on the left, a nav sidebar. Frames or not, doesn't make a big difference to me. I am generally on a laptop with high DPI and have limited vertical resolution. The OS, window manager, browser, etc, already have a bunch of stacked bars and even in fullscreen mode there is a huge base overhead. Most sites seem to be optimized for tablets only, with massive SVG icons that are supposed to look so pretty, 20 point font, completely sparse layout for fat fingers. It's like people forgot about desktops. That is pretty annoying to me.
- bordercases 6y agoSussman 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?
- kennethfriedman 6y agoHere's Sussman giving a talk a few years ago on the same topic of "flexibility": https://www.youtube.com/watch?v=cblhgNUoX9M https://www.youtube.com/watch?v=cblhgNUoX9M
- bordercases 6y agoDanke.
- hackermailman 6y agoSome contents here https://groups.csail.mit.edu/mac/users/gjs/6.945/red-tape.pdf https://groups.csail.mit.edu/mac/users/gjs/6.945/red-tape.pd... basically symbolic computing to 'escape from the confines of expression based languages'
- JamesBarney 6y ago> Strategies for building systems that can be adapted for new situations with only minor programming modifications. The problem is I'd rather make a medium size changes to a simple system than a minor change to a complex system. >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 And this doesn't sound like a simple system.
- dgb23 6y agoIf you squint, these seem to be (optional) layers of transformation (data and code). I would rather navigate code with a clear, high level pipeline of transformations, rather than each path having its own idiosyncratic low level data assembly.
- asdfman123 6y agoBob Marley answers this dilemma: "The truth is, everyone is going to hurt you. You just got to find the ones worth suffering for." To some degree or another, everything sucks and complexity is unavoidable. You just have to find the type of complexity you're willing to live with. That being said -- I suppose if you're used to that kind of complicated stuff and used to typing out the boiler plate code, it doesn't seem quite so inscrutible. Tedious, but it doesn't blow up in your face. It's like I had a hard time understanding the strategy pattern the first time I saw it, especially when generics were involved. It felt mind bending. Now I happily use it and it's all straightforward. The formerly intellectually difficult parts are now autopilot for me. And it's a hell of a lot less stressful than adding another set of random if statements to an important code path. And keep in mind many of these phrases are very fancy ways of something that makes intuitive sense if you're familiar with it.
- 6y ago
- marai2 6y agoThere doesn't seem to be much information about the content of this book. But the quote by Dan Friedman is intriguing: “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!” Dan FriedmanProfessor of Computer Science, University of Indiana; author of The Little Prover
- mncharity 6y ago> 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] [1] https://www.gnu.org/education/teaching-my-mit-classes-with-only-free-libre-software.en.html https://www.gnu.org/education/teaching-my-mit-classes-with-o...
- k_sze 6y agoDoes that mean it will be available for reading online as well?
- mncharity 6y agoMy guess is there will be an Open Access link, as with SICM[1] or SICP[2]. Sorry for the ambiguity - I thought of going back to edit for clarity, but punted. [1] https://mitpress.mit.edu/books/structure-and-interpretation-classical-mechanics-second-edition https://mitpress.mit.edu/books/structure-and-interpretation-... [2] https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html https://mitpress.mit.edu/sites/default/files/sicp/full-text/...
- amelius 6y agoThe 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. The only real solution, that most managers don't get, is to know all requirements upfront.
- 0x008 6y agoAnd yet it is impossible to know all the requirements upfront which is why micro services and atomic functions are so popular. It seemingly reduces the complexity of redoing everything.
- kevsim 6y agoNot sure I think that's a big argument for microservices/atomic functions but rather just for decoupling things in general. For me, the appeal of microservices is the organizational challenges it solves (allowing teams to move and deploy at their own pace). My current codebase is a monolith because we're a tiny team, but the different parts are not tightly coupled more than they need to be and it doesn't feel slow to change things.
- 0x008 6y agoYea you are absolutely right. While microservices do alleviate the aforementioned problems, sensible software design will as well.
- vinay_ys 6y agoOne of the requirements is that requirements will change.
- sbergot 6y agoIn my world a company probes the market continuously to see what the market wants. The business analysts are getting a stream of requirements and then design new features. Then devs implement those features. Development stops when market growth slows down or when the investors cash in. The only way to predict what all requirement will be in a product lifetime would be to invent a time machine. This is not what I call "a real solution". The only real solution is to communicate a lot with the business analyst and make informed decisions on flexibility vs simplicity.
- ChrisMarshallNY 6y agoOne of the seminal books for me was Writing Solid Code[0], written about 25 years ago. It's quite dated, but has a lot of stuff that is still relevant. I remember that one of his sections was titled "FLEXIBILITY BREEDS BUGS". Here's the first paragraph: 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. 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. [0] https://dl.acm.org/doi/book/10.5555/2502682 https://dl.acm.org/doi/book/10.5555/2502682
- hprotagonist 6y agobalancing YAGNI against pain hint yourself into a corner is a real fun challenge.
- hprotagonist 6y ago... against painting yourself into a corner ...
- ChrisMarshallNY 6y agoSpeech-to-text issue? I had to correct a text I sent to my friend, Eddie. StT called him "Annie."