I'm the second to answer so the first answer is suggested to read. And here are the ideas I think is very basic:
Everything is an Expression functional programming is distinguished from imperative programming by telling what to do rather than how to do in every step. Programs in FP are written as expressions, and even imperative operations are described in expressions.
Immutability I regard this one as the most significant difference FP is from OOP. Immutability forces programmer to think in the way of compositions of expressions and you may see it in the way people operate lists in FP comparing to that in OOP.
High Order function & Composition composition of functions is commonly used in FP.
Pure Functions & Side Effects you need to understand what "side effects" means before you are ready to isolate side effects in FP. Pure functions make program more reliable and make it harder to program in pure functional languages. I brings benefits in many ways.
You can find more about that by learning Haskell.
I will put polymorphism, recursive types and first order functions are the three most important concepts of functional programming.
Josh Armitage
IBM Software Developer
First Order Functions - The ability to pass functions as parameters or as returned values
Currying - The decomposing a function with multiple arguments into a series of single argument functions
Lambda Calculus - The mathematical basis for functional programming
Pure Functions - Functions that have no requirement on state, running this function with a set or parameters will always return the same result
Immutable Data - When a variable is initially set, it's value cannot be changed Recursion - Having functions that call themselves during execution
I found with FP, it's best to just spend time working with it. The difference in mindset required I thought was hard to grasp without getting my feet wet.