← notes A History of Software

The Art of Doing Science and Engineering

Ch. 4 - A History of Software

The pocket terminal beside an early computing machine.

Thoughts and Structure

  • Amazingly prescient commentary.
  • A lot of controversial takes!
  • Longer chapter, lot of topics highly relevant.

Thoughts and Structure

  • Quotes worth discussing
  • Some commentary on top

A Progression from Binary to Compilers

“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!”

A Progression from Binary to Compilers

“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. There you put in the instruction you just wrote over, added the instructions you wanted to insert, followed by a transfer back to the main program”
  • Monolithic Programs -> Procedures -> Functions
  • Composability as a general catalyst to emergence

A Progression from Binary to Compilers

“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).”
  • Symbolic Addresses -> registers! Stack vars!

A Progression from Binary to Compilers

“One of the main complaints was when using a symbolic system you didn’t know where anything was in storage

Rather than realize they did not need to know that information if they stuck to operating within the system”

A Progression from Binary to Compilers

“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.”

What are some super successful “virtual machines” we know now!

  • Java and the JVM
  • LLVM
  • What else?

So Many VMs

“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.”

What are some super successful “virtual machines” we know now!

  • Java and the JVM
  • LLVM
  • Browsers and the JS Engines
  • Ethereum and the EVM
  • Python and the PyVM!

So Many VMs

Closing the seemingly infinite gap between the language of our thoughts and the language of the machine’s thoughts.

Question: Is the gap between thought and code a limitation of our languages, or of how clearly we know what we want?

So Many VMs

Closing the seemingly infinite gap between the language of our thoughts and the language of the machine’s thoughts.

Question: Is the gap between thought and code a limitation of our languages, or of how clearly we know what we want?

Urge to read Trusting Trust by Ken Thompson

“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.”
The pocket terminal inspects a machine containing a wooden Trojan horse.

So Many VMs

We yearn for standardization.

Uncertainty reduction as a fundamental labor of the human condition.

But not too much right?

Extremums at

(nihilism, anarchy) <==> (loss of individuality, pluribus!)

When does standardization enable individuality, and when does it suppress it?

Blindspots

“Almost everyone who opens up a new field does not really understand it the way the followers do.”

Blindspots

“That a language is easy for the computer expert does not mean it is necessarily easy for the non-expert, and it is likely non-experts will do the bulk of the programming (coding, if you wish) in the near future.”

Question: What languages do you reach for, in areas where

  • You have expertise
  • You have no expertise

Blindspots

“That a language is easy for the computer expert does not mean it is necessarily easy for the non-expert, and it is likely non-experts will do the bulk of the programming (coding, if you wish) in the near future.”

Question: What languages do you reach for, in areas where

  • You have expertise - Go
  • You have no expertise - English!

Ambiguity Begets Creativity

“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!”
  • I think this is a good thing!
  • Relevant - Peter Naur’s Programming as Theory Building

Question: When an AI writes the implementation, where does the discovery of the problem happen?

The pocket terminal draws its next path on an unfinished map.

Slides

    Presentation controls

    → Space
    Next slide
    ←
    Previous slide
    Home End
    First / last slide
    O
    Slide overview
    R
    Reading view
    F
    Fullscreen
    B
    Blank screen / resume
    ?
    These controls

    You control every slide advance. In reading view, all slides are visible. Swipe left or right in presentation view.