Skip to content
Main menu
  • Main page
  • Discover
  • Unexpected connections
  • Topics
  • Random article
  • Search
Your library
  • Saved articles
  • Recent discoveries
  • Rabbit-hole trails
Topic areas
  • Computer Science
  • Mathematics
  • Physics
  • Engineering
  • Biology
  • Economics
  • Curiosities
WikiholeDeeper into Wikipedia
EnglishEN
  • Saved
  • History

  • Article text and media come live from Wikipedia via the official MediaWiki API and are available under the Creative Commons Attribution-ShareAlike 4.0 License; additional terms may apply. Each article links to its source and revision.
  • WikiHole is an independent project and is not affiliated with the Wikimedia Foundation.
  • How ranking works
  • All topics
  • Reading history
  • Random article
  • MediaWiki API

Indirection

  • Article
  • Rabbit hole
  • Read
  • View history
Tools
Actions
  • Read
  • View history
General
  • Recent changes
  • Related articles
  • Random discovery
This article
Reading time
2 min
Topic
Computer Science
Quality
Start-class
Views
291 in 14 days
Last edited
20 Jun 2026
Print/export
  • Printable version
In other projects
  • Wikidata item
From Wikipedia, the free encyclopedia
Rabbit hole:
  1. Indirection

In computer science, an indirection is a way of referring to something using a name, reference, or container instead of the value itself. The most common form of indirection is the act of manipulating a value through its memory address; e.g., accessing a variable through the use of a pointer. A stored pointer that exists to provide a reference to an object by double indirection is called an indirection node. In some older computer architectures, indirect words supported a variety of more-or-less complicated addressing modes.

Another important example is the domain name system which enables names such as en.wikipedia.org to be used in place of network addresses such as 208.80.154.224. The indirection from human-readable names to network addresses means that the references to a web page become more memorable, and links do not need to change when a web site is relocated to a different server.

Loading the rest of the article…

Recent changes

Rabbit hole

Where Indirection leads. Every connection below has a source: a link in this article, a shared Wikipedia category, or CirrusSearch text similarity. Articles already on your trail are left out.

Contents
  • (Top)
  • Overview
  • See also
  • References
  • Recent changes
  • Rabbit hole
Contents
Contents5 sections
  • (Top)
  • Overview
  • See also
  • References
  • Recent changes
  • Rabbit hole

Overview

A famous aphorism of Butler Lampson that is attributed to David Wheeler goes: "All problems in computer science can be solved by another level of indirection" (the "fundamental theorem of software engineering").1 This is often deliberately mis-quoted with "abstraction layer" substituted for "level of indirection". A corollary to this aphorism, and the original conclusion from Wheeler, is "...except for the problem of too many layers of indirection."

A humorous Internet memorandum, RFC 1925, insists that:

(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall network architecture) than it is to solve it.

(6a) (corollary). It is always possible to add another level of indirection.

Object-oriented programming makes use of indirection extensively, a simple example being dynamic dispatch. Higher-level examples of indirection are the design patterns of the proxy and the proxy server. Delegation is another classic example of an indirection pattern. In strongly typed interpreted languages with dynamic data types, most variable references require a level of indirection: first the type of the variable is checked for safety, and then the pointer to the actual value is dereferenced and acted on.

In languages with statically sized types, indirection is often used to define recursive data types. For example, Rust requires recursive enum variants to contain a pointer-like type such as Box<T>, Rc<T> rather than directly containing another value of the same type. This gives the recursive type a known size, because the variant stores a pointer of fixed size while the recursive value is stored elsewhere.2

When doing symbolic programming from a formal mathematical specification the use of indirection can be quite helpful. To start with a simple example the variables x, y and z in an equation such as can refer to any number. One could imagine objects for various numbers and then x, y and z could point to the specific numbers being used for a particular problem. The simple example has its limitation as there are infinitely many real numbers. In various other parts of symbolic programming there are only so many symbols. So to move on to a more significant example, in logic the formula α can refer to any formula, so it could be β, γ, δ, ... or η→π, ς ∨ σ, ... When set-builder notation is employed the statement Δ={α} means the set of all formulae — so although the reference is to α there are two levels of indirection here, the first to the set of all α and then the second to a specific formula for each occurrence of α in the set Δ.

See also

  • Abstraction (computer science)
  • Delegation pattern
  • Dereference operator
  • Handle
  • Law of Demeter
  • Pointer
  • Reference

References

  1. 1Spinellis, Diomidis (2007). "Another level of indirection". In Oram, Andy; Wilson, Greg (eds.). Beautiful Code: Leading Programmers Explain How They Think. Sebastopol, California: O'Reilly and Associates. pp. 279–291.
  2. 2Klabnik, Steve; Nichols, Carol. "Using Box<T> to Point to Data on the Heap". The Rust Programming Language. No Starch Press. Retrieved 19 June 2026.
Study aids for Indirection

Terminology

indirection node
A stored pointer that exists to provide a reference to an object by double indirection is called an indirection node.

Terms the article defines in bold, quoted in context.

Categories:
  • Data types
  • Programming constructs
  • Computing terminology
  • Unary operations

