{"product_id":"software-design-for-flexibility","title":"Software Design For Flexibility","description":"\u003cb\u003eStrategies for building large systems that can be easily adapted for new situations with only minor programming modifications.\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003eTime pressures encourage programmers to write code that works well for a narrow purpose, with no room to grow. But the best systems are evolvable; they can be adapted for new situations by adding code, rather than changing the existing code. The authors describe techniques they have found effective--over their combined 100-plus years of programming experience--that will help programmers avoid programming themselves into corners.\u003cbr\u003e\u003cbr\u003eThe authors explore ways to enhance flexibility by:\u003cbr\u003e\u003cli\u003eOrganizing systems using combinators to compose mix-and-match parts, ranging from small functions to whole arithmetics, with standardized interfaces\u003c\/li\u003e\u003cli\u003e Augmenting data with independent annotation layers, such as units of measurement or provenance\u003c\/li\u003e\u003cli\u003e Combining independent pieces of partial information using unification or propagation\u003c\/li\u003e\u003cli\u003e Separating control structure from problem domain with domain models, rule systems and pattern matching, propagation, and dependency-directed backtracking\u003c\/li\u003e\u003cli\u003e Extending the programming language, using dynamically extensible evaluators\u003c\/li\u003e","brand":"MediaPlace","offers":[{"title":"Default Title","offer_id":57315438461310,"sku":"NW9780262045490","price":53.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0817\/1379\/1261\/files\/9780262045490.jpg?v=1778716074","url":"https:\/\/mediaplace.com\/en-usa\/products\/software-design-for-flexibility","provider":"MediaPlace","version":"1.0","type":"link"}