Programming paradigms are a way to classify programming languages based on their features. Some languages are heavily slanted toward one paradigm — C is procedural, Java/C++ are almost entirely class oriented, and Haskell is functional. But many languages also support code patterns that can come from, and even mix and match from, different paradigms. So called "multi-paradigm languages" offer ultimate flexibility. JavaScript, for example, is a multi-paradigm language.
There are two main programming approaches: imperative and declarative.
Imperative programming focuses on how to execute, defining control flow as statements that change the program's state.
Declarative programming focuses on what to execute, expressing the logic of a computation without describing its control flow.