In the very first days of computers, programmers entered their work directly into the machine in raw binary machine instructions. This was tedious and error prone, and limited the size of programs that could be developed. One of the first great innovations was the decision to harness the computer to help in the creation of other computer programs. By writing a program that could read a more symbolic, human oriented format many simple coding errors could be avoided.
Assembly languages permitted the programmer to think more in the human-oriented work of symbolic names and operations, rather than in the computer-oriented world of numeric values. The task of linking the symbolic names to their numeric counterparts could be performed by the computer itself, automatically.