Ten years against division of labor in software
The fact that a library discourages you from learning it's internals is how you know it's well done.  If you needed to understand it, you could.  The reason you don't is because you've never had a compelling reason to.If only one person knows how a library works, that is a problem. If a 100 person team maintains it and you're not on that team.... it's probably because you have other stuff to do.Software is an engineering discipline. Computer science is a science.  If you are in programming because you want to advance our understanding, great, go work in one of the many fields with large novel algorithms that need to be understood.For a typical programmer...  Look around.  Modern software is one of the best things about the modern world.  It does SO much for us.  Do you really think we, with a real world distribution of programmer abilities, could do all this without massive division of labor? How much would be missing if we insisted on understanding everything before we use it?I suspect very few alternative approaches to software would work as well to truly build the modern software defined world where everything from cars to taxes to photography is digital.Because... whenever someone tries an alternative approach, there usually seems to be the hidden unspoken assumptions that they actually don't want software to be as big as it is.The end product of software itself these days is a service(in the sense of this article, not the SASS sense), wheras software built with an understanding-first mindset seems to usually wind up being closer to a digital version of a passive analog tool.