Interpreted vs Compiled
- In an interpreted language each step of the source code is executed as is.
- A compiled language uses a compiler to convert the human-readable source code into a binary form as an initial task.
Dynamic vs Static
- In a dynamic language a variable can contain different types at different times.
- In a static language the type information is all about the variable itself, not the value in the variable.
Imperative vs Functional
- An imperative language models the running state of a program as mutable data and issues a list of instructions that transform that running state.
- A functional language operates on values but, instead of altering the inputs, functions act like mathematical functions and return new values.
(Source: The Well-Grounded Java Developer, by Benjamin J. Evans and Martijn Verburg)