Procedural Functional Object-Oriented Logic / Declarative Concurrent / Actor Array / APL Stack-Based Reactive / Dataflow Esoteric

Paradigm 01

Procedural

Imperative

The oldest and most fundamental paradigm. A program is a sequence of statements that change program state — like a recipe, executed step by step. The programmer specifies exactly how to solve the problem.

Subroutines (functions, procedures) enable code reuse. Variables hold mutable state. Control flow constructs — if/else, loops, goto — direct execution. The underlying model mirrors how CPUs actually work.

Procedural languages span from raw assembly to modern systems languages. FORTRAN (1957) was the first; C (1972) remains its most influential incarnation.

"Tell the computer exactly what to do, step by step."

Canonical Examples

C 1972
Fortran 1957
Pascal 1970
COBOL 1959
BASIC 1964
ALGOL 60 1960
Ada 1980
Zig 2016
Odin 2016
Modula-2 1978
PL/I 1964
REXX 1979
RPG 1959
AWK 1977
Tcl 1988
Perl 1987
Bash 1989
NATURAL 1979
Icon 1977
Oberon 1987
SPARK 1988
Turing 1982
LOGO 1967
Terra 2013
V 2019
Euphoria 1993

Paradigm 02

Functional

Lambda Calculus

Computation expressed as the evaluation of mathematical functions. Rooted in Church's lambda calculus (1936). Programs avoid changing state and mutable data — side effects are minimized or controlled.

Key concepts: first-class functions (functions as values), higher-order functions (functions that take/return functions), immutability, referential transparency (same inputs always yield same outputs), and recursion instead of loops.