582 words · 2 references · revision 1360350773 · CC BY-SA 4.0

General
  • Recent changes
  • Related articles
  • Random discovery
This article
Reading time
2 min
Topic
Computer Science
Quality
Start-class
Views
291 in 14 days
Last edited
20 Jun 2026

Key concepts

  • Pointer (computer programming)2
  • Reference1
  • Memory address1
  • Variable (programming)1
  • Addressing mode1
  • Domain name system1
  • Aphorism1
  • Butler Lampson1
  • David Wheeler (computer scientist)1
  • Fundamental theorem of software engineering1

The articles this one links to most, weighted towards the introduction.

Print/export
  • Printable version
In other projects
  • Wikidata item
Created
7 Jan 2003
History
101 edits
75 contributors
No edits in the last 30 days
Last edited
20 Jun 2026

101 revisions in total · 75 contributors

  1. 20 Jun 2026, 23:25 UTCGoingBatty§ Overview fixed link+26diff
  2. 19 Jun 2026, 01:44 UTCMorinator§ Overview expand section on recursive data types+515diff
  3. 21 Jan 2026, 05:36 UTCJuxtaposedJacobChanging short description from "Computer programming construct" to "Computers accessing information referentially"+15diff
  4. 21 Jan 2026, 05:35 UTCJuxtaposedJacobgrammar−7diff
  5. 7 Jan 2026, 00:05 UTCAnomieBOTmDating maintenance tags: {{Clarify}}+18diff
  6. 6 Jan 2026, 22:05 UTCQuantumNinusTemplate for clarification+111diff
  7. 6 Jan 2026, 22:01 UTCQuantumNinusReference don't look the same than indirection−32diff
  8. 8 Dec 2025, 18:41 UTCQuantumNinus§ See also+19diff

View full revision history

Created
7 Jan 2003
History
101 edits
75 contributors
No edits in the last 30 days
Last edited
20 Jun 2026

Go deeper: linked from this article

  • Listed under See also

    Abstraction (computer science)

    Software that provides access that hides details

    In software, an abstraction provides access while hiding details that otherwise might make access more challenging. It focuses attention on details of greater importance.

    11 min readGo deeper
  • Listed under See also

    Pointer (computer programming)

    Object which stores memory addresses in a computer program

    In computer science, a pointer is an object in many programming languages that stores a memory address.

    30 min readGo deeper
  • Linked from the introduction

    Variable (high-level programming language)

    Named container for a particular type of data

    In some high-level programming languages, a variable is an abstract storage or indirection location paired with an associated symbolic name, which contains some known or unknown quantity of data or…

    8 min readGo deeper
  • Linked from the introduction

    Domain Name System

    System to identify resources on a network

    The Domain Name System (DNS) is a hierarchical and distributed name service that provides a naming system for computers, services, and other resources on the Internet or other Internet Protocol (IP) networks.

    26 min readGo deeper
  • Listed under See also

    Law of Demeter

    Design guideline for software development

    The Law of Demeter (LoD) or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs.

    5 min readGo deeper
  • Linked from the introduction

    Reference

    Relationship between objects

    In logic, a reference is a relationship between objects in which one object designates, or acts as a means by which to connect to or link to, another object.

    4 min readGo deeper
  • Linked from the introduction

    Addressing mode

    Aspect of the instruction set architecture of CPUs

    Addressing modes are an aspect of the instruction set architecture in most central processing unit (CPU) designs.

    20 min readGo deeper
  • Listed under See also

    Reference (computer science)

    Data type which allows a program to indirectly access a particular value in memory

    In computer programming, a reference is a value that enables a program to indirectly access a particular datum, such as a variable's value or a record, in the computer's memory or in some other storage device.

    5 min readGo deeper
  • Linked from the introduction

    Memory address

    Reference to a specific memory location

    In computing, a memory address is a reference to a specific memory location in memory used by both software and hardware.

    7 min readGo deeper
  • Listed under See also

    Delegation pattern

    Design pattern in object-oriented programming

    In software engineering, the delegation pattern is an object-oriented design pattern that allows object composition to achieve the same code reuse as inheritance.

    3 min readGo deeper

Adjacent: shared categories and similar text

  • Linked in “Overview”

    Set-builder notation

    Use of braces for specifying sets

    In mathematics and more specifically in set theory, set-builder notation is a notation for specifying a set by a property that characterizes its members.

    5 min readGo deeper
  • Linked in “Overview”

    Corollary

    Concept in mathematics

    In mathematics and logic, a corollary (US:, KORR-ə-lair-ee; UK:, kər-OL-ər-ee) is a proposition which can be readily deduced from a previous, already proven proposition.

    2 min readGo deeper
  • Linked in “Overview”

    Aphorism

    Figure of speech

    An aphorism (from Greek ἀφορισμός: aphorismos, denoting 'delimitation', 'distinction', and 'definition') is a concise, terse, laconic, or memorable expression of a general truth or principle.

    4 min readGo deeper
  • Linked in “Overview”

    Rust (programming language)

    General-purpose programming language

    Rust is a general-purpose programming language that emphasizes performance, type safety, concurrency, and memory safety. Rust supports multiple programming paradigms.

    44 min readGo deeper