Four Rules of Simple Design

  1. Passes all the tests.
  2. Expresses every idea that we need to express.
  3. Says everything OnceAndOnlyOnce.
  4. Has no superfluous parts.

Email Guidelines

Sentences:
  1. Context
  2. Sell
  3. Ask

Alan Kay's Guidelines for Building the Future

  1. Really Advance Something Very Important
  2. Visions not goals
  3. Fund people not projects
  4. Only fund the very best people
  5. It's a Research Community, not a research project
  6. Fund Problem Finding - not just Problem Solving
  7. Milestones not deadlines
  8. It's "Baseball" not "Golf"
  9. You can't think inside the Beltway!
  10. It's about shaping "computer stuff" to human ends per the vision
  11. "if you can make your own tools, HW and SW, then you must!"
  12. Software drives the hardware, rather than vice versa
  13. "Living Lab" - make enough of the inventions so that more than the inventors can use them
  14. Argue for clarity, not to win
  15. An important part of the research results are new and better researchers
  16. The reaching is the reward
  17. Better and perfect are the two enemies of WHAT IS ACTUALLY NEEDED!
  18. You miss 100% of the shots you don't take! A good hockey player goes to where the puck is; a great one goes to where the puck will be!
  19. Go out to the future and bring the future back

Mastering Programming

Time
  • Slicing
  • One thing at a time
  • Make it run, make it right, make it fast
  • Easy changes
  • Concentration
  • Isolation
  • Baseline measurement
Learning
  • Call your shot
  • Concrete hpotheses
  • Remove extraneous detail
  • Multiple scales
Transcend Logic
  • Symmetry
  • Aesthetics
  • Rhythm
  • Tradeoffs
Risk
  • Fun list
  • Feed ideas
  • 80/15/5

Simple Made Easy

Abstraction Questions

  • Who - Build from subcomponents that don't rely on each other
  • What - Don't complect with How by jamming an interface with implementation.
  • When, Where - two components should communicate via a queue instead of directly.
  • Why - Business logic
  • How - Do the work
ComplexitySimplicity
State, ObjectsValues
MethodsFunctions, Namespaces
varsManaged refs
Inheritance, switch, matchingPolymorphism a la carte
SyntaxData
Imperative loops, foldSet functions
ActorsQueues
ORMDeclarative data manipulation
ConditionalsRules
InconsistencyConsistency
ConstructComplects
StateEverything that touches it
ObjectsState, identity, value
MethodsFunction and state, namespaces
SyntaxMeaning, order
InheritanceTypes
Switch/matchingMultiple who/what pairs
var(iable)sValue, time
Imperative loops, foldwhat/how
Actorswhat/who
ORMOMG
ConditionalsWhy, rest of program
ConstructGet it via...
Valuesfinal, persistent collections
Functionsa.k.a. stateless methodsd
Namespaceslanguage support
DataMaps, arrays, sets, XML, JSON etc
Polymorphism a la carteProtocols, type classes
Managed refsClojure/Haskell refs
Set functionsLibraries
QueuesLibraries
Declarative data manipulationSQL/LINQ/Datalog
RulesLibraries, Prolog
ConsistencyTransactions, values