I think the narrow waist pattern adds a couple of things to the general notions of abstraction and information hiding:
It’s narrow in the sense of being fairly minimal, as discussed in Saltzer, Reed, Clarke’s “end-to-end arguments in system design” - but this also fits Outsterhout’s guideline that APIs should be narrow and deep.
It’s narrow in the sense of being a single protocol, in contrast to the many protocols in the layers immediately below and above. OSI did not have this property, e.g. it had both connection-oriented and connectionless protocols in its network layer.
For a curriculum to be about networking, it needs to be a lot more specific than teaching the general concept of abstraction. Like, which abstractions are successful in networks and which are not? What are the common patterns students should understand so that when they encounter a new networking protocol, they can more easily grasp how it works and how it fits in with other parts of the stack?
The cause of this discussion is that there isn’t a good vocabulary for talking about networking protocol stacks in abstract terms. Or at least the IETF and IEEE don’t have one that could displace OSI. I sort of hope that it might be possible to adapt much of the existing vocabulary into a pattern language without the baggage of an obsolete and maladaptive architectural framework.
Anyway, thanks for the interesting comment :-) Makes me glad I finally posted this, even 3 months after I wrote it!
no subject
Date: 2024-03-27 19:40 (UTC)I think the narrow waist pattern adds a couple of things to the general notions of abstraction and information hiding:
It’s narrow in the sense of being fairly minimal, as discussed in Saltzer, Reed, Clarke’s “end-to-end arguments in system design” - but this also fits Outsterhout’s guideline that APIs should be narrow and deep.
It’s narrow in the sense of being a single protocol, in contrast to the many protocols in the layers immediately below and above. OSI did not have this property, e.g. it had both connection-oriented and connectionless protocols in its network layer.
For a curriculum to be about networking, it needs to be a lot more specific than teaching the general concept of abstraction. Like, which abstractions are successful in networks and which are not? What are the common patterns students should understand so that when they encounter a new networking protocol, they can more easily grasp how it works and how it fits in with other parts of the stack?
The cause of this discussion is that there isn’t a good vocabulary for talking about networking protocol stacks in abstract terms. Or at least the IETF and IEEE don’t have one that could displace OSI. I sort of hope that it might be possible to adapt much of the existing vocabulary into a pattern language without the baggage of an obsolete and maladaptive architectural framework.
Anyway, thanks for the interesting comment :-) Makes me glad I finally posted this, even 3 months after I wrote it!