How do you explain the “abstraction” paradigm in programming to someone who doesn't know coding?
I like to try out different kinds of coffee, so I buy my coffee not from the grocer’s, but from different local coffee shops that sell their own beans. I buy only enough to last a week, so, if I don’t like the coffee, I’m not stuck with it for a long time. This way I get to try more kinds of coffee too. I also get the coffee ground when I buy it, to have one less thing to do before I can fully wake up in the morning.
Now, I use a french press, which means the coffee needs to be ground somewhat coarse, but not too coarse. At different shops with different grinders, it can mean “medium-coarse”, “medium”, “coarse”, “7”, “2”, etc. If I were to buy from the same shop all the time, I’d quickly figure out the right setting to specify each time. But I don’t buy from the same shop all the time, or even go back to one place often enough to remember what the right setting was there.
Instead of trying to guess the right setting, or inspecting their grinder, or having a long conversation with the person behind the counter, I just ask for the coffee to be ground for the french press. And that is abstraction. The barista almost always (always, from what I’ve seen so far) knows what setting to use and I get the coffee powder at just the right granularity. The people carrying out my request are the ones dealing with the implementation. It is most efficient as they already have the right information and I don’t need to gather that information myself.