It's important to be able to work nominally at the N'th level of abstraction but be able to jump to level N - 1 if need be. Computer systems are full of leaky abstractions, and if you work long enough they will probably impact you at some point.
It's important to be able to work nominally at the N'th level of abstraction but be able to jump to level N - 1 if need be. Computer systems are full of leaky abstractions, and if you work long enough they will probably impact you at some point.
When was the last time an Excel macro developer needed to know semiconductor physics in order to debug a fault lying in the silicon layer?
When has a Ruby on Rails programmer ever needed to know quantum electrodynamics to track down a hard disk error?
Abstractly you may consider that knowledge to be useful, but concretely, there's a reason people specialize - each of those domains takes years to gain competence, and there's a good probabilistic argument against everyone being "able to jump to level N - 1" all the way down.
Most people can't "jump" to a level lower than they are used to working. They have some idea of the overall concepts, yes, but it takes time to get up to speed. Most Java people have some ideas of how the JVM works, but few can jump to (say) the JVM's memory allocator code (even when available) in order to fix problems.
In any case, does a Java programmer need to know chip layout design in order to program, or do you agree that that is "some layer below which is unnecessary to understand"? Yes, someone, somewhere, might have had a problem in Java code caused by noise leaking across from one circuit to another, but you can't seriously expect that most people will be able to jump there if needed.