Programmable and Networked Information · Processing and transforming

Programming languages and compilers

Programming languages make machine procedures expressible in forms designed for human composition, review and reuse. Compilers and related translators convert those source representations into target instructions or intermediate forms that a particular machine can execute. The language and the compiler are therefore different objects: one defines a notation and meaning; the other implements a translation.

When it emerged
Language concepts in the 1940s; operational automatic programming in the early 1950s; production high-level compilers from the mid-1950s
What changed
Reduces the burden of expressing procedures directly in machine-specific instructions
Reading time
16 minutes
The essential questions

Programming languages and compilers, clearly explained

Programming languages make machine procedures expressible in forms designed for human composition, review and reuse. Compilers and related translators convert those source representations into target instructions or intermediate forms that a particular machine can execute. The language and the compiler are therefore different objects: one defines a notation and meaning; the other implements a translation.

What is it?

A programming language is a formal notation with rules for expressing procedures, data structures and computations. A compiler is a program that translates source text in one language into target code, machine instructions or another representation while preserving intended semantics within the language definition.

What problem did it solve?

The primary constraint reduced is the cognitive and clerical burden of expressing every procedure directly in machine-specific numerical instructions. Programming languages allow people to work with named variables, formulas, structures and abstractions, while compilers automate translation into executable forms.

How did it work?

Compilers and related translators convert those source representations into target instructions or intermediate forms that a particular machine can execute. The language and the compiler are therefore different objects: one defines a notation and meaning; the other implements a translation. Early programmers worked directly with machine codes, switches, patch panels and numerical instruction formats.

What came before?

It built on Electronic digital computers and Punched-card control and data entry.

What did it make possible?

It helped make possible Database management systems and Generative Language Models.

What survived?

Modern development still distinguishes editable source from generated artefacts.

Why does it still matter?

Programs can be reviewed, annotated, compared and taught as formal documents rather than opaque numerical instruction lists. Languages name variables, expressions and control structures without requiring the programmer to manage every address and instruction encoding directly. A compiler performs systematic mapping from source structure to target operations, including analysis and optimisation that would otherwise require specialised manual labour.

Deep dive

The deeper story

Programming languages make machine procedures expressible in forms designed for human composition, review and reuse. Compilers and related translators convert those source representations into target instructions or intermediate forms that a particular machine can execute. The language and the compiler are therefore different objects: one defines a notation and meaning; the other implements a translation.

Early programmers worked directly with machine codes, switches, patch panels and numerical instruction formats. Symbolic assemblers reduced the burden of remembering addresses and operation numbers. Konrad Zuse designed Plankalkül in the 1940s, but it was not implemented as an operational language at the time. Grace Hopper's A-0 system around 1951-1952 is often described as an early compiler or automatic programming system. Other systems, including the Laning-Zierler compiler, contributed to algebraic translation. No single uncomplicated first compiler exists because the category itself developed gradually [1][2][3].

FORTRAN provides a clearer production milestone. John Backus led the IBM team that developed the language and an ambitious optimising compiler, delivered for the IBM 704 in 1957. The compiler had to produce code efficient enough to persuade scientific programmers that high-level notation would not waste the costly machine [4][5][6]. COBOL then established a more English-like business data-processing language through a multi-institutional standardisation effort [7].

The topic matters because it moves procedural information upward through layers of abstraction. Source code can describe formulas, records, loops and functions without exposing every register and address. Translation, linking and runtime support make the program portable within limits. This expands participation and software scale, but it also creates dependencies: compiler correctness, language standards, libraries, build environments, target architectures and version histories all become part of the executable information chain.

The big idea

Programming languages externalise procedures in human-oriented formal notation, while compilers turn that notation into machine action. Their achievement is not making computers understand English, but building trustworthy translation layers between different representational worlds.

Main problem addressed

Reduces the burden of expressing procedures directly in machine-specific instructions

Connections

What came before and what followed

Start with the key connections, then reveal the wider network when you need more context.

