Notes from The Forgotten Ideas in Computer Science

Jeremy pointed out a video that Joe Armstrong gave a talk at Code Beam SF. It has a bunch of useful and thought-provoking things that will hopefully be a source for future posts.

Source tweets:

I’m interested in the forgotten ideas of computer science. Needed for a talk.

Can you post examples of great CS ideas that have been largely forgotten.

Examples: Linda tuple spaces, Boyer-Moore algorithm


Also interested in really silly ideas in Computer Science.

These are ideas that were thought to be good at the time but which turned out to be daft.

Which ideas of today will people in 20 years time say “well that was a really stupid idea”

Computer Science things

Papers to read

Old tools to learn

  • emacs
  • bash
  • make
  • shell

Four bad things

  • vendor lock-in
  • lack of privacy
  • social media manipulation
  • terms and conditions

Three books

  • Algorithms + Data Structures = Programs
  • Mythical Man Months
  • How to Win Friends

One fun programming exercise

Eight great machines from the past

  • Baby SSEM
  • PDP 11
  • Vax 11/750
  • Cray 1
  • IBM PC
  • RPi
  • iPhone/iPad
  • nvidia tesla p100

Three performance improvements

  • better algorithms
  • better programming languages (example given was prolog -> C)
  • better hardware

Five videos to watch

Five sins

  • crap docs
  • crap website
  • crap deps
  • crap build instructions
  • group think

Four forgotten ideas

  • Linda tuple spaces
  • flow-based programming
  • xanadu
  • unix pipes (killed by guis)

Six research fields

  • robotics
  • AI
  • programmer productivity
  • energy efficiency
  • precision medicine
  • security

Two dangers

  • group think
  • bubble think

Four ideas that are obvious now but strange at first

  • indentation
  • versioning
  • hypertext across machine boundaries
  • pipes

Two programs to try

  • tiddlywiki
  • sonicpi

Not computer science things

Learn to write

Three rules at work

  • if you get a bad boss, move immediately
  • the relationship comes first (Jane Walerud)
  • engage with management

Seven distractions

  • open plan offices
  • the latest stuff
  • social media
  • notifications
  • links (don't click them)
  • ban scrum, etc...
  • one thing at a time

Six ways to get your boss to \$THING

  • do things that gain trust
  • tell success stories
  • reduce fear of failure
  • introduce on a small scale
  • network with \$THING folks
  • make a prototype at home

One thing to look at when applying for a new job

  • balance sheet: positive cash flow. companies with a negative cash flow won't innovate and are terrible to work for

Three general laws

  • software complexity grows with time
  • bad code crowds out good (gresham's law), bad money drives out good (clipping)
  • bad code contaminates good code

Laws of physics and maths

  • a computation can only occur when data and the program are at the same point in space-time
  • causality: effect follows cause; we don't how stuff is, we know how it was
  • 2nd law of thermodynamics: entropy always increases
  • git keeps all versions: increases entropy, cancer

Half forgotten BIG ideas in CS

Things can be small

  • Forth OS: 24kB
  • Forth compiler: 12kB
  • IBM PC DOS: < 640kB
  • USCD Pascal
  • Turbo Pascal
  • Turbo C

Four old truths

  • keep it simple
  • keep it small
  • make it correct
  • fight complexity

The web is broken

  • asymmetric: users read a lot but write little
  • can every page be changed?
  • can't make data by combining fragments from other data in a flexible manner
  • web is controlled by a few huge companies using huge data centres
  • original vision was a web controlled by citizen programmers

HTTP/HTML are broken

  • easy to read, hard to write
  • pages disappear
  • asymmetric
  • links are wrong
  • reuse, IP, attribution, payments are a mess
  • controlled by small number of companies


  • kind of work
  • links can't be lost
  • all in one place


  • like the web but better
  • no broken links
  • no difference between reading and writing
  • data could be reused
  • never lose data
  • copyright/attribution correctly handled
  • complete knowledge of parents/children

unbreak the web

  • make it symmetric: easy to both read and write
  • bring computation back to the edge
  • personal data personally owned
  • make computing easy again
  • build apps for intercommunicability

Parting thoughts

  • "a program that is not secure and cannot be remotely controlled should not be written"
  • "we've given millions of people supercomputers - so let them use them and ... it's your turn next"

Tags: ,