A kind programming language that consists of human readable processor instructions (Mnemonics, as opposed to Opcodes, which would be the number representations of the same instructions). Modern assemblers do furthermore also support certain higher level features, like macros, datatypes or functions.
Also, assembly language is used to distinct the language from the program that translates into machine code. In general use, both are called assembler which leads to the need to specify in certain situations.
It should also be noted that while people often talk about assembly language in general, there is not "the" assembly language, but rather a large group of them, one reason being different processor families having different instruction sets, the other being different assembler programs supporting different features, or having different ways of providing those features.
Assembly language is what real men write their programs in!
The one true computer programming language. All high-level languages reduce down to assembly language in the end.