Moving up abstraction layers really only succeeds with a solid working knowledge of the lower layers. Otherwise, you're just flying blind, operating on faith. A common source of bugs is precisely a result of developers failing to understand the limits of the abstractions they are using.
So we can all only succeed if we know how CPUs handle individual instructions?
We only need to do that when it’s practical for the task at hand. Some tasks are life-and-death, but many have much lower stakes.