I can't help thinking that a big factor is how bad our tools were before. There are many leaking abstractions, boilerplate code and cruft. Dealing with that fills a sizeable percent of a programmer's job.

These tools seem great because they are less sensitive than humans to the mess and lift us over the tedious work. But at the same time, they're giving us an excuse to not fix what needed to be fixed and, in doing so, they're adding more crap to the heap.

Maybe what we need is forcing the tools to build on a simpler base, so we can keep an understanding of the results.