Connections for Programming languages and compilersElectronic digitalcomputersDatabase managementsystemsPunched-cardcontrol and dataentryGenerative LanguageModelsProgramming languagesand compilers
Timeline

Key moments

How Programming languages and compilers emerged

This marks the broad emergence and development of Programming languages and compilers. Why it mattered: Reduces the burden of expressing procedures directly in machine-specific instructions.

Automatic programming experiments, early 1950s

A-0 and algebraic systems automate routine selection and translation.

Programming languages and compilers · practical implementation

Production high-level compilers, mid-1950s

FORTRAN demonstrates practical high-level programming with efficient generated code.

Programming languages and compilers · practical implementation

Business and standard languages, late 1950s-1960s

COBOL and other languages expand domains and institutional portability.

People and organisations

Who helped shape it?

Grace Hopper

Grace Hopper is one of the people connected to this topic. Open the profile for the wider historical context.

John Backus

John Backus is one of the people connected to this topic. Open the profile for the wider historical context.

Konrad Zuse

Konrad Zuse is one of the people connected to this topic. Open the profile for the wider historical context.

IBM

IBM is one of the organisations connected to this topic. Open the profile for the wider historical context.

Research notes

Open the full research notes

These expandable sections preserve the detailed research behind the public explanation.

1. Executive Summary

Programming languages make machine procedures expressible in forms designed for human composition, review and reuse. Compilers and related translators convert those source representations into target instructions or intermediate forms that a particular machine can execute. The language and the compiler are therefore different objects: one defines a notation and meaning; the other implements a translation.

Early programmers worked directly with machine codes, switches, patch panels and numerical instruction formats. Symbolic assemblers reduced the burden of remembering addresses and operation numbers. Konrad Zuse designed Plankalkül in the 1940s, but it was not implemented as an operational language at the time. Grace Hopper's A-0 system around 1951-1952 is often described as an early compiler or automatic programming system. Other systems, including the Laning-Zierler compiler, contributed to algebraic translation. No single uncomplicated first compiler exists because the category itself developed gradually [1][2][3].

FORTRAN provides a clearer production milestone. John Backus led the IBM team that developed the language and an ambitious optimising compiler, delivered for the IBM 704 in 1957. The compiler had to produce code efficient enough to persuade scientific programmers that high-level notation would not waste the costly machine [4][5][6]. COBOL then established a more English-like business data-processing language through a multi-institutional standardisation effort [7].

The topic matters because it moves procedural information upward through layers of abstraction. Source code can describe formulas, records, loops and functions without exposing every register and address. Translation, linking and runtime support make the program portable within limits. This expands participation and software scale, but it also creates dependencies: compiler correctness, language standards, libraries, build environments, target architectures and version histories all become part of the executable information chain.

The big idea

Programming languages externalise procedures in human-oriented formal notation, while compilers turn that notation into machine action. Their achievement is not making computers understand English, but building trustworthy translation layers between different representational worlds.

2. Identification

| Field | Value | |---|---| | Public title | Programming languages and compilers | | Analytical title | Human-Oriented Program Notation and Automated Translation Systems | | Recommended type | Formal instruction language and translation system | | Primary category | Processing & transformation | | Secondary categories | Encoding; interpretation; abstraction; reproduction; governance | | Emergence | Language concepts in the 1940s; operational automatic programming systems in the early 1950s; production high-level compilers from the mid-1950s |

3. Operational Definition

A programming language is a formal notation with rules for expressing procedures, data structures and computations. A compiler is a program that translates source text in one language into target code, machine instructions or another representation while preserving intended semantics within the language definition.

The topic includes assembly language, automatic programming, A-0, algebraic compilers, FORTRAN, COBOL, compiler optimisation, linking, runtimes, source-target lineage and standardisation. It excludes machine hardware, general binary representation, application software as a separate product category and interactive operating systems. Interpreters are discussed as a neighbouring execution strategy because they execute or translate program representations incrementally rather than producing the same kind of ahead-of-time target artefact.

