Thousands of blog posts later, I don&#x27;t think the following has changed:<p>* Explaining these concepts in the abstract results in bafflement as to why anyone would care about these useless abstract concepts.<p>* Explaining only the concrete instances of these concepts results in missing the point that they are all instances of the same concepts (and that you can write reusable code at that level, which can be a big productivity improvement).<p>* The only way to understand both at once is to sit down and read&#x2F;write a bunch of code until you understand both levels. And once you pass that point <i>you</i> get it, but then you hit the above two roadblocks trying to find a shortcut to explain the concepts to someone else.<p>It reminds me of music theory, where you can bombard someone with all sorts of concepts like scales, modes, chords, etc., but it&#x27;s all nonsense until they actually <i>play music</i> for a while--then most of it is both understandable and useful.