[1] https://link.springer.com/book/10.1007/978-1-4842-7437-8
I studied also Russian MIR-1 machine code, but they decided I was not politically suitable, cause my hair was too long.
And I had scary experience of superwide telephone exchange controller by Siemens, but they had no symbolic assembler, they programmed every word bit-by-bit in octal.
Actually, it was digital logic that I started with, building half adders and such. From there the changeover to assembly was very natural. From there, C just made sense because it projected a very assembly like virtual machine.
From then on, I'd unconsciously convert high level code to its assembly equivalent in my head. The only pitfall is that you mustn't stop profiling, because these days cache trumps cycles per operation by a very wide margin.