{
  "schema_version": "1.0",
  "codex": "thecodex.expert/coding",
  "type": "paradigm",
  "slug": "paradigms/procedural",
  "name": "Procedural Programming",
  "section": "Paradigms",
  "canonical_definition": "Procedural programming is a programming paradigm derived from structured programming, in which a program is composed of procedures (named sequences of statements) that operate on shared or passed data, executing in an explicit sequence determined by control flow statements such as conditionals and loops, with program state held in mutable variables.",
  "confidence": "high",
  "last_verified": "2026-06-01",
  "source_count": 4,
  "url": "https://thecodex.expert/coding/paradigms/procedural/",
  "paradigm_type": "imperative",
  "unit_of_composition": "procedure/function",
  "state_model": "mutable variables",
  "primary_languages": [
    "C",
    "Pascal",
    "BASIC",
    "Fortran",
    "Bash"
  ],
  "concept_relationship": {
    "requires_first": [
      "foundations/how-computers-work",
      "how-languages-work/compilation"
    ],
    "enables": [
      "concepts/functions",
      "concepts/scope",
      "concepts/control-flow",
      "concepts/variables",
      "paradigms/object-oriented"
    ],
    "commonly_confused_with": [
      "imperative programming (broader category)"
    ]
  },
  "sources": [
    {
      "num": 1,
      "citation": "Dijkstra, E. W. (1968). Go To Statement Considered Harmful. CACM 11(3), 147-148.",
      "tier": 1
    },
    {
      "num": 2,
      "citation": "Bohm, C. & Jacopini, G. (1966). Flow diagrams, Turing machines and languages. CACM 9(5), 366-371.",
      "tier": 1
    },
    {
      "num": 3,
      "citation": "Kernighan, B. W. & Ritchie, D. M. (1988). The C Programming Language (2nd ed.). Prentice Hall.",
      "tier": 1
    },
    {
      "num": 4,
      "citation": "Dijkstra, E. W. (1972). The Humble Programmer. CACM 15(10), 859-866.",
      "tier": 1
    }
  ]
}