4. Why the Topic Matters

4.1 Procedure becomes readable symbolic text

Programs can be reviewed, annotated, compared and taught as formal documents rather than opaque numerical instruction lists.

4.2 Machine detail can be abstracted

Languages name variables, expressions and control structures without requiring the programmer to manage every address and instruction encoding directly.

4.3 Translation becomes automatable

A compiler performs systematic mapping from source structure to target operations, including analysis and optimisation that would otherwise require specialised manual labour.

4.4 Software becomes portable and reusable

Source code can be retargeted to compatible machines through new compilers, although libraries, assumptions and undefined behaviours limit true portability.

4.5 Programming becomes an ecosystem

Standards, compilers, linkers, runtimes, libraries, debuggers and build tools collectively determine whether source becomes a reliable executable.

5. Terminology
  • Source code: Program representation written in a source language.
  • Machine code: Binary or numerical instructions directly executed by a processor.
  • Assembly language: Symbolic notation closely mapped to machine instructions.
  • Assembler: Translator from assembly language to machine code.
  • Compiler: Program that translates a source language into target code or another representation.
  • Interpreter: System that executes or translates program constructs during runtime rather than only producing a standalone target program.
  • Linker: Tool combining separately translated modules and resolving references.
  • Runtime: Support environment and services required while a program executes.
  • Optimisation: Transformation intended to improve speed, size or other properties while preserving semantics.
  • Syntax: Formal structure governing valid program expressions.
  • Semantics: Meaning assigned to valid program constructs.
  • High-level language: Language abstracting substantial machine-specific detail.
  • Portability: Ability to move a program across systems with limited change.
  • Toolchain: Connected set of translators, linkers, libraries, build tools and runtime components.
  • Bootstrap: Process of implementing a language or compiler using itself or a prior system.
6. Boundary With Neighbouring Topics

6.1 Language versus compiler

A language is a specification or convention. A compiler is one implementation that accepts source and produces target representations.

6.2 Compiler versus interpreter

A compiler typically produces a target artefact before execution. An interpreter performs translation or execution incrementally. Many modern systems combine both.

6.3 Source versus executable

Source expresses procedure for people and tools. The executable is a derived artefact for a target environment. They require provenance linking.

6.4 Abstraction versus natural language

Programming languages are formal, constrained and deliberately unambiguous in ways ordinary language is not.

6.5 Portability versus identical behaviour

A standardised language can reduce machine dependence, but data sizes, libraries, operating systems and compiler behaviour still affect results.

7. Communication Pattern

| Dimension | Assessment | |---|---| | Participants | Language designer, compiler writer, application programmer, reviewer, build system, processor, operator and end user. | | Time | Source creation and compilation precede execution; feedback ranges from immediate to long batch cycles. | | Direction | Human intent to source code, source through translator to target, target to machine behaviour and output. | | Feedback | Syntax errors, type errors, diagnostics, tests, runtime failures and user reports. | | Visibility | Source may be inspectable, while compiler transformations and generated machine code can be opaque. |

The communication pattern is a layered human-machine loop. Designers define an architecture, programmers externalise procedures, operators supply jobs and data, hardware transforms state, and people or other systems interpret outputs. Apparent machine autonomy rests on accumulated human decisions embedded in representation, circuitry and software.

8. Expanded Communication Model

| Dimension | Assessment | |---|---| | Problem | Desired transformation or behaviour. | | Algorithm | Procedure selected by the programmer. | | Source language | Formal notation expressing data and operations. | | Front end | Lexing, parsing, semantic analysis and diagnostics. | | Intermediate representation | Compiler-internal form enabling analysis and optimisation. | | Back end | Target-specific instruction selection and code generation. | | Linking | Combination of modules and libraries. | | Runtime | Memory management, input/output, exceptions and support services. | | Target architecture | Instruction set, calling convention and operating environment. | | Verification | Testing, static analysis, review, reproducible build and output comparison. | | Noise | Ambiguous specification, compiler defect, undefined behaviour, version mismatch, dependency drift or incorrect assumptions. |

