Or work safely, effectively, and productively when taught how to properly use the abstractions. They can optionally be taught how they work underneath for better results. Yet, I don&#x27;t have to teach people caches to tell them to group variables closely for performance. I likewise can give very basic explanations of stacks and heaps plus heuristics for using them. People still get the job done.<p>Functional programming proves my point even more where they don&#x27;t know how the hardware functions or even use the same model. Yet, with good compiler and language design, they can make robust, fast, and recently parallel programs staying totally within their model. Most problems we pick up outside the abstraction gaps can be fixed in the tooling or with interface checks.<p>So, I think the common perception of people doing crap code while working within an abstraction is unjustified and even disproven by good practices in that area. Much like I would be unjustified in accusing assembly coders of being &quot;willfully ignorant&quot; or working within foolish abstractions because they didn&#x27;t know underlying microprogramming or RTL. They don&#x27;t need it: just knowledge of how to effectively use the assembly. Actually, I saw one commenting so let me go try that real quickly. :)