im currently enjoying a conversation between andy mender and myself on the topic of abstractions. based on this, he wrote an excellent post you can read -> here. i will include the first paragraph and encourage you to read the rest:
“A WordPress user, codeinfig, brought my attention to what I was trying to express in my previous blog entry, but somehow failed to name. The patched together arguments I’ve been tossing around recently illustrate a major issue in software design – abstraction vs obstruction. We build abstraction layers to tie together smaller system components (or features) or to provide an easy to use interface for ourselves and others. However, abstraction layers tend to stack ad infinitum, because we all like having our own, right? Unfortunately, handling abstraction layers becomes more and more difficult with each level. Thus, obstruction is born.”
you can find the rest here: https://linuxmender.wordpress.com/2016/05/03/getting-the-job-done-dilemmas/ …as i posted in my comment:
“steve litt hints at motivation being a key factor in whether an abstraction becomes an obstruction. the desire to become a ‘gatekeeper’ is not something i rule out– although like you, i find that there is still quite a lot left when you focus on the more neutral matter of ‘design philosophy.’
in other words, too many abstractions gets in the way regardless of motivations. (and i believe you’re right about transparency and documentation, too.)
in short, i think gatekeeper aspirations will certainly produce unnecessary and opaque abstractions like litt says, but so will shoddy design with benign intentions.
and the user can only withstand so many of these ‘helpers’ stacked like turtles all the way down, before john/joan q. public starts to blame the computer, the developers, the companies that may or may not be to blame.
but cutting through excessive abstractions is the KEY to computer literacy and efficiency– and still so many focus (exclusively) on applications. in my opinion, that is a sure recipe for a helpless (at best, a frustrated) user.” i would add that abstraction is what programming “is all about,” until it is overdone– at which point it goes from being a solution to being a new problem.
(my own words following the phrase “as i posted in my comment” are in the public domain, and you are welcome to use or re-use them for any purpose.)