📈
wiki
  • Introduction
  • Books
    • Technical books
      • Elements of Programming
    • Psychology books
      • Mindset
  • Computer Science
    • Data Structures
      • Skip Lists
    • Algorithms
      • Hashing
      • Eller's Algorithm
    • Formal verification
      • Coq
      • Lean
      • TLA+
    • Garbage Collection
  • Programming
    • Functional programming
      • Functional data structures
      • Algebraic Effects
      • Dependent Types
        • Agda
        • Idris
      • Continuations
      • Category Theory
      • Total functional programming
      • Uniqueness Typing
      • GADT
      • Tagless Final
    • Concurrent Programming
      • Mutex
      • Semaphores
    • Parallel Programming
    • Systems Programming
      • Tagged pointers
    • Unicode
  • Competitive Programming
  • Source control
    • Git
  • Programming languages
    • Java
      • Java Garbage Collection
      • Java Performance
      • Java Modules
      • Graal
      • Java libraries
        • Spring
          • Spring Cloud
        • Guava
        • JUnit 5
        • Hamcrest
        • Logging
        • Google Auto
        • Lombok
        • JOOQ
        • duct-tape
        • args4j
        • Netty
    • Scala
      • Dotty
      • Specialization
      • Benchmarking Scala
      • Scala libraries
        • ZIO
    • Haskell
      • Haskell tools
        • Haskell tools
    • Lisp
      • Lisp books
    • Rust
      • Rust Async
    • C++
      • C++ libraries
        • Boost
        • Poco
        • Abseil
        • facebook folly
        • Intell TBB
      • C++ tools
        • Valgrind
        • CMake
        • Bazel
      • C++ books
    • C
      • C libraries
      • C books
    • Python
      • Testing
      • Cython
      • Python performance
      • Python libraries
        • requests
        • httpx
        • boto3
      • Python tools
        • pyenv
        • Pipenv
        • mypy
      • Python Cookbook
    • Prolog
      • Prolog Cookbook
    • Clojure
      • Clojure Cookbook
    • Julia
      • Julia libraries
        • DataFrames
  • Networking
    • TCP
    • UDP
    • QUIC
  • Mindfullness
    • Mediatation
      • Samatha
      • Vipassana
    • Flow
  • LLVM
    • Clang tools
  • Operating systems
    • Securing operating systems
      • Capsicum
  • Linux
    • Packaging
    • RPM
    • Deblian
      • Linux tools
    • APT package manager
    • sxhkd
    • playerctl
    • fish
    • w3m browser
      • NixOS
    • Nix package manager
  • macOS
    • macOS tools
      • Hammerspoon
  • Windows
    • Windows tools
      • AutoHotkey
  • CLI
    • tmux
    • screen
    • ripgrep
    • fd
    • bat
    • tldr
    • install
    • chflags
  • Technology
    • Search
      • Google
      • DuckDuckGo
      • Algolia
      • Elastic search
  • Databases
    • MySQL
    • PostgreSQL
    • Oracle
  • Text editors
    • Emacs
      • Emacs plugins
      • Org mode
    • Vim
      • Vim plugins
      • Text objects
    • Sublime Text
  • IDEs
    • IntelliJ IDEA
      • IDEA plugins
        • IdeaVim
  • Philosophy
    • Stoicism
      • Parallels with Buddhism
    • Buddhist philosophy
  • Learning
    • Spaced Repetition
      • Anki
  • History
    • People
      • Benjamin Franklin
  • Buddhism
    • Theravada
      • Dhammapada
      • Eight Worldly Concerns
    • Mahayana
      • Zen
        • Zen Koans
  • Psychology
    • CBT
    • Cognitive biases
  • Logic
    • Classical logic
    • Intuitionistic logic
    • Logical fallacies
  • Literature
    • Western literature
    • Oriental literature
      • Bhagavad Gita
    • Mythology
    • Aphorisms
  • Research
    • Problem solving
    • Questioning
    • Blogs
  • Papers
    • Computer Science
      • Higher-order logic programming in Prolog
      • The Rise of Worse is Better
      • Advantages and Disadvantages of a Monolithic Repository
      • Coccinelle
      • Total Functional Programming
      • Scalable Component Abstractions
    • Psychology
    • Literature
      • Euclid and Pāṇini
  • Courses
    • Computer Science
  • Devops
    • Ansible
    • Puppet
    • TerraForm
  • Life
    • Happiness
    • Journaling
  • Meetups
    • Rust Meetups
      • LDN Talks January, 2020
    • Scala Meetups
      • Scala in the City - January, 2020
    • Papers We Love
      • CREST/PWL Special Event - January, 2020
  • Sports
    • Running
      • Running books
      • Running shoes
    • Chess
      • Chess openings
    • Hiking
      • Outdooraholics
        • Box Hill, Surrey
  • Music
    • Classical
      • Western classical music
      • Indian classical music
    • Popular music
    • Sinhala music
    • Indian music
  • Podcasts
  • Movies
  • TV Series
  • Log
    • 2019 logs
      • September
      • October
      • November
      • December
    • 2020 logs
      • January logs
      • February logs
      • March logs
      • April logs
      • May logs
      • June logs
  • TIL
    • TIL in 2020
      • January
      • February
      • March
      • April
      • May
      • June
      • October
      • November
Powered by GitBook
On this page
  • Notes
  • MIT Approach to Software Development
  • New Jersey approach to Software Develpment
  1. Papers
  2. Computer Science

The Rise of Worse is Better

PreviousHigher-order logic programming in PrologNextAdvantages and Disadvantages of a Monolithic Repository

Last updated 5 years ago

Notes

  • MIT/Standford approach vs the New Jersey approach.

MIT Approach to Software Development

Common Lisp and CLOS had influence from MIT approach which put emphasis on following principles,

  • Simplicity - both interface and implementation must be simple. It is more important that the interface is simple than the implemntation.

  • Correctness - the design must be correct in all observable aspects. Incorrectness is simply not allowed.

  • Consistency - the design must not be inconsistent. The design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness.

  • Completeness - the design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness.

New Jersey approach to Software Develpment

This is characterised by the UNIX and C programming innovations. This is called the worse-is-better appraoch by the author.

  • Simplicity - both interface and implementation must be simple. It is more important that the implementation is to be simple than the interface.

  • Correctness - the design must be correct in all observable aspects. It is slightly better to be simple than correct.

  • Consistency - the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.

  • Completeness - the design must cover as many important situations as is practical. Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.

UNIX and C are descendents of the worse-is-better approach.

  • They are easy to port because implementation is simple.

  • Since they cater to the common use case, they are optimised to run from smallest computers to the largest ones.

  • Author compares the spread of UNIX and C programming to a spread of a virus.

  • Author also compares Common Lisp as an example of a big complex systems scenario with a monolith (static) design and the design of Scheme to a diamond-lie jewel.

  • Author contends that even though C is worse-is-better type of language it is not the right tool for AI software.

The Rise of Worse is Better - Richard P. Gabriel