discovering patterns

26
Discovering Patterns Learning Lunch 2012 Series Zach Dennis

Upload: zach-dennis

Post on 27-Jun-2015

654 views

Category:

Documents


2 download

DESCRIPTION

This slide-deck is from a learning session given at Mutually Human Software in on February 2nd. It is a brief refresher and re-introduction for the concept of design patterns in the world of software development and what they mean to us as software craftsmen.

TRANSCRIPT

Page 1: Discovering patterns

Discovering Patterns

Learning Lunch 2012 SeriesZach Dennis

Page 2: Discovering patterns

The Purpose Of This Lunch

Re-introduce/refresh patternsSeek out, discover, and expose patternsShare internally, better our teamShare externally, better the world

Page 3: Discovering patterns

Patterns

Page 4: Discovering patterns

Patterns Are Everywhere

Nature Science Man-Made

Art Software

Page 5: Discovering patterns

Software Patterns

low level bit pushing

high-level concepts and abstractions

programming languagesframeworks

architectural

UX, IX, IA

ProcessDomain

Page 6: Discovering patterns

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

Page 7: Discovering patterns

Defined

Intuitive

Unknown

3 Categories Of Patterns

Page 8: Discovering patterns

Defined PatternsIterator

Module

Move Method

MVC

Accordion (UI)

Page 9: Discovering patterns

We can discuss them, debate them,

criticize them, employ them

Page 10: Discovering patterns

Intuitive Patterns

Employ them without knowing itWe feel, sense, know them when they’re presentHard to describe, articulateWork well for the individual

Page 11: Discovering patterns

Unknown PatternsThey are present But we’re not aware of themWaiting to be discoveredCan have intuition associated with them

Page 12: Discovering patterns

Intuition in the UnknownYou 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.

Page 13: Discovering patterns

A Goal As CraftsmenDiscover unknown patternsExpose intuitive patternsDeepen our common language to share solutions to types of problem setsBetter ourselves, our teamsBetter the world

Page 14: Discovering patterns

“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

Page 15: Discovering patterns

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)

Page 16: Discovering patterns

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.

Page 17: Discovering patterns

Pro-Tip

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

Page 18: Discovering patterns

“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

Page 19: Discovering patterns

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

Page 20: Discovering patterns

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

Page 21: Discovering patterns

The Barn Example

This example is from Christopher Alexander, The Timeless Way Of Building

Page 22: Discovering patterns

“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

Page 23: Discovering patterns

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

Page 24: Discovering patterns

Primed and Ready To share patterns To find patternsTo discuss themTo debate themTo criticize themTo better our team And then better the world

Page 25: Discovering patterns

Some common examplesLow 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.

Page 26: Discovering patterns

Open Discussion to:share any already defined patternsdescribe situations of intuitive patternsdescribe situations of unknown patternswe can pull up codewe can draw on the whiteboards