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