The problem comes from this.<p>1. The costs of any layer of abstraction and magic that we have internalized seem free to us.  So we feel free to add a more marginal one.<p>2. We have little visibility into any layer of the stack above or below ours.<p>3. As people migrate between languages, they take what they did previously and recreate it.  Only &quot;better&quot;.<p>As a result, complexity grows over time.  And programmers are really bad at noticing&#x2F;correcting it.  And when they try, they will come up with different prescriptions.  Often opposing ones.  Explicit is good.  (Go.)  Don&#x27;t let people mutate state.  (Functional languages.)  Convention over configuration.  (Rails.)  Move work from programmers to IDEs and tooling.  (Java.)  Make programmers productive so more gets done with less code.  (Most scripting languages from Perl on.)<p>Over my lifetime, I&#x27;ve watched the resulting slide into complexity.  Reading up on history I recognize that it had been going on for decades before I learned how to program.  And it shows every sign of continuing to accelerate going forward.