Compilation is itself information transmission. The source procedure is encoded, transformed through several internal representations and reconstructed as target behaviour. Fidelity must therefore be judged semantically, not by visual resemblance between source and machine code.

9. Historical Emergence

9.1 Direct machine programming

Early electronic computers were configured through cables, switches or numerical instruction codes. Programmers had to manage addresses, operation numbers and machine timing directly.

9.2 Symbolic assembly

Assemblers replaced raw numerical opcodes and addresses with symbolic names. This reduced clerical burden while remaining closely tied to one architecture.

9.3 Plankalkül and early language design

Konrad Zuse designed Plankalkül during the 1940s as a high-level formal system. It was historically important as a language conception but did not become an operational compiler system at the time.

9.4 Grace Hopper and A-0

Hopper developed A-0 for the UNIVAC environment around 1951-1952. It used symbolic references to select reusable routines and is frequently described as an early compiler or automatic programming system [1][2].

9.5 Algebraic translation experiments

Systems such as Laning-Zierler demonstrated that algebraic expressions could be translated for computer execution. These projects show that the compiler category emerged through several experiments rather than one birth certificate.

9.6 FORTRAN and production optimisation

IBM's FORTRAN team, led by John Backus, delivered a language and compiler for the IBM 704 in 1957. The compiler's optimisation was crucial because machine time was expensive and programmers doubted that automatic translation could match hand coding [4][5][6].

9.7 COBOL and institutional standardisation

COBOL emerged from a committee process involving government, manufacturers and users. Its business orientation, data descriptions and relative machine independence supported long-lived administrative software [7].

9.8 Compiler science

Parsing theory, intermediate representations, data-flow analysis, register allocation and optimisation became specialised fields. Frances Allen's work at IBM helped establish advanced compiler optimisation and program analysis [8].

9.9 Language ecosystems and portability

C, Pascal and later languages tied source portability to standard libraries and operating environments. BCPL and related languages contributed to this lineage [9].

9.10 Managed and dynamic execution

Virtual machines, bytecode, just-in-time compilation and interpreters blur the old binary between compiled and interpreted systems.

9.11 Contemporary language infrastructure

Package managers, reproducible builds, static analysis and continuous integration extend the translation chain. Modern software may depend on thousands of transitive components before source becomes running behaviour.

10. Prerequisites
  • Electronic programmable computers
  • Machine instruction sets
  • Formal notation and logic
  • Symbol tables and data structures
  • Memory sufficient to hold translators
  • Input media for source programs
  • Reusable subroutine libraries
  • Language specifications and standards
  • Testing and diagnostic practices
  • Institutional demand for larger software

Compilers require computing resources to create computing resources. Early systems faced severe memory and performance limits, so translator design was itself a demanding systems problem. The successful compiler proves both a language and an executable chain.

11. Periodisation

11.1 Machine code and wiring

Programs are numerical or physical configurations closely tied to hardware.

11.2 Assemblers, late 1940s onward

Symbolic names reduce address and opcode burden.

11.3 Automatic programming experiments, early 1950s

A-0 and algebraic systems automate routine selection and translation.

11.4 Production high-level compilers, mid-1950s

FORTRAN demonstrates practical high-level programming with efficient generated code.

11.5 Business and standard languages, late 1950s-1960s

COBOL and other languages expand domains and institutional portability.

11.6 Compiler optimisation and language theory

Formal grammars, analysis and optimisation mature into computer science disciplines.

11.7 Portable systems and software ecosystems

Languages, libraries and operating systems support larger cross-machine software bases.

11.8 Virtual machines and continuous toolchains

Compilation becomes multi-stage, incremental and integrated with package and deployment systems.

12. Main Problem Addressed

