Live data from Hacker News

The Two Abstractions of System Design: Hide or Reduce

muratbuffalo.blogspot.com

11–18 of 18 posts

Re: The Two Abstractions of System Design: Hide or Reduce

#11

> Modularity abstraction aspires to hide the interleavings and present operations as if they were atomic. Its goal is to make the module easy to use, but in doing so it forgoes exposing concurrency or efficiency opportunities. > In stark contrast, the modeling abstraction is about identifying what should leak and leveraging it! It exposes the fine-grained actions and orderings, and proves that invariants hold despite…

> I guess I don't understand the argument here because those just sound like two different flavours of the same custard to me; the difference is just the balance of work you're doing on each side of the interface, and that decision depends on use cases specific to the project.

It is two different flavours. One is about interconnecting things, and the other is what you interconnect. What TFA called modelling abstraction seems to be the primitive ideas that goes in building more complex systems (which it calls Modularity Abstraction). Something like a String is not a primitive, but rather a combination of the idea of Character and List are. Just like you can go from a disk (a pure array of bytes) to a file system (in the unix world, a tree with nodes of metadata). The primitive here are Array (existing) and Tree (target) and with them you build a modular system (The file systems) that transform ones into another.

So yes, both are abstractions, one is about identifying primitives, and the other is about combining them.

Re: The Two Abstractions of System Design: Hide or Reduce

#12
post #4

I've generally heard the two concepts discussed as abstraction vs generalization. Abstraction hides unnecessary detail. Generalization finds/surfaces commonality among items. > oop - What's the difference between abstraction and generalization? - Stack Overflow - https://stackoverflow.com/questions/19291776/whats-the-diffe... Creating a procedure/method is a form of abstraction. Allowing it to accept parameters is a…

I'm not sure that your description of generalization coincides with the idea of modeling abstraction from TFA. Modeling abstraction is "about identifying what should leak and leveraging it". Generalization is about making something cover more cases. The technique to achieve these things can overlap of course, but the intention/goal is different.

> abstraction is "about identifying what should leak and leveraging it"

vs

> Abstraction hides unnecessary detail.

Sounds like these ways of describing abstraction are in agreement with one another to me.

If you hide what’s unnecessary you’re left only with the things you think should leak. And you think they should be left unhidden so that you can use them for something, so to leverage them.

Re: The Two Abstractions of System Design: Hide or Reduce

#14
post #4

I've generally heard the two concepts discussed as abstraction vs generalization. Abstraction hides unnecessary detail. Generalization finds/surfaces commonality among items. > oop - What's the difference between abstraction and generalization? - Stack Overflow - https://stackoverflow.com/questions/19291776/whats-the-diffe... Creating a procedure/method is a form of abstraction. Allowing it to accept parameters is a…

I'm not sure that your description of generalization coincides with the idea of modeling abstraction from TFA. Modeling abstraction is "about identifying what should leak and leveraging it". Generalization is about making something cover more cases. The technique to achieve these things can overlap of course, but the intention/goal is different.

Generalization is surely more than coverage? At least to me generalization is unveiling a principle or unifying lens that yields extended coverage, the principle being the meat. The coverage is the result of the unifying lens that makes previously different pieces look like cases of the "same" thing.

So it's kind of bottom-up/"data" driven as opposed to abstraction being more "engineered into" the system.

That is, to me abstraction is building things such that they look the same. Generalization is discovering things are almost the same if tweaked a little to look the same under a certain lens.

Does that make any sense? In this view I guess the generalizing lens can be become the basis for an abstraction. I would assume the loop is closed between the two somehow but I can't quite see it.

Re: The Two Abstractions of System Design: Hide or Reduce

#15

> Modularity abstraction aspires to hide the interleavings and present operations as if they were atomic. Its goal is to make the module easy to use, but in doing so it forgoes exposing concurrency or efficiency opportunities. > In stark contrast, the modeling abstraction is about identifying what should leak and leveraging it! It exposes the fine-grained actions and orderings, and proves that invariants hold despite…

> I guess I don't understand the argument here because those just sound like two different flavours of the same custard to me; the difference is just the balance of work you're doing on each side of the interface, and that decision depends on use cases specific to the project. It is two different flavours. One is about interconnecting things, and the other is what you interconnect. What TFA called modelling abstracti…

That just sounds like a tower of abstraction to me; the 'primitives' are whatever you're building the current layer on top of. The filesystem becomes the primitive when you want to fopen something. Perhaps I'm over simplifying? I still don't see a division into two classes of abstraction.

Re: The Two Abstractions of System Design: Hide or Reduce

#16

Earlier quoted context omitted.

> I guess I don't understand the argument here because those just sound like two different flavours of the same custard to me; the difference is just the balance of work you're doing on each side of the interface, and that decision depends on use cases specific to the project. It is two different flavours. One is about interconnecting things, and the other is what you interconnect. What TFA called modelling abstracti…

That just sounds like a tower of abstraction to me; the 'primitives' are whatever you're building the current layer on top of. The filesystem becomes the primitive when you want to fopen something. Perhaps I'm over simplifying? I still don't see a division into two classes of abstraction.

> That just sounds like a tower of abstraction to me;[...] I still don't see a division into two classes of abstraction.

It is a tower of abstraction as it's recursive. It's just that at every layer you will be dealing with two types, the primitive from the previous layer and the new system that you're building in this layer. Something like Character is a composition of symbols (bit) and encoding (ASCII, Unicode), in a specific form of Data.

DDD is kinda a meta on that where the emphasis is to simultaneously build a glossary (primitives) while also trying to define subdomains to restrict their semantic. But that's an approach for software architecture, not general system modeling.

Re: The Two Abstractions of System Design: Hide or Reduce

#17

I've generally heard the two concepts discussed as abstraction vs generalization. Abstraction hides unnecessary detail. Generalization finds/surfaces commonality among items. > oop - What's the difference between abstraction and generalization? - Stack Overflow - https://stackoverflow.com/questions/19291776/whats-the-diffe... Creating a procedure/method is a form of abstraction. Allowing it to accept parameters is a…

[deleted]
Post reply on HN