Simple Made Easy - retake
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
- Rich Hickey - Author of Clojure
- http://www.infoq.com/presentations/Simple-Made-Easy