re: It seems that many (perhaps most or all) important changes are successful exactly when people don’t realize that they exist.
For a given value of “success.” Not everyone thinks the frog desired not to be boiled as the temperature unnoticeably increased. Deep down, in spite of his baser instincts, he really wanted to be eaten.
re: if your users notice that there is an interface, probably the interface is not good
If you notice your punkah wallah, it’s time to fire him.
re: For example, machine language is successful in that programmers rarely think about microcode; garbage collection is less successful in that programmers often think about pointer reachability.
We should expect more from you. The two signification of “programmers” in that sentence are different, even opposite. The programmers who agonize over pointer reachability are only those involved in the creation and maintenance of (the illusion known as) garbage collection. Clients of garbage collection don’t. Municipal sanitation is less successful because “people” “think about” “future trash”?
Actually in both cases I meant the programmer who uses the abstraction, not the programmer who creates and maintains the abstraction. In the case of garbage collection (the illusion of “All objects … have unlimited extent. No Scheme object is ever destroyed”), search for “Java memory leak” on the Web to see the abstraction leak.
re: programming languages are either dirty or sacred so people avoid touching it
Fanciful flights to G-d are absolutely part and parcel of the game of creating and destroying abstraction (is it leaky? can i make it leaky?). That said, should you leave this metaphor as so much fond rhetoric, you’re leaving a lot on the table.