Much fun was had programming in machine language by looking up op-codes in Rodney Zak's "Programming the Z80" and counting the clock cycles to figure out the most efficient set of op-codes. As I recall the fastest op-code requires 4 clock cycles but some instructions would need more than 10 so much performance could be gained by knowing and optimising. This was before there was a Z80 assembler available so the hex of those op-codes had to be typed and POKEd into memory from the BASIC interpreter.
A side-note - don't forget the ZX81 was preceded by the Sinclair ZX80 in 1980 [0].