← notes

Richard Hamming · Chapter 4

A History
of Software

The Art of Doing
Science and Engineering

A small pocket terminal considers an early computing machine.

The chapter

Four threads

  1. 01Binary to abstraction
  2. 02Composition & reuse
  3. 03Language & its limits
  4. 04Programming as an art

Prescient commentary. Controversial takes. Quotes worth discussing.

01 · Abstraction

Absolute binary

“In the beginning we programmed in absolute binary, meaning we wrote the actual address where things were in binary, and wrote the instruction part also in binary!”
The instructionThe addressBoth, by hand.

01 · Abstraction

Patching by detour

“If [you] wanted to insert some omitted instructions, then you took the immediately preceding instruction and replaced it by a transfer to some empty space.”
  1. 01

    Jump outReplace the preceding instruction.

  2. 02

    Run the patchOriginal instruction, then additions.

  3. 03

    Jump backResume the main program.

01 · Abstraction

Symbolic instructions

The programmer writes

ADD

The machine receives

01100101

“Someone got the idea a short piece of program could be written which would read in the symbolic names of the operations (like ADD) and translate them at input time to the binary representations used inside the machine (say 01100101).”

02 · Composition

Composability

Monolithic programs

Procedures

Functions

A small set of simple operations.
Complex behavior through composition.

01 · Abstraction

Virtual machines

“When, and only when, you have a totally virtual machine will you have the ability to transfer software from one machine to another without almost endless trouble and errors.”

Richard Hamming

01 · Abstraction

Which machines
do we program?

What other successful
“virtual machines”
come to mind?

JavaJVM
LLVMIR & toolchain
BrowsersJavaScript engines
EthereumEVM
PythonInterpreter
Operating systemsProcess & syscall interface

Different abstractions. Different portability guarantees.

02 · Composition

Canonical primitives

UNIX's organizing idea

Everything
is a file

“It’s all just
________
(and ________).”

Which set of primitives
do you find elegant?

03 · Language

Thought & code

The language of
our thoughts.
The language of
the machine.

Is the gap a limitation of our languages,
or of how clearly we know what we want?

03 · Language

Trusting
Trust

“To what extent should one trust a statement that a program is free of Trojan horses?”

“Perhaps it is more important to trust the people who wrote the software.”

Ken Thompson · Reflections on Trusting Trust

The pocket terminal examines a machine with a wooden Trojan horse hidden inside.

03 · Language

Standardization
& individuality

We yearn to reduce uncertainty.

Too little structure

Anarchy.
Nothing composes.

Too much structure

Uniformity.
No room to differ.

When does a shared standard enable individuality,
and when does it suppress it?

03 · Language

The expert’s blind spot

“That a language is easy for the computer expert does not mean it is necessarily easy for the non-expert…”

Hamming expected non-experts to do
the bulk of the programming.

03 · Language

What language
do you reach for?

Where you have expertise

Go

Where you have no expertise

English

04 · Discovery

Programming
as discovery

“One trouble with much of programming is simply that often there is not a well-defined job to be done; rather, the programming process itself will gradually discover what the problem is!”

And that can be a good thing.

04 · Discovery

Does the
process still
discover
the problem?

Peter Naur
Programming as Theory Building

The pocket terminal sketches a route while looking out over an unfinished map.

A History of Software

    Presenter notes

    Presentation controls

    → / Space
    Next reveal or slide
    ←
    Previous reveal or slide
    Shift + → / ←
    Skip to next / previous slide
    O
    Slide overview
    N
    Presenter notes and full quotes
    R
    Reading view
    F
    Fullscreen
    B
    Blank screen
    Home / End
    First / last slide

    Reveals wait for you. Swipe on touch screens. Reading view and printing show all answers.