Pretty much on a daily basis, in some conversation either in real life, or over the internet, someone justifies a software design decision based on something being easier or more difficult to explain to beginners. Most often, this is regarding programming language design, or language patterns.
I think the “easier to explain to beginners” argument is a fine one if you’re tasked with making a bunch of beginners productive as fast as possible.
In my experience, most people spend a short time being a beginner, and then a long time being experts. By the nature of the time spent in each state, there will tend to be more experts than beginners, just as there are typically more adults than children. You certainly wouldn’t suggest that cars should be illegal simply because it takes so many years for a child to learn to drive responsibly!
Therefor, for me at least, it seems better to optimize to minimize the mistakes that experts continue to make, and use patterns that will be the most convenient for experts to maintain.
As experts, we should not push for less powerful abstractions on the basis that newcomers have a hard time with them. Instead, we should push newcomers to become experts by supplying them with mentorship, support, and the truth.
That’s not to say that the language should be so difficult or abstract as to be completely impenetrable. We do need a nice smooth incline to the learning curve, so that newcomers will not be turned away abruptly. But in general, if you expect people to be somewhat smart and capable, they will be.