The Value of Values - Summarized

, in Values

Rich Hickey’s The Value Of Values is one of my favorite talks of all time. I highly recommend it, and it took me quite a while to understand all of it. Because I couldn’t find a nice summary on the web, I decided to make my own.

Values can be shared

  • Share freely
    • aliases are free
  • No one can mess you up
    • nor you them
  • Places
    • defensive copy, clone, locks

Reproducible results

  • Operations on values are stable
  • Reproduce failures without replicating state
    • testing
    • debugging
  • Places
    • must establish matching ‘state’ first

Easy to fabricate

  • Anything can create compliant values
    • for testing, simulation
  • Places
    • must emulate operational interface

Thwart imperativeness

  • Values refuse to help you program imperatively
    • that’s a feature
    • imperative code is inherently complex
  • Places
    • encourage and require imperativeness

Language independence

  • Pure values are language independent
    • the polyglot tool
  • Places are defined by language constructs (methods)
    • can be proxied, remoted, with much effort

Values are generic

  • Representations in any language
  • Few fundamental abstractions
    • for aggregation (lists, maps, sets)
  • Places
    • operational interface is specific
    • more code
    • poor reuse

Values are the best interface

  • For subsystems
    • can be moved
    • ported
    • enqueued
  • Places
    • application, language and flow coupled

Values aggregate

  • Values aggregate to values
    • so all benefits accrue to compositions
  • Places
    • combinations of places, what properties?
    • need new operational interface for aggregate