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. 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
  2. Software Patterns low level bit pushing high-level concepts and abstractions

    programming languages frameworks architectural UX, IX, IA Process Domain
  3. 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
  4. 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
  5. Unknown Patterns They are present But we’re not aware of

    them Waiting to be discovered Can have intuition associated with them
  6. 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.
  7. 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
  8. “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
  9. 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)
  10. 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.
  11. Pro-Tip Because a pattern exists does not make it valuable.

    Even though it may be well defined, clearly communicated, and eloquently written.
  12. “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
  13. 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
  14. 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
  15. “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
  16. 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
  17. 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
  18. 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.
  19. 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