$30 off During Our Annual Pro Sale. View Details »

Rules

Sandi Metz
September 15, 2013

 Rules

We're iconoclasts who reject arbitrary constraints yet long for
understandable, predictable, changeable applications. We want code that
follows rules yet we refuse to let rules to get in our way. We're
deeply attached to the little rules that help get things done (No
trailing whitespace! Indent using two spaces!) and despise the big,
complicated ones that impose one-size-fits-all straitjackets on
otherwise sane programming problems.

This talk proposes 5 'little' rules for writing object-oriented code.
These rules are determinedly simple yet produce code that experts love
and novices can be trusted to change; they fill the space between
anarchy and order with practical, common sense. The rules guide without
impeding, help without hindering and constrain without binding, and let
you create applications that are easy to change and fun to work their
whole life long.

Sandi Metz

September 15, 2013
Tweet

More Decks by Sandi Metz

Other Decks in Programming

Transcript

  1. @sandimetz Sep 2013
    Sandi Metz
    Rules
    1
    Sunday, September 15, 13

    View Slide

  2. @sandimetz Sep 2013
    taboos
    2
    Sunday, September 15, 13

    View Slide

  3. @sandimetz Sep 2013
    3
    Sunday, September 15, 13

    View Slide

  4. @sandimetz Sep 2013
    laws
    4
    Sunday, September 15, 13

    View Slide

  5. @sandimetz Sep 2013
    5
    Sunday, September 15, 13

    View Slide

  6. @sandimetz Sep 2013
    norms
    6
    Sunday, September 15, 13

    View Slide

  7. @sandimetz Sep 2013
    7
    Sunday, September 15, 13

    View Slide

  8. @sandimetz Sep 2013
    obedience?
    8
    Sunday, September 15, 13

    View Slide

  9. @sandimetz Sep 2013
    1
    self interest
    9
    Sunday, September 15, 13

    View Slide

  10. @sandimetz Sep 2013
    10
    Sunday, September 15, 13

    View Slide

  11. @sandimetz Sep 2013
    2
    identity
    status
    11
    Sunday, September 15, 13

    View Slide

  12. @sandimetz Sep 2013
    12
    Sunday, September 15, 13

    View Slide

  13. @sandimetz Sep 2013
    13
    Sunday, September 15, 13

    View Slide

  14. @sandimetz Sep 2013
    14
    Sunday, September 15, 13

    View Slide

  15. @sandimetz Sep 2013
    15
    Sunday, September 15, 13

    View Slide

  16. @sandimetz Sep 2013
    16
    Sunday, September 15, 13

    View Slide

  17. @sandimetz Sep 2013
    3
    authority
    17
    Sunday, September 15, 13

    View Slide

  18. @sandimetz Sep 2013
    18
    Sunday, September 15, 13

    View Slide

  19. @sandimetz Sep 2013
    19
    Sunday, September 15, 13

    View Slide

  20. @sandimetz Sep 2013
    20
    Sunday, September 15, 13

    View Slide

  21. @sandimetz Sep 2013
    4
    order
    21
    Sunday, September 15, 13

    View Slide

  22. @sandimetz Sep 2013
    22
    Sunday, September 15, 13

    View Slide

  23. @sandimetz Sep 2013
    23
    Sunday, September 15, 13

    View Slide

  24. @sandimetz Sep 2013
    24
    Sunday, September 15, 13

    View Slide

  25. @sandimetz Sep 2013
    5
    social
    sanctions
    25
    Sunday, September 15, 13

    View Slide

  26. @sandimetz Sep 2013
    26
    Sunday, September 15, 13

    View Slide

  27. @sandimetz Sep 2013
    6
    inherent
    sanctions
    27
    Sunday, September 15, 13

    View Slide

  28. @sandimetz Sep 2013
    28
    Sunday, September 15, 13

    View Slide

  29. @sandimetz Sep 2013
    7
    ignorance
    29
    Sunday, September 15, 13

    View Slide

  30. @sandimetz Sep 2013
    30
    Sunday, September 15, 13

    View Slide

  31. @sandimetz Sep 2013
    8
    habit
    31
    Sunday, September 15, 13

    View Slide

  32. @sandimetz Sep 2013
    32
    Sunday, September 15, 13

    View Slide

  33. @sandimetz Sep 2013
    33
    Sunday, September 15, 13

    View Slide

  34. @sandimetz Sep 2013
    34
    Sunday, September 15, 13

    View Slide

  35. @sandimetz Sep 2013
    taboos
    laws
    norms
    35
    Sunday, September 15, 13

    View Slide

  36. @sandimetz Sep 2013
    self interest
    identity/status
    authority
    order
    social sanctions
    inherent sanctions
    ignorance
    habit
    36
    Sunday, September 15, 13

    View Slide

  37. @sandimetz Sep 2013
    5
    Rules
    37
    Sunday, September 15, 13

    View Slide

  38. @sandimetz Sep 2013
    5
    Constraints
    38
    Sunday, September 15, 13

    View Slide

  39. @sandimetz Sep 2013
    100 lines
    per class
    39
    Sunday, September 15, 13

    View Slide

  40. @sandimetz Sep 2013
    5 lines
    per method
    40
    Sunday, September 15, 13

    View Slide

  41. @sandimetz Sep 2013
    4 parameters
    per method
    41
    Sunday, September 15, 13

    View Slide

  42. @sandimetz Sep 2013
    1 instance var
    per rails view
    42
    Sunday, September 15, 13

    View Slide

  43. @sandimetz Sep 2013
    2 class names
    per rails controller action
    43
    Sunday, September 15, 13

    View Slide

  44. @sandimetz Sep 2013
    2 class names
    per rails controller action
    (business, presenter)
    43
    Sunday, September 15, 13

    View Slide

  45. @sandimetz Sep 2013
    44
    Sunday, September 15, 13

    View Slide

  46. @sandimetz Sep 2013
    Dispensation?
    44
    Sunday, September 15, 13

    View Slide

  47. @sandimetz Sep 2013
    Dispensation?
    Convince
    your pair!*
    sdf
    *Rule #6
    44
    Sunday, September 15, 13

    View Slide

  48. @sandimetz Sep 2013
    100 lines per class
       5 lines per method
       4 params per method
       1 ivar per view
       2 class names
    per controller action
    No
    More
    Than
    45
    Sunday, September 15, 13

    View Slide

  49. @sandimetz Sep 2013
    consequences
    46
    Sunday, September 15, 13

    View Slide

  50. @sandimetz Sep 2013
    bias towards
    small objects
    47
    Sunday, September 15, 13

    View Slide

  51. @sandimetz Sep 2013
    bias towards
    POROs
    48
    Sunday, September 15, 13

    View Slide

  52. @sandimetz Sep 2013
    bias away from
    dependencies
    49
    Sunday, September 15, 13

    View Slide

  53. @sandimetz Sep 2013
    rule qualities
    50
    Sunday, September 15, 13

    View Slide

  54. @sandimetz Sep 2013
    arbitrary
    cut-offs
    51
    Sunday, September 15, 13

    View Slide

  55. @sandimetz Sep 2013
    consistent
    goals
    52
    Sunday, September 15, 13

    View Slide

  56. @sandimetz Sep 2013
    tension
    53
    Sunday, September 15, 13

    View Slide

  57. @sandimetz Sep 2013
    objects
    54
    Sunday, September 15, 13

    View Slide

  58. @sandimetz Sep 2013
    objects
    vs
    55
    Sunday, September 15, 13

    View Slide

  59. @sandimetz Sep 2013
    objects
    vs
    procedures
    56
    Sunday, September 15, 13

    View Slide

  60. @sandimetz Sep 2013
    objects
    vs
    procedures
    57
    Sunday, September 15, 13

    View Slide

  61. @sandimetz Sep 2013
    objects
    vs
    procedures
    58
    Sunday, September 15, 13

    View Slide

  62. @sandimetz Sep 2013
    perspective
    59
    Sunday, September 15, 13

    View Slide

  63. @sandimetz Sep 2013
    Rails app
    60
    Sunday, September 15, 13

    View Slide

  64. @sandimetz Sep 2013
    Rails app
    vs
    61
    Sunday, September 15, 13

    View Slide

  65. @sandimetz Sep 2013
    Rails app
    vs
    application
    that
    uses
    Rails
    62
    Sunday, September 15, 13

    View Slide

  66. @sandimetz Sep 2013
    why follow
    rules?
    63
    Sunday, September 15, 13

    View Slide

  67. @sandimetz Sep 2013
    self interest
    64
    Sunday, September 15, 13

    View Slide

  68. @sandimetz Sep 2013
    signal others?
    65
    Sunday, September 15, 13

    View Slide

  69. @sandimetz Sep 2013
    research
    66
    Sunday, September 15, 13

    View Slide

  70. @sandimetz Sep 2013
    Erik O. Kimbrough
    Alexander Vostroknutov
    67
    Sunday, September 15, 13

    View Slide

  71. @sandimetz Sep 2013
    Using Rules to
    Screen for Cooperative Types:
    Rule-Following and Restraint in
    Common Pool Resource Systems
    68
    Sunday, September 15, 13

    View Slide

  72. @sandimetz Sep 2013
    Using Rules to
    Screen for Cooperative Types:
    Rule-Following and Restraint in
    Common Pool Resource Systems
    69
    Sunday, September 15, 13

    View Slide

  73. @sandimetz Sep 2013
    study
    70
    Sunday, September 15, 13

    View Slide

  74. @sandimetz Sep 2013
    study
    part 1
    71
    Sunday, September 15, 13

    View Slide

  75. @sandimetz Sep 2013
    identify
    followers
    vs
    breakers
    72
    Sunday, September 15, 13

    View Slide

  76. @sandimetz Sep 2013
    73
    Sunday, September 15, 13

    View Slide

  77. @sandimetz Sep 2013
    Task: Walk--------->
    73
    Sunday, September 15, 13

    View Slide

  78. @sandimetz Sep 2013
    Task: Walk--------->
    73
    Sunday, September 15, 13

    View Slide

  79. @sandimetz Sep 2013
    Task: Walk--------->
    73
    Sunday, September 15, 13

    View Slide

  80. @sandimetz Sep 2013
    given 8€
    74
    Sunday, September 15, 13

    View Slide

  81. @sandimetz Sep 2013
    lose .08€ per second
    75
    Sunday, September 15, 13

    View Slide

  82. @sandimetz Sep 2013
    red light = 5 seconds
    76
    Sunday, September 15, 13

    View Slide

  83. @sandimetz Sep 2013
    “Wait for green light.”
    77
    Sunday, September 15, 13

    View Slide

  84. @sandimetz Sep 2013
    some folks
    78
    Sunday, September 15, 13

    View Slide

  85. @sandimetz Sep 2013
    79
    Sunday, September 15, 13

    View Slide

  86. @sandimetz Sep 2013
    79
    Sunday, September 15, 13

    View Slide

  87. @sandimetz Sep 2013
    80
    Sunday, September 15, 13

    View Slide

  88. @sandimetz Sep 2013
    80
    Sunday, September 15, 13

    View Slide

  89. @sandimetz Sep 2013
    81
    Sunday, September 15, 13

    View Slide

  90. @sandimetz Sep 2013
    82
    Sunday, September 15, 13

    View Slide

  91. @sandimetz Sep 2013
    82
    Sunday, September 15, 13

    View Slide

  92. @sandimetz Sep 2013
    83
    Sunday, September 15, 13

    View Slide

  93. @sandimetz Sep 2013
    etc...
    83
    Sunday, September 15, 13

    View Slide

  94. @sandimetz Sep 2013
    other folks
    84
    Sunday, September 15, 13

    View Slide

  95. @sandimetz Sep 2013
    85
    Sunday, September 15, 13

    View Slide

  96. @sandimetz Sep 2013
    85
    Sunday, September 15, 13

    View Slide

  97. @sandimetz Sep 2013
    study
    part 2
    86
    Sunday, September 15, 13

    View Slide

  98. @sandimetz Sep 2013
    separate
    into like
    groups
    87
    Sunday, September 15, 13

    View Slide

  99. @sandimetz Sep 2013
    play
    cooperative
    game
    88
    Sunday, September 15, 13

    View Slide

  100. @sandimetz Sep 2013
    89
    Sunday, September 15, 13

    View Slide

  101. @sandimetz Sep 2013
     4 players
    89
    Sunday, September 15, 13

    View Slide

  102. @sandimetz Sep 2013
     4 players
    10 rounds
    89
    Sunday, September 15, 13

    View Slide

  103. @sandimetz Sep 2013
     4 players
    10 rounds
    draw tokens
    89
    Sunday, September 15, 13

    View Slide

  104. @sandimetz Sep 2013
    90
    Sunday, September 15, 13

    View Slide

  105. @sandimetz Sep 2013
    90
    Sunday, September 15, 13

    View Slide

  106. @sandimetz Sep 2013

    90
    Sunday, September 15, 13

    View Slide

  107. @sandimetz Sep 2013
    1
    1
    1
    1

    90
    Sunday, September 15, 13

    View Slide

  108. @sandimetz Sep 2013
    1
    1
    1
    1

    90
    Sunday, September 15, 13

    View Slide

  109. @sandimetz Sep 2013
    1
    1
    1
    1
    360

    90
    Sunday, September 15, 13

    View Slide

  110. @sandimetz Sep 2013
    1
    1
    1
    1
    360
    2

    90
    Sunday, September 15, 13

    View Slide

  111. @sandimetz Sep 2013
    each player draws
    60 tokens
    per round
    91
    Sunday, September 15, 13

    View Slide

  112. @sandimetz Sep 2013
    Round 1
    92
    Sunday, September 15, 13

    View Slide

  113. @sandimetz Sep 2013
    Round 1
    120
    92
    Sunday, September 15, 13

    View Slide

  114. @sandimetz Sep 2013
    120
    Regeneration
    93
    Sunday, September 15, 13

    View Slide

  115. @sandimetz Sep 2013
    120 * .5
    Regeneration
    94
    Sunday, September 15, 13

    View Slide

  116. @sandimetz Sep 2013
    180
    Regeneration
    95
    Sunday, September 15, 13

    View Slide

  117. @sandimetz Sep 2013
    Regeneration
    96
    Sunday, September 15, 13

    View Slide

  118. @sandimetz Sep 2013
    Regeneration
    96
    Sunday, September 15, 13

    View Slide

  119. @sandimetz Sep 2013
    30
    Regeneration
    97
    Sunday, September 15, 13

    View Slide

  120. @sandimetz Sep 2013
    30
    Regeneration
    97
    Sunday, September 15, 13

    View Slide

  121. @sandimetz Sep 2013
    Round 2
    180 remain??
    98
    Sunday, September 15, 13

    View Slide

  122. @sandimetz Sep 2013
    Round 2
    180 - 30 = 150
    99
    Sunday, September 15, 13

    View Slide

  123. @sandimetz Sep 2013
    Round 2
    180 - 30 = 150
    150 / 4 = 37.5
    100
    Sunday, September 15, 13

    View Slide

  124. @sandimetz Sep 2013
    Round 2
    37!
    101
    Sunday, September 15, 13

    View Slide

  125. @sandimetz Sep 2013
    180
    Round 2
    1
    1
    1
    1
    2
    102
    Sunday, September 15, 13

    View Slide

  126. @sandimetz Sep 2013
    Round 2
    103
    Sunday, September 15, 13

    View Slide

  127. @sandimetz Sep 2013
    Round 2
    32
    103
    Sunday, September 15, 13

    View Slide

  128. @sandimetz Sep 2013
    32
    Regeneration
    104
    Sunday, September 15, 13

    View Slide

  129. @sandimetz Sep 2013
    32 * .5
    Regeneration
    105
    Sunday, September 15, 13

    View Slide

  130. @sandimetz Sep 2013
    48
    Regeneration
    106
    Sunday, September 15, 13

    View Slide

  131. @sandimetz Sep 2013
    48
    Regeneration
    Etc...
    106
    Sunday, September 15, 13

    View Slide

  132. @sandimetz Sep 2013
    (current - 30) / 4
    107
    Sunday, September 15, 13

    View Slide

  133. @sandimetz Sep 2013
    results
    108
    Sunday, September 15, 13

    View Slide

  134. @sandimetz Sep 2013
    followers
    109
    Sunday, September 15, 13

    View Slide

  135. @sandimetz Sep 2013
    followers
    cooperate for mutual
    long term gain
    109
    Sunday, September 15, 13

    View Slide

  136. @sandimetz Sep 2013
    breakers
    110
    Sunday, September 15, 13

    View Slide

  137. @sandimetz Sep 2013
    breakers
    throw team under bus
    110
    Sunday, September 15, 13

    View Slide

  138. @sandimetz Sep 2013
    60!
    60!
    60!
    60!
    111
    Sunday, September 15, 13

    View Slide

  139. @sandimetz Sep 2013
    mixed groups
    112
    Sunday, September 15, 13

    View Slide

  140. @sandimetz Sep 2013
    mixed groups
    behave like
    breaker groups
    112
    Sunday, September 15, 13

    View Slide

  141. @sandimetz Sep 2013
    30!
    30!
    30!
    50!
    113
    Sunday, September 15, 13

    View Slide

  142. @sandimetz Sep 2013
    50!
    114
    Sunday, September 15, 13

    View Slide

  143. @sandimetz Sep 2013
    60!
    60!
    60!
    50!
    114
    Sunday, September 15, 13

    View Slide

  144. @sandimetz Sep 2013
    consequences
    (reprise)
    115
    Sunday, September 15, 13

    View Slide

  145. @sandimetz Sep 2013
    bias towards
    small objects
    116
    Sunday, September 15, 13

    View Slide

  146. @sandimetz Sep 2013
    bias towards
    POROs
    117
    Sunday, September 15, 13

    View Slide

  147. @sandimetz Sep 2013
    bias away from
    dependencies
    118
    Sunday, September 15, 13

    View Slide

  148. @sandimetz Sep 2013
    bias towards
    collaboration
    119
    Sunday, September 15, 13

    View Slide

  149. @sandimetz Sep 2013
    bias towards
    collaboration
    119
    Sunday, September 15, 13

    View Slide

  150. @sandimetz Sep 2013
    self interest
    identity/status
    authority
    order
    social sanctions
    inherent sanctions
    ignorance
    habit
    120
    Sunday, September 15, 13

    View Slide

  151. @sandimetz Sep 2013
    9
    signal cooperation
    121
    Sunday, September 15, 13

    View Slide

  152. @sandimetz Sep 2013
    rules matter
    122
    Sunday, September 15, 13

    View Slide

  153. @sandimetz Sep 2013
    write
    better
    software
    123
    Sunday, September 15, 13

    View Slide

  154. @sandimetz Sep 2013
    find
    trustworthy
    humans
    124
    Sunday, September 15, 13

    View Slide

  155. @sandimetz Sep 2013
    Thanks
    125
    Sunday, September 15, 13

    View Slide

  156. @sandimetz Sep 2013
    Credits
    http://www.flickr.com/photos/paul-w-locke/1792803096/ Cannibal Pumpkins
    http://www.flickr.com/photos/john_pp/3155064087/ 100K Speed limit sign on cliff with hiker
    http://www.flickr.com/photos/paphio/272769602/ Cops cheek kissing
    http://www.flickr.com/photos/pixel8-rcrd/5791227393/ kid winning contest
    http://www.flickr.com/photos/fluffy_steve/2537798898/ two goths
    http://www.flickr.com/photos/bobjagendorf/3064198102/ wall street shuffle
    http://www.flickr.com/photos/pdsphil/278060802/ rubyconf room 2006
    http://www.flickr.com/photos/danicuki/6319528505/ konstanin and jose
    http://www.flickr.com/photos/lucasrenan/5142409437/ 3 ruby nerds, 10/26/2010
    http://www.flickr.com/photos/85529750@N00/5200928365/ pope barcelona
    http://www.flickr.com/photos/nathaninsandiego/3783772122/ umpire
    http://www.flickr.com/photos/rrrodrigo/4664885112/ matz
    http://www.flickr.com/photos/85529750@N00/5200928365/ pope barcelona
    http://www.flickr.com/photos/nathaninsandiego/3783772122/ umpire
    http://www.flickr.com/photos/rrrodrigo/4664885112/ matz
    http://www.flickr.com/photos/z_wenjie/7820625836 pansies
    http://www.flickr.com/photos/haikugirl/4813516858/ trees
    http://www.flickr.com/photos/emsef/2407145479/ bus stop queue
    http://www.flickr.com/photos/theretrographer/9228096325/ rows of jail cells brightly lit
    126
    Sunday, September 15, 13

    View Slide

  157. @sandimetz Sep 2013
    Credits
    http://www.flickr.com/photos/jakebouma/102485568/ Car cliff warning
    http://www.flickr.com/photos/burge009/5215723703/ free tatoos
    http://www.flickr.com/photos/singularitysummit/6261754179/ one swarming robot
    http://www.flickr.com/photos/singularitysummit/6262287656/ swarming robots swarming
    http://www.flickr.com/photos/osakasteve/17178084/ swarming robots in a line
    http://en.wikipedia.org/wiki/Social_rule_system_theory
    Kinbrough, Erik O., Vosroknutov, Alexander (2012 draft), Using Rules to Screen for Cooperative
    Types: Rule-Following and Restraint in Common Pool Resource Systems
    127
    Sunday, September 15, 13

    View Slide

  158. http://poodr.com
    Sandi Metz
    @sandimetz
    @sandimetz Sep 2013
    128
    Sunday, September 15, 13

    View Slide

  159. @sandimetz Sep 2013
    Questions?
    129
    Sunday, September 15, 13

    View Slide

  160. http://poodr.com
    Sandi Metz
    @sandimetz
    @sandimetz Sep 2013
    130
    Sunday, September 15, 13

    View Slide