I can enumerate many features of functional programming, but when my friend asked me Could you define functional programming for me? I couldn\'t.
There are two separate definitions:
The older definition (first-class functions) has been given by Chris Conway.
The newer definition (avoiding side effects like mutation) has been given by John Stauffer. This is more generally known as purely functional programming.
This is a source of much confusion...