Pure functional languages (Haskell, Agda) enforce these properties. Impure functional languages (OCaml, F#, Clojure, Elixir) allow controlled side effects. Most modern languages have adopted functional features.

"Functions are values. State is a lie. Transformation is truth."

Pure Functional

Haskell 1990
Agda 2007
Idris 2011
Elm 2012
PureScript 2013
Miranda 1985
Clean 1987
Lean 2013
Coq 1984
Futhark 2014
Bosque 2019
Roc 2021

Impure / Multi-Paradigm Functional

Lisp 1958
ML 1973
OCaml 1996
F# 2005
Clojure 2007
Elixir 2012
Erlang 1987
Common Lisp 1984
Scheme 1975
Racket 1994
SML 1983
Scala 2004
Julia 2012
R 1993
Shen 2012
Hy 2013
Fennel 2016
Janet 2018
Koka 2012
Reason 2016
LiveScript 2011
Arc 2008
Picolisp 1988
XQuery 2007
XSLT 1999
Curry 1995
Hope 1980

Paradigm 03

Object-Oriented

OOP

Programs are modeled as collections of objects — entities that bundle data (fields) and behavior (methods). Objects communicate via messages or method calls.

Core principles: Encapsulation (hiding internal state), Inheritance (extending existing classes), Polymorphism (different objects responding to the same interface), and Abstraction (hiding complexity behind interfaces).

Smalltalk (1972) was the purest OOP language — everything is an object. C++ and Java popularized OOP for industry. Alan Kay, who coined the term, later said most "OOP" languages missed his original vision entirely.

"Objects are little computers — they receive messages and respond." — Alan Kay

Class-Based OOP

Java 1995
C++ 1985
C# 2000
Python 1991
Ruby 1995
Kotlin 2011
Swift 2014
Smalltalk 1972
Objective-C 1984
Eiffel 1985
Delphi 1995
Groovy 2003
Scala 2004
Crystal 2014
D 2001
Ceylon 2011
Dart 2011
Cobra 2006
Boo 2003
Nemerle 2003
ABAP 1983
Visual Basic 1991
PHP 1994
Pony 2014
Pharo 2008

Prototype-Based OOP

JavaScript 1995
Self 1987
Lua 1993
Io 2002
Newspeak 2006
Ioke 2008

Paradigm 04

Logic & Declarative

Inference Engine

Instead of describing how to solve a problem, you describe what is true. The language's inference engine figures out the solution. Programs are collections of facts and rules.

Prolog is the canonical example — declare relationships and let unification find answers. Datalog applies this model to databases. SQL is declarative: you say what data you want, not how to retrieve it.

Logic programming has deep roots in formal logic (Horn clauses, first-order predicate logic) and was central to the Japanese Fifth Generation Computer project in the 1980s. AI research has periodically revived interest.

"What is true? What can be derived? The engine will find out."
Prolog 1972
Datalog 1977
SQL 1974
Mercury 1995
Curry 1995
Logtalk 1995
miniKanren 2005
Oz 1991
CLIPS 1985
Planner 1969
Zinc 2012
Soufflé 2016
Rego 2016
Datomic 2012

Paradigm 05

Concurrent & Actor

Message Passing

Languages where concurrency is a first-class citizen, not an afterthought. The actor model (Hewitt, 1973) treats computation as actors that communicate exclusively through asynchronous message passing — no shared state, no data races.

Erlang pioneered this model for telecom — a crashed actor doesn't crash others; supervisors restart failures. This "let it crash" philosophy, combined with hot code swapping, enables legendary uptime.

Go's goroutines and channels offer a lighter weight CSP (Communicating Sequential Processes) model. Rust enables fearless concurrency through its ownership type system at compile time.

"Don't share memory. Share nothing. Communicate via messages."
Erlang 1987
Elixir 2012
Go 2009
Rust 2010
Akka (Scala) 2009
Pony 2014
Oz 1991
Chapel 2004
X10 2004
Cilk 1994
occam 1983
Unison 2019

Paradigm 06

Array & APL Family

Rank Polymorphism

Descended from Kenneth Iverson's APL (A Programming Language, 1966). Operations apply to entire arrays at once — a single expression can compute on millions of values. The paradigm is built on rank polymorphism and symbolic notation.

APL uses special Unicode symbols (⍺, ⍵, ¨, ⍋, ⍒…) as primitive operations. J (Iverson's later language) replaces symbols with ASCII digraphs. Q and K dominate quantitative finance with near-real-time data processing.

This paradigm anticipates modern SIMD operations, GPU computing, and the NumPy model decades early.

"The array is the universal data structure. One operation on all."
APL 1966
J 1990
K 1993
Q 2003
Nial 1981
A+ 1988
MATLAB 1984
R 1993
Octave 1988
Uiua 2022
BQN 2020
Dyalog APL 1983

Paradigm 07

Stack-Based

Concatenative

Programs manipulate an implicit data stack using words (functions) that consume and produce values on the stack. There are no named parameters — data flows implicitly through the stack. This is called the concatenative paradigm.

Forth, created by Charles Moore in 1970, is the archetype. Extremely low memory footprint — Forth implementations have run on 4KB of RAM. PostScript (the language of laser printers) is stack-based. WebAssembly uses a stack machine virtual machine internally.

"No variables. No parentheses. Just stack operations flowing into each other."
Forth 1970
PostScript 1982
Factor 2003
Joy 2001
Cat 2006
Kitten 2012
WebAssembly 2017
RPL 1986
colorForth 2001
Chuck 2003

Paradigm 08

Reactive & Dataflow

Signal Propagation

Programs are expressed as directed graphs of data dependencies. When a value changes, all dependent values automatically update. This models spreadsheet logic at the language level — "reactive" values that propagate changes.

Verilog and VHDL use dataflow semantics to model hardware (signals propagate through circuit elements). LabVIEW G is a visual dataflow language. Functional reactive programming (FRP) brings this model to GUI and real-time systems.

"Define relationships between values. Let changes cascade automatically."
Verilog 1984
VHDL 1983
Elm 2012
LabVIEW G 1986
Lustre 1984
Esterel 1983
Pure Data 1996
Max/MSP 1988
Faust 2002
Sodium 2012

Paradigm 09

Esoteric Languages

Esolangs

Created as proof-of-concept, art, humor, or intellectual challenge rather than practical use. Esoteric programming languages (esolangs) explore the boundaries of computation — and sometimes transcend them in surprising ways.

Brainfuck (1993) has just 8 commands and is Turing-complete. Malbolge was deliberately designed to be the most difficult language to write in. INTERCAL was the first joke language (1972). Befunge is two-dimensional.

Despite their absurdity, esolangs have produced genuine theoretical insights. Brainfuck illustrates minimalist Turing completeness. Lazy K explores pure combinatory logic. Many serious concepts originated as playful experiments.

"Why? Because we can. Also because it's funny."
Brainfuck 1993
Befunge 1993
INTERCAL 1972
Malbolge 1998
Whitespace 2003
Piet 2002
Lolcode 2007
Shakespeare 2001
Chef 2002
COW 2003
Velato 2009
Chicken 2002
Rockstar 2018
Emojicode 2016
ArnoldC 2013
Hexagony 2015
Deadfish 2004
Underload 2006
Lazy K 2002
Glass 2008