The primary constraint reduced is the cognitive and clerical burden of expressing every procedure directly in machine-specific numerical instructions. Programming languages allow people to work with named variables, formulas, structures and abstractions, while compilers automate translation into executable forms.

Secondary constraints reduced include:

  • Manual address calculation
  • Repeated hand coding of common routines
  • Machine-specific program rewriting
  • Limited readability and review
  • Difficulty building large software collaboratively
  • Poor diagnostic feedback
  • Weak reuse across applications and machines
13. Evaluation Matrix

| Dimension | Assessment | |---|---| | Abstraction level | Ranges from symbolic assembly to highly abstract domain languages. | | Translation fidelity | Dependent on language definition and compiler correctness. | | Generated efficiency | Varies by compiler, optimisation settings and target. | | Portability | Medium to high under standards, but constrained by environment and dependencies. | | Human readability | Higher than machine code, though language expertise remains necessary. | | Feedback latency | Historically batch; often immediate in modern development environments. | | Toolchain dependency | High; source requires compatible compiler, libraries and runtime. | | Reproducibility | Possible but threatened by version and dependency drift. | | Auditability | Source aids review, while optimisation can obscure target behaviour. | | Governance | Standards bodies, vendors and communities control language evolution. |

A language's expressive power should not be confused with the usability or trustworthiness of one compiler. Multiple implementations can differ in diagnostics, optimisation, extensions and defects. The map should preserve language specification, translator version and target environment separately.

14. Advantages and Capabilities

1. Symbolic abstraction

Names and structured expressions allow programmers to reason about the problem domain rather than every machine register.

2. Automated translation

Compilers perform repetitive mapping, address assignment and code generation consistently.

3. Optimisation

Translators can analyse whole procedures and improve target code in ways difficult to reproduce manually at scale.

4. Modularity and reuse

Functions, modules and libraries allow software to be assembled from maintained components.

5. Portability

Source can be retargeted through compilers, extending software life across hardware generations.

15. Civilisational Contributions

1. Software scale

Larger teams can build systems beyond the practical limits of machine-code programming.

2. Scientific computing

FORTRAN and successors make formula-oriented programming accessible to scientists and engineers.

3. Business administration

COBOL supports long-lived record and transaction systems in government and commerce.

4. Computer science

Language semantics, parsing, type systems and optimisation become major fields of theory and practice.

5. Reproducible procedure

Source code can preserve an explicit formal procedure that can be copied, reviewed and rerun.

6. Platform ecosystems

Languages and compilers become foundations for operating systems, applications and developer communities.

16. Organisations, Access and Power

1. Vendor language strategy

Manufacturers use languages to attract customers while controlling compilers and target platforms.

2. Standards committees

Formal standards improve portability but reflect negotiation among governments, companies and users.

3. Professional gatekeeping

Higher-level languages widen participation while creating new expertise hierarchies around syntax, compilers and systems design.

4. Open-source communities

Shared compiler implementations and language governance can distribute control, though major sponsors still wield influence.

5. Legacy dependence

Organisations can remain bound to decades-old languages because the software encodes critical business rules and replacement risk is high.

17. Limitations, Harms and Trade-Offs

1. Abstraction leaks

Programmers may misunderstand machine costs, numerical limits or concurrency because high-level notation hides implementation.

2. Compiler defects

A translator error can silently alter many programs, concentrating risk in shared infrastructure.

3. Dependency opacity

Modern builds may rely on vast trees of libraries and tools whose provenance is difficult to audit.

4. Vendor lock-in

Proprietary extensions, runtimes and tooling can make supposedly portable source dependent on one ecosystem.

5. Legacy accumulation

Successful languages preserve old systems and constraints for decades, making change expensive.

6. Formalising harmful procedure

A clear, efficient program can implement discriminatory or destructive policy. Better notation does not improve the moral quality of the algorithm.

18. Predecessors, Successors and Relationships

