Why do you learn about bits and bytes if modern languages, with good reason, abstract from it? Why do we learn to program in assembler if modern languages, for good reason, abstract from it? Why do we learn bare-metal imperative programming if object oriented languages, with good reason, encapsulate it? Why do we learn C even though C++ offers much better ways to express ourselves? Why do we learn naked pointer semantics if smart pointers are the way to go?
The reason is that the less abstract concepts are the building blocks for the more abstract ones. (And, I might add, there are times when it is appropriate to be less abstract. There are times to use assembler, and goto, and pointers.) It helps to know assembler when you try to understand C. It also helps appreciating what the language does for you. One also understands Knowing C, in turn, makes you understand C++ better (both its rationale and its limitations)! (1).1
It helps to know goto when you learn about loops, and what they do for you.
The same way it helps to know molecules if you try to understand a cell.
(1)1 It is also important to understand that machine independence and structured programming and object orientation are essentially *concepts* which are just more or less supported by the different languages. You certainly can write well-structured assembler. OO crept into my C after I grokked C++.