Programming and debugging directly in machine language is not hard to learn, provided that the instruction set is somewhat regular, e.g. certain bits in the op-code control the ALU functions, while others control register selection and so on. Some computers had the switches and lights grouped together according to functionality with front panel colour coding for most important instruction formats.
For instance, it would appear as if the PDP-11 instruction set was designed with octal program writing and debugging in mind, since each logical group consisted of 3 bits and a single bit to the left. Other architectures (e.g. IBM360) favoured grouping into 4 bits and thus the use of hexadecimal in the documentation.
In microprocessors, the opcode can be easily split into 2+3+3 bit groups, and thus it is quite natural to represent the op-codes in octal. The register code (3 bits) occupied one or two octal digits. The early 8080 documentation used the octal notation, but later on, Intel switched for some strange reason from octal to hexadecimal in the documentation, making assembly language programming and debugging much harder, since you had to remember every opcode explicitly e.g. 64 (63?) MOV op-codes separately.
Paul