
Ask HN: What are some good books on creating abstractions? - akiselev
Does anyone have any recommendations for books or journals&#x2F;papers to read to improve my ability to write useful and maintainable abstractions? Ideally I&#x27;d like to find a more formalized treatment of &quot;abstracting&quot; in the vein of the GoF&#x27;s <i>Design Patterns</i> or a survey of the field like the excellent <i>Designing Data Intensive Applications</i> but I&#x27;m guessing that&#x27;s kind of like asking for a map to the Holy Grail.
======
streetcat1
Those are the holy grail:

1) [https://www.amazon.com/Object-Oriented-Modeling-Design-
Rumba...](https://www.amazon.com/Object-Oriented-Modeling-Design-
Rumbaugh/dp/8120310462)

2) [https://www.amazon.com/OMT-Insights-Perspective-Object-
Orien...](https://www.amazon.com/OMT-Insights-Perspective-Object-Oriented-
Programming/dp/0138469652)

1) [https://www.amazon.com/Executable-UML-Foundation-Model-
Drive...](https://www.amazon.com/Executable-UML-Foundation-Model-Driven-
Architecture/dp/0201748045)

And the work of daniel Jackson from MIT :

[http://people.csail.mit.edu/dnj/](http://people.csail.mit.edu/dnj/)

Look at this course, at the videos at the bottom:

[https://stellar.mit.edu/S/course/6/fa18/6.170/materials.html](https://stellar.mit.edu/S/course/6/fa18/6.170/materials.html)

Jackson is also behind Alloy:

[https://mitpress.mit.edu/books/software-abstractions-
revised...](https://mitpress.mit.edu/books/software-abstractions-revised-
edition)

------
gitgud
> Ideally I'd like to find a more formalized treatment of "abstracting" in the
> vein of the GoF's Design Patterns.

Well [1] that book you're referring to, has changed my perspective on
abstractions and how to communicate them to other people. There's probably no
_" Holy Grail"_ of abstraction guides better than that IMHO.

Designing and implementing useful and maintainable abstractions comes from
experience in both consuming and designing abstractions for API's. Having
empathy for both the consumers and future developer's of the API gives you a
good perspective on how to structure the abstraction.

The best abstractions are from people who have used _bad abstractions_ , and
are usually incrementally developed over time...

[1] [https://www.amazon.com.au/Design-Patterns-Elements-
Reusable-...](https://www.amazon.com.au/Design-Patterns-Elements-Reusable-
Object-Oriented/dp/0201633612)

------
austincheney
Here are mine:

* XML Schema - [https://www.amazon.com/Definitive-XML-Schema-Priscilla-Walms...](https://www.amazon.com/Definitive-XML-Schema-Priscilla-Walmsley/dp/0132886723/ref=mp_s_a_1_1?dchild=1&keywords=xml+schema&qid=1586680576&sr=8-1)

* DOM - [https://www.amazon.com/DOM-Scripting-Design-JavaScript-Docum...](https://www.amazon.com/DOM-Scripting-Design-JavaScript-Document/dp/1430233893/ref=mp_s_a_1_2?dchild=1&keywords=document+object+model&qid=1586680658&sr=8-2)

* I don’t have a book for this, but learn data structures instead of algorithms. If you can learn to think in data structures the concepts of algorithms will come to you naturally like dreaming or thinking about driving directions.

* I also don’t have a book for this but the relationships between data is more important than the data itself. This is realized by how you express your abstraction.

------
afarrell
A Philosophy of Software Design by John Osterhout:
[https://www.amazon.co.uk/dp/B07N1XLQ7D/ref=dp-kindle-
redirec...](https://www.amazon.co.uk/dp/B07N1XLQ7D/ref=dp-kindle-
redirect?_encoding=UTF8&btkr=1)

Concise, readable, and highly applicable.

