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
Tweet

More Decks by Zach Dennis

Other Decks in Programming

Transcript

  1. Discovering Patterns
    Learning Lunch 2012 Series
    Zach Dennis

    View Slide

  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

    View Slide

  3. Patterns

    View Slide

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

    View Slide

  5. Software Patterns
    low level bit pushing
    high-level concepts and abstractions
    programming languages
    frameworks
    architectural
    UX, IX, IA
    Process
    Domain

    View Slide

  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

    View Slide

  7. Defined
    Intuitive
    Unknown
    3 Categories Of
    Patterns

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  11. Unknown Patterns
    They are present
    But we’re not aware of them
    Waiting to be discovered
    Can have intuition associated with them

    View Slide

  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.

    View Slide

  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

    View Slide

  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

    View Slide

  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)

    View Slide

  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.

    View Slide

  17. Pro-Tip
    Because a pattern exists does not make
    it valuable.
    Even though it may be well defined,
    clearly communicated, and eloquently
    written.

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  21. The Barn Example
    This example is from Christopher Alexander, The Timeless Way Of Building

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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.

    View Slide

  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

    View Slide