Opcodes are seldom used by programmers directly. Whenever they are directly programmed into memory, they are only ever guaranteed to work on the computer they were designed for. When programmers write in assembly language, a translator program converts program statements, one-for-one, into machine language commands. The programmer must only remember a mnemonic for each opcode instead of its binary value. Alternatively, a high level-programming language can be used, say 4th generation, which gets converted to 3rd generation and so on until it reaches 1st generation. From here, an individual computer will convert the program to machine code whenever the program file is read. This way, a program can work on a much larger variety of computers.