Toolkit for handling complexity in code

I highly recommend the talks linked to below. This is a reminder for myself when I code.

ConstructComplectsSimplicityGet it via...
State Everything that touches it Values final, persistant collections
Objects State, identity, value Values final, persistant collections
Methods Function and state, namespaces Functions, Namespaces a.k.a stateless methods
vars value, time Managed refs Clojure/Haskell refs
Inheritence Types Polymorphism a la carte Protocols, type classes
switch, matching Multiple who/what pairs Polymorphism a la carte Protocols, type classes
Syntax Meaning, order Data Maps, arrays, sets, XML, JSON, etc
Imperative loops, fold what/how Set functions Libraries
Actors what/who Queues Libraries
ORM OMG Declarative data manipulation SQL/LINQ/Datalog
Conditionals why, rest of program Rules Libraries, Prolog
Inconsistency Everything Consistency Transactions, values


simple Having or composed of only one thing, element, or part.
complex A whole composed of interconnected or interwoven parts.
complect To join by weaving or twining together; interweave.