| Relationship | Topic or system | Explanation | |---|---|---| | Predecessor | Punched-card control and data entry Punched-card control and data entry | Provides external program representations and batch submission. | | Predecessor | Electronic digital computers Electronic digital computers | Provides machine architectures and instruction sets to target. | | Predecessor | Formal logic and mathematical notation | Provide structured expression and reasoning systems. | | Successor | Operating systems and software platforms | Coordinate program execution and shared resources. | | Successor | Database management systems Database management systems | Use specialised languages to define and query data. | | Successor | Generative Language Models Generative language models | Can produce and transform source code, adding another mediation layer. | | Neighbour | Interpreters and virtual machines | Offer alternative or hybrid execution paths for formal programs. |

Languages and compilers sit between human procedure and machine architecture. They are neither merely encoding nor merely processing. They constitute a semantic translation institution with standards, implementations and lineage.

19. What Survived

1. Source-target separation

Modern development still distinguishes editable source from generated artefacts.

2. Compiler pipelines

Parsing, intermediate representation, optimisation and code generation remain standard architecture.

3. Libraries and runtimes

Programs depend on reusable support beyond their own source.

4. Language standards

Compatibility and portability still require maintained specifications.

5. Batch compilation and interactive feedback

Both old build queues and immediate development loops persist at different scales.

6. Procedural documents

Source code remains one of the most precise ways humans externalise executable instruction.

20. Representative Cases

20.1 Grace Hopper and A-0

A-0 used symbolic routine references for automatic program preparation on UNIVAC systems. Whether labelled the first compiler depends on the definition, but it is securely an important early automatic programming system [1][2].

20.2 FORTRAN

The IBM FORTRAN project delivered a production language and optimising compiler in 1957. Its adoption demonstrated that high-level source could generate efficient code for expensive machines [4][5][6].

20.3 COBOL

COBOL emerged through institutional collaboration and prioritised business records and relative machine independence. Its longevity illustrates both portability success and legacy dependence [7].

20.4 Frances Allen and optimisation

Allen's compiler research advanced program analysis and optimisation. The case shows that compilation is not simple word replacement but semantic transformation informed by machine architecture [8].

20.5 BCPL and portable systems languages

BCPL influenced later systems-language development and illustrates the value of retargetable compilers and compact language design [9].

21. Research Uncertainty and Open Questions
  • Which criteria should distinguish compiler, assembler and automatic programming system?
  • How should interpreter-first languages be represented within this topic?
  • What evidence best measures actual source portability across early machines?
  • How should compiler trust and formally verified translation be evaluated?
  • Where should operating systems and package ecosystems appear in the register?
  • How should AI-generated source alter authorship and source-target provenance?

First-compiler claims vary because early systems translated formulas, selected library routines, assembled symbolic instructions or generated machine code in different ways. The research notes should preserve a milestone set rather than awarding one crown.

22. Claim Register

|---|---|---|---| | Programming languages and compilers-C01 | A programming language and a compiler are analytically distinct. | High | S01-S09 | | Programming languages and compilers-C02 | Programming languages express procedures in formal human-oriented notation. | High | S01-S09 | | Programming languages and compilers-C03 | Compilers translate source representations into target code or intermediate forms. | High | S01-S09 | | Programming languages and compilers-C04 | Plankalkül was designed in the 1940s but was not then implemented as a production language system. | High | S03 | | Programming languages and compilers-C05 | Grace Hopper's A-0 was an important early automatic programming or compiler-like system. | High | S01-S02 | | Programming languages and compilers-C06 | There is no definition-independent first compiler. | High | S01-S06 | | Programming languages and compilers-C07 | FORTRAN and its optimising compiler were delivered for the IBM 704 in 1957. | High | S04-S06 | | Programming languages and compilers-C08 | Compiler efficiency was central to FORTRAN adoption because machine time was expensive. | High | S04-S06 | | Programming languages and compilers-C09 | COBOL emerged through a multi-institutional standardisation process. | High | S07 | | Programming languages and compilers-C10 | Compiler optimisation and program analysis became specialised disciplines. | High | S08 | | Programming languages and compilers-C11 | Source portability depends on libraries, runtime and target assumptions as well as syntax. | High | Analytical synthesis | | Programming languages and compilers-C12 | Build provenance is part of executable information integrity. | High | Analytical synthesis |

