The Wikipedia entry for Programming Paradigm has had me lost for hours:

A programming paradigm is a fundamental style of computer programming. (Compare with a methodology, which is a style of solving specific software engineering problems.) Paradigms differ in the concepts and abstractions used to represent the elements of a program (such as objects, functions, variables, constraints, etc.) and the steps that compose a computation (assignment, evaluation, continuations, data flows, etc.).

Aspect-oriented programming aims to increase modularity by allowing the separation of cross-cutting concerns

Automata-based programming: the program or its part is thought of as a model of a finite state machine (FSM) or any other (often more complicated) formal automaton

Relativistic programming is a style of concurrent programming where instead of trying to avoid conflicts between readers and writers (or writers and writers in some cases) the algorithm is designed to tolerate them and get a correct result regardless of the order of events

Functional programming treats computation as the evaluation of mathematical functions and avoids state and mutable data

Recursion is a method where the solution to a problem depends on solutions to smaller instances of the same problem

Reflection is the ability of a computer program to examine (see type introspection) and modify the structure and behavior (specifically the values, meta-data, properties and functions) of an object at runtime

Event-driven programming: the flow of the program is determined by events—e.g., sensor outputs or user actions (mouse clicks, key presses) or messages from other programs or threads

Object-oriented programming using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs

Separation of concerns (SoC) is the process of separating a computer program into distinct features that overlap in functionality as little as possible

Service-oriented architecture is a set of principles and methodologies for designing and developing software in the form of interoperable services

Parallel computing is a form of computation in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently

Quantum programming is a set of computer programming languages that allow the expression of quantum algorithms using high-level constructs. The point of quantum languages is not so much to provide a tool for programmers, but to provide tools for researchers to understand better how quantum computation works and how to formally reason about quantum algorithms