Simple

  • only one
  • one idea/concept
  • one thread of idea - no interleaving
  • objective

Easy

  • nearness, immediately available
  • toolkits, experience, languages
  • subjective
  • near to our understanding,

Construct Vs Artifact

  • experience of use of construct
  • constructs are pieces
  • artifact is final output

  • definition of artifact: “Something viewed as a product of human conception or agency rather than an inherent element”

  • focusing more on the construct - easy to type, programmer convinience
  • artifact - correctness, quality, maintenance

  • focusing more on constructs rather than on artifact

  • We must assess constructs by their artifacts.

Limits

  • only good understanding -> reliable products/work
  • only few things at a time
  • interwined things must be considered together
  • complexity weakens(undermine) the understanding

Change

  • Agile and XP - BAD !
  • requires analysis and decisions
  • ability to reason about the program - changing without fear

Debugging

  • passed the type checker
  • passed the tests
  • its like driving by hitting guard rails
  • reasoning is important

Development Speed

  • ease gives - early speed
  • ignorning complexity will slow you down over the long haul

Easy yet complex

  • complicating constructs are
    • easily described
    • familiar
    • available
    • easy to use
  • What matters is the complexity they yield
    • any such complexity is incidental
  • Benefits of simplicity

  • Ease of understanding
  • Ease of change
  • Easier debugging
  • Flexibility
    • policy
    • location etc

Making things Easy

  • make things near(easy) by simplifying

Toolkit

Complexity

  • State, Objects
  • Methods
  • vars
  • Inheritance, switch, pattern match
  • Syntax
  • Imperative loops, fold
  • Actors
  • ORM
  • Conditionals
  • Inconsistency

Simplicity

  • Values
  • Functions, Namespaces
  • Managed refs
  • Polymorphism a la carte
  • Data
  • Set functions
  • Queues
  • Declarative data manipulation
  • Rules
  • Consistency

Compose

Complect - Complexity

Modulariy and Simplicity

State is Never Simple

  • it is easy
  • complects value and time

Not all refs/vars are Equal

  • None make state simple
  • Clojure and Haskell refs compose value and time
    • Allow you to extract a simple value
    • Provide abstractions of time

The complecity tool kit

  • State
    • Everything that touches it
  • Objects
    • State, Identity, value
  • Methods
    • Function and state, namespaces
  • Syntax
    • Meaning, order
  • Inheritance
    • Types
  • Switch/matching
    • Multiple who/what pairs
  • variables
    • Value, time
  • imperative loops,fold
    • what/how
  • Actors
    • what/who
  • ORM
    • OMG
  • Conditionals
    • Why, rest of program

The simplicity toolkit

  • Values
    • final, persisten collections
  • Functions
    • a.k.a stateless methods
  • Namespaces
    • language support
  • Data
    • maps, sets, arrays, xml, json etc
  • Polymorphism
    • clojure protocols, type classes
  • Set functions
    • libraries
  • Queues
    • libraries
  • Declarative data manipulation
    • SQL/LINQ/Datalog
  • Rules
    • Libraries, prolog
  • Consistency
    • Transactions, values

Abstraction for Simplicity

  • Abstract
    • drawn away
  • vs Abstraction as complexity hiding

What

  • Operations

  • Form abstractions from related sets of functions
    • small sets
  • Don’t complect with: How

Use data as data

  • Don’t wrap it up in a class etc.

Simplicity is a Choice

  • Requires vigilance, sensibilities and care
  • relating simplicity with ease is wrong!
  • simlicity is only one thing - NO entanglement
  • relying on testing, refactoring, type systems - are peripheral to producing good software

Simplicity Made Easy

  • Choose simple constructs over complexity-generating constructs
    • It is the artifacts not the authoring
  • creating abstracts with simplicity as a basis
  • simplify the problem space before you start
  • simplicity often means making more things, not fewer

Talk - URL

Simplicity is the ultimate sophistication - Leonardo Da Vinci