Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Discovering Patterns

Zach Dennis
February 03, 2012

Discovering Patterns

Zach Dennis

February 03, 2012

More Decks by Zach Dennis

Other Decks in Programming


  1. Discovering Patterns Learning Lunch 2012 Series Zach Dennis

  2. The Purpose Of This Lunch Re-introduce/refresh patterns Seek out, discover,

    and expose patterns Share internally, better our team Share externally, better the world
  3. Patterns

  4. Patterns Are Everywhere Nature Science Man-Made Art Software

  5. Software Patterns low level bit pushing high-level concepts and abstractions

    programming languages frameworks architectural UX, IX, IA Process Domain
  6. Even we don’t see them, they exist Even when we

    don’t consciously apply them, we employ them Even when we can’t articulate them, they still have a definition
  7. Defined Intuitive Unknown 3 Categories Of Patterns

  8. Defined Patterns Iterator Module Move Method MVC Accordion (UI)

  9. We can discuss them, debate them, criticize them, employ them

  10. Intuitive Patterns Employ them without knowing it We feel, sense,

    know them when they’re present Hard to describe, articulate Work well for the individual
  11. Unknown Patterns They are present But we’re not aware of

    them Waiting to be discovered Can have intuition associated with them
  12. Intuition in the Unknown You find some code that is

    awesome to work in. You try to share it with someone. You can only describe it as simple, well- factored, intuitive, easy to use, awesome, etc. You don’t know why this code is great, it just is.
  13. A Goal As Craftsmen Discover unknown patterns Expose intuitive patterns

    Deepen our common language to share solutions to types of problem sets Better ourselves, our teams Better the world
  14. “If your language is empty, your buildings cannot be full.

    If your language is poor, you cannot make good buildings until you enrich your language. If your language is rigid, your buildings must be rigid. If your language is florid, your buildings will be florid. Your language generates the buildings which you make, and the buildings live or not, according to the life your language has.” Christopher Alexander, The Timeless Way Of Building
  15. A pattern communicates: intent, context (Brief what/why) problem statement (More

    in-depth what/why/examples) solution statement (How, When, Where) associated visualizations (software visualizations usually suck)
  16. A Simple Definition A pattern is something that recurs, can

    be defined, has a rule which is sufficient for repetition, and provides contextual information about when it may apply.
  17. Pro-Tip Because a pattern exists does not make it valuable.

    Even though it may be well defined, clearly communicated, and eloquently written.
  18. “Pattern languages are a source of beauty and ugliness. The

    depth or banality comes from the pattern languages in the builder’s mind.” Christopher Alexander, The Timeless Way Of Building
  19. Pro-Tip We should never approach building anything by thinking ahead

    that we’re going to use pattern X, Y, and Z. That is disastrous and a mistake of inexperience or misunderstanding
  20. Pro-Tip cont... Patterns arise from paying meticulous attention to function.

    It is function which drives pattern usefulness, utility, and value. There are times we identify patterns ahead of time, but that should only come after understand context and function
  21. The Barn Example This example is from Christopher Alexander, The

    Timeless Way Of Building
  22. “You don’t work out the structural calculations every time you

    do it; once you are persuaded that this is a good way to build floors, you go on doing it that way, until you have some reason to rethink it.” Christopher Alexander, The Timeless Way Of Building
  23. A Useful Pattern Is more than just repetition or ability

    to repeat. It is repetition with utility From paying meticulous attention to function and context
  24. Primed and Ready To share patterns To find patterns To

    discuss them To debate them To criticize them To better our team And then better the world
  25. Some common examples Low level: Iterator, modules, classes, good variable/

    method/class names, well named tests, behavior oriented tests, Side Effect Free functions, Value Objects Mid-level: MVC/MVP/Presenter-First, Responsibility layers, convention of directory structure, Service Patterns, Dumb Client, Data Context & Interaction, etc) High-level: Continuous Integration, Automated Tests, Git Workflow, Pivotal Tracker Workflow, Iterations Super high-level: Product development patterns like Feedback loops Stand-up, Iteration, Milestone/Release, Project Mgmt patterns like Weekly Budget, etc.
  26. Open Discussion to: share any already defined patterns describe situations

    of intuitive patterns describe situations of unknown patterns we can pull up code we can draw on the whiteboards