There a big difference between the best way to learn the fundamentals of something and how it works in the nitty-gritty and the best way to learn how to be efficient and productive at getting something working and out the door.
And then there're big differences between how two individuals best learn something and even how the same person learn's two different things. Some people internalize things better if they start from a low level and work up the layers of abstraction (I tend to be that way regaring most things) while others internalize better if they can start with a highly abstract big-picture view and progressively hang the details on it. In practice, with most things we tend to start in the middle somewhere and move out in both directions over time.
I content that, most of the time, the best level of abstraction to work at is one that is basically adjacent to the level of detail you are trying to deal with. If someone is trying to learn how a microcontroller works internally, I think working with assembly is a much better choice than working with C. But if they are trying to learn how a TCP/IP stack works that is running on that microcontroller, then they are better working in C than assembly.
And then there're big differences between how two individuals best learn something and even how the same person learn's two different things. Some people internalize things better if they start from a low level and work up the layers of abstraction (I tend to be that way regaring most things) while others internalize better if they can start with a highly abstract big-picture view and progressively hang the details on it. In practice, with most things we tend to start in the middle somewhere and move out in both directions over time.
I content that, most of the time, the best level of abstraction to work at is one that is basically adjacent to the level of detail you are trying to deal with. If someone is trying to learn how a microcontroller works internally, I think working with assembly is a much better choice than working with C. But if they are trying to learn how a TCP/IP stack works that is running on that microcontroller, then they are better working in C than assembly.