Programming languages are (generally) human-friendly means of getting a computer to do something interesting on a human's behalf. Some languages may be friendlier than others; where opinions will genuinely differ as to which are friendlier, there are some that deliberately seek to be as obtuse and unreadable as possible, and those are usually called "esoteric" programming languages and fit into their own category of madness.

"Every configuration file becomes a Turing-complete language eventually." --James Gosling

Every simple language will eventually end up Turing complete

Core concepts

"The 7 ur-languages": ALGOL, Lisp, ML, Self, Forth, APL, Prolog

Concepts

List of concepts

Multi-paradigm design: The idea that a languate can offer multiple paradigms, simultaneously.

Aspect-Oriented: Attempting to capture as first-class citizens the code that "cuts across the inheritance tree" of object-oriented languages.

Functional: Functions as first-class citizens; incorporating more maths-like concepts into the language.

Literate: Code as documentation as code.

Logic: Defines the meaning of a program as its unique smallest model: the deductive closure of its inference rules.

Meta-object protocols (MOP): A series of ideas about how objects relate to one another through means other than inheritance trees.

Object-oriented: The union of state and behavior in a first-class construct.

Phi-Calculus: ...?

Quantum: Quantum programming is the practice of writing algorithms and applications for quantum computers or quantum simulators. It draws on quantum mechanical phenomena such as superposition, entanglement, and interference – to encode and process information in ways that classical computing cannot. A quantum program specifies a sequence of gate operations applied to qubits, measurement operations, and classical post-processing logic. Classical programming is deterministic – input goes in, output comes out. Quantum programming, by contrast, is probabilistic – algorithms must be designed to amplify correct answers through quantum interference while suppressing incorrect ones. The constraint that shapes everything else is measurement. Classical code can inspect any variable at any point. Quantum code can only extract information by measuring qubits – and measurement collapses the quantum state, destroying it. Quantum programmers cannot use print statements or step-through debuggers on quantum variables. Algorithms need to be mathematically verified before testing, with validation relying on statistical error rates rather than deterministic checks. Resource constraints are also more severe. Classical programs run on billions of transistors. Current quantum programs must fit within 50 to a few hundred qubits on production hardware, with strict limits on circuit depth before errors accumulate. This makes quantum programming closer in spirit to embedded systems or Field-programmable gate array (FPGA) design than to standard software engineering.

Miscellaneous

Syntax/paradigms

Toward a better programming

"Programming Paradigms for Dummies: What Every Programmer Should Know"; includes a chart of the major programming paradigms:

Declarative, imperative, functional, constraint, logic, relational, concurrent, dataflow, synchronous, mesage-passing, event-loop, object-oriented, stateful, shared-state

My ontology:

"Programming Language Explorations" suggested tags: declarative, imperative, applicative, functional, logic, von Neumann, object-oriented, expression-oriented, persistent, concurrent, reactive, dataflow, stack, free-form, curly brace, visual, compiled, interpreted, very high-level, system, scripting, glue, intermediate, esoteric, toy, educational, domain-specific

Memory management

Languages often break down to automatically-managed memory vs. manually-managed, but most of the time that means heap management; static and stack allocation are (almost?) always automatically managed by virtue of their allocation schemes.

There's also relationships to physical memory that merit examination.

Language execution types

Note that the lines are significantly blurring; several "interpreted" languages internally compile the source into an AST or bytecode format for faster execution, and several "compiled" languages are available to run at the command-line a la shell scripts or REPLs by internally taking source through their compilation pipeline and executing the result.

In the long run, the key differentiator around "compiled vs interpreted" may be solely whether the tool/language does ahead-of-time error-checking.

Types

A type system (a system in which one can define and/or declare types) is the mechanism by which the language detects errors either ahead of time (during compilation) or at runtime.

Runtime Introspection and Modification

Types can often be inspected at runtime regardless of the type-safe or type-checked nature of the language/platform; in many languages/platforms, the process of inspection is known as "reflection".

If the types can be manipulated/changed at runtime, then the language is often said to be a "MetaObject Protocol" language, meaning that it can operate at a "meta-object" level. These tend to be dynamically-type-checked/weakly-type-safe interpreted languages, since it is hard to enforce type-safety when types changing up at runtime.

Fun



Detail Pages:

Last modified 01 September 2026