>How is that different from a function (or set of functions) that abstract the technicalities of sending messages over SMTP?
>
>I am not sure why specific metaphor is so helpful here. I don't think it helps in understanding the function, on the contrary.
It isn't a different function, but "send_email" is better than "send_message" which is in turn better than a function just called "x" which is shorter. In each case a different metaphor is used. x is a shorter method but code that uses names like that everywhere is NOT cleaner. It's horrible.
>Not quite. The important thing to understand is that I am not optimizing for size of a single program, but large set of different programs.
Optimizing purely for size will end up increasing coupling to an insane degree. I've seen this done by people who get religious about DRY.
>Well, I understand "high coupling" differently than you, then. For me, it means things like doing different unrelated things in a single function (so the result is that it's harder to reuse it). It doesn't mean that you cannot call other functions.
If you're using one function to call another you have coupled them.
Coupling is not about what you can or cannot do it's about what is.
Coherence (or rather, a lack thereof) is about doing different things in the same function (or class, file, project, etc.).