Computer programming is the art of writing software, instructions for computers to follow. At the base level, as understood by the computer, these instructions are written in machine code, or binary, pure numbers, quite difficult for humans to read and write. At a slightly higher level, these codes correspond to assembly language, short mnemonics for individual computer operations, that still correspond one to one with what the machine actually does. This is still unstructured, terse, and difficult to read or write in. Most programming is done in higher level, compiled languages, or even interpreted that look like a cross between English and Algebra, and allow various abstractions depending on the language, such as encapsulation, function calls, data hiding, and more, to enable people reading and writing programs to deal with the vast quantity of information that the computer actually handles. Respectively, a compiler program translates these languages to machine code to be executed directly, or a separate interpreter program itself takes these statements and executes them as an intermediary.