I watched Joe Armstrong – Keynote: The Forgotten Ideas in Computer Science – Code BEAM SF 2018. I made the mistake of starting my notes as I went along with the video. If I had have watched the video first I probably wouldn’t have made the notes. Anyway. Sunk cost. Here ’tis.
Two papers to read:
- A Plea for Lean Software by Niklaus Wirth
- The emperor’s old clothes by Tony Hoare
Four old tools to learn:
- emacs (vi)
- bash
- make
- shell
Four really bad things:
- Lack of privacy
- Attempts to manipulate us through social media
- Vendor lock-in
- Terms and conditions
Three great books to read:
- Algorithms + Data Structures = Programs by Niklaus Wirth (PDF)
- The Mythical Man-Month by Fred Brooks (PDF)
- How to Win Friends and Influence People by Dale Carnegie (PDF)
Seven reasons why software is difficult now:
- Fast machines
- Huge memory
- Hundreds of PLs
- Distributed
- Huge programs
- No specifications
- Reuse
One fun programming exercise:
- META II a syntax-oriented compiler writing language (PDF)
8 great machines from the past:
- Baby SSEM
- PDP11
- Vax 11/750
- Cray 1
- IBM PC
- Raspberry Pi
- iPhone/iPad
- Nvidia Tesla P100
3 performance improvements:
- Better algorithms (x6) (Interpreter -> Compiler)
- Better programming language (x50) (Prolog -> C)
- Better hardware (x1000 per 10 years)
5 YouTube videos to watch:
- Alan Kay at OOPSLA 1997 – The computer revolution hasnt happened yet
- Ted Nelson — Computers for Cynics [full version]
- Free is a Lie
- How a handful of tech companies control billions of minds every day | Tristan Harris
- Matt Might – Winning the War on Error Solving the Halting Problem and Curing Cancer
6 things not to do:
- Backdoors
- Violate privacy
- Put microphones in everybody’s houses
- Hijack our attention system
- Hijack our social systems
- Sell crap that we don’t want or need
5 sins:
- Crap documentation
- Crap website
- Crap dependencies
- Crap build instructions
- Group think
4 languages to learn:
- C
- Prolog
- Erlang
- Javascript
4 great forgotten ideas:
- Linda Tuple Spaces – David Gelernter and Nicholas Carriero
- Flow based programming – John Paul Morrison
- Xanadu – Ted Nelson
- Unix pipes
6 areas to research:
- Robotics
- AI
- Programmer productivity
- Energy efficiency
- Precision medicine
- Security
2 dangers:
- Group think
- Bubble think
4 ideas that are obvious now but strange at first:
- Indentation
- Versioning
- Hypertext across machine boundaries
- Pipes
2 fantastic programs to try:
- TiddlyWiki
- Sonic Pi
7 distractions:
- Open plan offices
- The latest stuff
- Twitter/Facebook (social media)
- Notifications (turn ’em off)
- Links (don’t click on them)
- Ban Scrum etc
- We can only do one thing at a time; our brains are terribly bad at context switching
3 general laws:
- Software complexity grows with time (because we build on old stuff)
- Bad code crowds out good (Gresham’s law)
- Bad code contaminates good code
3 laws of physics:
- A computation can only take place when the data and the program are at the same point in spacetime -=> get all the data + program to the same place (can be client or server or someplace in-between) (problem – easy to move data – difficult to move programs) This is why PHP is good :-)
- Causality – Effect follows cause. We don’t know how stuff is we know how it was (the last time it told us)
- 2nd law of thermodynamics – Entropy (disorder) always increases
6 common problems:
- Does not know how to delete files – when the system runs out of space they buy a new computer
- No idea of what MBytes, Mbits, Bits/sec, quad cores, etc means
- If the app doesn’t work immediately gives up
- Does not search for fixes – or does and does not understand the answers
- Does not want to try the latest things
- Uses a method that works (not the best) – e.g. to copy a file open it and then save it with a new name
5 more problems:
- The UI changes
- Passwords
- Stuff doesn’t work
- Terms & Conditions
- non-reproducible errors
Things can be small:
- Forth OS 24KB
- Forth compiler 12KB
- IBM PC DOS < 640KB
- USCD Pascal
- Turbo Pascal
- Turbo C
The old truths:
- Keep it simple
- Make it small
- Make it correct
- Fight complexity
Web is broken:
- It’s not symmetric; users read data but write very little
- Can every page be changed?
- Can I make new data by combining fragments from other data in a flexible manner? No.
- The Web is dominated by a small number of companies (Amazon, Apple, Google, Facebook) using huge data centers, it should be controlled from the edge network.
- The original vision was a Web controlled by “citizen programmers” (Search for Ted Nelson talks)
HTML and HTTP have several problems:
- Non symmetric
- Easy to read/difficult to write
- Pages get lost (disappear)
- Links are wrong (404-problem)
- Re-use, attribution, IP rights, payments is a mess
- Controlled by a very small number of companies