The first generation of computer software, used with the primitive computers of the 1940s, is machine language. This language consists solely of strings of binary digits 0 and 1. Machine language instructions must specify the storage location for every instruction and data items used. Therefore, writing this software was excruciatingly slow and labor intensive and could only be done by highly trained specialized programmers. The second generation of software, which began in the early 1950s, produced symbolic language.
Assembly language is a symbolic language consisting of language-like acronyms and words.
Assembly language must be translated into machine language by programs called assemblers. Assembly language today is limited to problems that require maximum execution efficiency or highly intricate manipulations. The third software generation, which prevailed from the late 1950s to the 1970s, is high-level languages. These were more sophisticated, easy to use, and directed toward specialized classes of problems. High-level languages are also less machine dependent and often can be used on more than one type of computer.