23. Comparative Analysis

| Comparison | Main difference | Analytical value | |---|---|---| | Machine code | Direct processor instructions with minimal abstraction. | Shows the cognitive burden reduced by languages. | | Assembler | Mostly one-to-one symbolic translation. | Clarifies the broader semantic work of high-level compilation. | | Interpreter | Executes or translates incrementally. | Shows alternative program-location and feedback patterns. | | Natural language | Rich and ambiguous rather than formally executable. | Prevents the misleading claim that computers simply understand English-like syntax. | | AI code generator | Produces source from prompts using learned patterns. | Adds a new authoring layer without replacing compiler verification. |

The central comparison is between representation levels. Higher-level source does not remove machine constraints. It moves them behind translators, standards and runtime systems.

28. Final perspective

Programming languages make procedure into a durable, inspectable formal text. Compilers make that text operational on a machine. The distinction is essential. A language can outlive one compiler, and a compiler can support several source or target forms. Their relationship is maintained through specifications, implementations and tests.

This translation layer changed who could program and how much software could be built. Scientists could express formulas. Businesses could describe records and reports. Teams could divide systems into modules and libraries. Yet every gain in abstraction created new dependencies on tools, standards and runtime environments.

The history is therefore not a straight line from incomprehensible machine code to friendly language. It is a growing stack of semantic promises. The source promises a procedure. The compiler promises an equivalent target. The runtime promises an environment. The hardware promises to execute instructions. Trust belongs to the whole chain.

A compiler does not teach the computer human language. It translates one exact formal world into another, and the civilisation built on software depends on that translation being right.

Evidence

Sources and further reading

  1. Computer History Museum, Software and Languages timeline. https://www.computerhistory.org/timeline/software-languages/

    Open source ↗

  2. Smithsonian, Grace Murray Hopper Collection. https://sova.si.edu/record/nmah.ac.0324

    Open source ↗

  3. Smithsonian, Electronic Inventions and A-0. https://americanhistory.si.edu/explore/exhibitions/my-computing-device/online/electronic-inventions

    Open source ↗

  4. IBM, FORTRAN. https://www.ibm.com/history/fortran

    Open source ↗

  5. IBM, John Backus. https://www.ibm.com/history/john-backus

    Open source ↗

  6. Computer History Museum, History of FORTRAN paper. https://softwarepreservation.computerhistory.org/FORTRAN/paper/p25-backus.pdf

    Open source ↗

  7. Computer History Museum, First COBOL compilers. https://archive.computerhistory.org/resources/access/text/2017/10/102639620-05-01-acc.pdf

    Open source ↗

  8. IBM, Frances Allen. https://www.ibm.com/history/frances-allen

    Open source ↗

  9. Computer History Museum, BCPL preservation. https://softwarepreservation.computerhistory.org/BCPL/ Programming languages make procedure into a durable, inspectable formal text. Compilers make that text operational on a machine. The distinction is essential. A language can outlive one compiler, and a compiler can support several source or target forms. Their relationship is maintained through specifications, implementations and tests. This translation layer changed who could program and how much software could be built. Scientists could express formulas. Businesses could describe records and reports. Teams could divide systems into modules and libraries. Yet every gain in abstraction created new dependencies on tools, standards and runtime environments. The history is therefore not a straight line from incomprehensible machine code to friendly language. It is a growing stack of semantic promises. The source promises a procedure. The compiler promises an equivalent target. The runtime promises an environment. The hardware promises to execute instructions. Trust belongs to the whole chain. > **A compiler does not teach the computer human language. It translates one exact formal world into another, and the civilisation built on software depends on that translation being right.**

    Open source ↗