gossip blockHere’s the definition of gossip we were given:

It’s relatively straightforward to see what it does.
However, if we want all the details, then we need to look at the blocks it uses.
who blockFor instance, here’s the definition of who.

It’s hiding the details of exactly what names it could possibly generate plus the mechanics of picking a random element from a list.
gossip if there’s no who
We are forced to deal with a bunch of details that make it harder to see what this block does.
And we have duplicated code. If we want to add a name to our list of possibilities, we need to add it in two places.
who is an abstractionIt abstracts away the details of what names and how they are picked.
We could change some of those details and it would still do the same basic thing: report a randomly selected name.
If we have to dig through too many layers to understand what’s happening it makes code more confusing.
If we can’t describe an abstraction concisely it’s a sign it may not be a good abstraction.
So it’s important to make good abstractions.
Good blocks do one coherent thing that we can describe in a phrase or sentence.
And they have a name that reminds us what that thing is without being too long.