I definitely encourage the machine code route, but why not both? Learning the machine code, as elfprince13 said, is fairly easy simply because of the structure to them (and believe it or not, it is actually quite easy to just learn it in hexadecimal and still get a notion of the binary patterns). Learning machine code will give you a head start in the finer details, like why a relative jump can go 128 bytes forward, but 126 backwards (it's not actually true, it just depends on how you think of it).
For me, learning machine code had some distinct advantages:
-Because I did not have internet or a computer, this was my only way to create assembly programs on my calc.
-I am also a lot more comfortable with numbers when it comes to learning. I was a weird kid growing up, in that I dwelled a lot on numbers, so I guess my brain was just naturally wired to encode and decode number sequences (by the way, z80 machine code is a loooooot easier to get a handle on than learning a human language).
With all of that said, you should almost certainly try to learn the mnemonic stuff. It isn't difficult, and it will allow you to communicate with the other z80 assembly programmers.
elfprince13 wrote:
I made this point in another topic, but I'll make it again here:
If you absolutely bizarrely insist on learning machine code, learn it in binary, not hex. Opcodes actually have structure to them - they aren't just randomly selected numbers, and the structure isn't necessarily 4-bit aligned, meaning it will be obscured by hex.
The primary downside is that you lose labels, which means your code really really can't be reorganized cleanly.