As tech gets more and more advanced and we get higher and higher levels of abstraction, I've noticed more and more programmers just don't understand _what_ their code is doing. There can be a lack of understanding of how calls translate to system calls and machine instruction. The abstraction is good, it allows you to do more and do it quickly. But when you don't understand what the abstraction is, then you are programming by coincidence and errors are more confusing than they should be.