I've always found this format confusing. If we are naming things like OP_CHECKMULTISIG rather than using the direct opcode, I believe the numbers 2 and 3 should be OP_2 and OP_3 to make it clear it's not 0x02 and 0x03. I know it's "common sense" if you've read all the opcodes carefully but took me quite a while to reverse engineer it. 

Also in these examples, the value 0x21(meaning push that many bytes onto the stack) is omitted before the pubkeys. Also had trouble figuring this out as it's rarely stated.

Is it considered advantageous to leave these details out? These particular details took me quite a while to find out.