SlideShare a Scribd company logo
Patterns for the People 
Kevlin Henney 
kevlin@curbralan.com 
@KevlinHenney
firmitas 
utilitas 
venustas 
vitruvius
Habitability is the characteristic of source code that enables programmers, coders, bug-fixers, and people coming to the code later in its life to understand its construction and intentions and to change it comfortably and confidently.
Habitability makes a place livable, like home. And this is what we want in software — that developers feel at home, can place their hands on any item without having to think deeply about where it is.
I don't make stupid mistakes. Only very, very clever ones. 
John Peel
http://xkcd.com/612/
Failure is a far better teacher than success. 
Philip Delves Broughton 
http://www.ft.com/cms/s/0/f33f5508-f010-11e0-bc9d-00144feab49a.html
If you want to learn how to build a house, build a house. Don't ask anybody, just build a house. 
Christopher Walken
Programming is difficult business. It should never be undertaken in ignorance. 
Douglas Crockford JavaScript: The Good Parts
It has become commonplace to suggest that failure is good for entrepreneurs. In this view, failure that comes early in a founder's career can teach them important lessons about doing business and harden them up for the next start-up attempt. 
David Storey, "Lessons that are wasted on entrepreneurs"
In the UK, the evidence is that novices are neither more nor less likely to have a business that either grows or survives than experienced founders. In Germany, where much more extensive statistical work has been undertaken, it is clear that those whose business had failed had worse-performing businesses if they restarted than did novices. 
David Storey, "Lessons that are wasted on entrepreneurs"
In short, the assumption that entrepreneurs use the lessons of their own experience to improve their chances of creating a series of profitable businesses is not borne out by the evidence. Success in business remains, as in life, something of a lottery. 
David Storey, "Lessons that are wasted on entrepreneurs"
The assertion that we can learn something from every failure is often heard. This study by Earl Miller and his colleagues Mark Histed and Anitha Pasupathy of the Massachusetts Institute of Technology's Picower Institute for Learning and Memory tests that notion by looking at the learning process at the level of neurons. The study shows how brains learn more effectively from success than from failure. 
http://www.asfct.org/documents/journal/2009-11/Vol1-2-9.pdf
Brain cells keep track of whether recent behaviours were successful or not. When a certain behaviour was successful, cells became more finely tuned to what the animal was learning. After a failure, there was little or no change in the brain – nor was there any improvement in behaviour. http://www.asfct.org/documents/journal/2009-11/Vol1-2-9.pdf
Mark Pagel at the University of Reading, UK, doubts that hominins before Homo sapiens had what it takes to innovate and exchange ideas, even if they wanted to. He draws a comparison with chimps, which can make crude stone tools but lack technological progress. They mostly learn by trial and error, he says, whereas we learn by watching each other, and we know when something is worth copying. 
http://www.newscientist.com/article/mg21328571.400- puzzles-of-evolution-why-was-technological-development-so-slow.html
Anti-patterns don't provide a resolution of forces as patterns do, and they are dangerous as teaching tools: good pedagogy builds on positive examples that students can remember, rather than negative examples. Anti-patterns might be good diagnostic tools to understand system problems. 
James Coplien, Software Patterns
Wise men profit more from fools than fools from wise men; for the wise men shun the mistakes of fools, but fools do not imitate the successes of the wise. 
Cato the Elder
One of the hallmarks of architectural design is the use of idiomatic patterns of system organization. Many of these patterns — or architectural styles — have been developed over the years as system designers recognized the value of specific organizational principles and structures for certain classes of software.
We know that every pattern is an instruction of the general form: 
context  conflicting forces  configuration 
So we say that a pattern is good, whenever we can show that it meets the following two empirical conditions: 
1.The problem is real. This means that we can express the problem as a conflict among forces which really do occur within the stated context, and cannot normally be resolved within that context. This is an empirical question. 
2.The configuration solves the problem. This means that when the stated arrangement of parts is present in the stated context, the conflict can be resolved, without any side effects. This is an empirical question.
Style is the art of getting yourself out of the way, not putting yourself in it. 
David Hare
A pattern is more than just a solution structure, so its audience must also have a sense of the context, the forces, and the consequences that are associated with a solution.
A pattern’s audience is ultimately always human. Although a developer may support application of a software pattern solution through libraries and generators, it is the developer and not the technology that is aware of the pattern.
History rarely happens in the right order or at the right time, but the job of a historian is to make it appear as if it did. 
James Burke
James Siddle 
"Choose Your Own Architecture" – Interactive Pattern Storytelling
Patterns for the People
Patterns for the People

More Related Content

What's hot

AI Fables, Facts and Futures: Threat, Promise or Saviour
AI Fables, Facts and Futures: Threat, Promise or SaviourAI Fables, Facts and Futures: Threat, Promise or Saviour
AI Fables, Facts and Futures: Threat, Promise or Saviour
University of Hertfordshire
 
Sense-making for digital products - UX Lausanne
Sense-making for digital products - UX LausanneSense-making for digital products - UX Lausanne
Sense-making for digital products - UX Lausannejohanna kollmann
 
Making sense of messy problems - Systems thinking for interaction designers
Making sense of messy problems - Systems thinking for interaction designersMaking sense of messy problems - Systems thinking for interaction designers
Making sense of messy problems - Systems thinking for interaction designers
johanna kollmann
 
Rapid video prototyping for connected products
Rapid video prototyping for connected productsRapid video prototyping for connected products
Rapid video prototyping for connected products
Martin Charlier
 
Win#23 it
Win#23 itWin#23 it
Win#23 it
Olivier Marechal
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
Christian Heilmann
 
Impactful SE Research: Some Do's and More Don'ts
Impactful SE Research: Some Do's and More Don'tsImpactful SE Research: Some Do's and More Don'ts
Impactful SE Research: Some Do's and More Don'ts
Gail Murphy
 
How to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael BoltonHow to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael Bolton
TEST Huddle
 
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for WorseADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
TechWell
 
How To Fail In Public (and not get fired)
How To Fail In Public (and not get fired) How To Fail In Public (and not get fired)
How To Fail In Public (and not get fired)
Paul Taylor
 
One hundred rules for nasa project managers
One hundred rules for nasa project managersOne hundred rules for nasa project managers
One hundred rules for nasa project managersAndreea Mocanu
 
5 Things Biology Can Teach Us About Breakthrough Design
5 Things Biology Can Teach Us About Breakthrough Design5 Things Biology Can Teach Us About Breakthrough Design
5 Things Biology Can Teach Us About Breakthrough Design
fresh tilled soil
 
Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
Sex, Drugs and The Infinite Scroll: The biology behind engaging design. Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
fresh tilled soil
 
Getting your work funded
Getting your work fundedGetting your work funded
The Elusive Nature of Context: Why We Need It and Were We Might Find It
The Elusive Nature of Context: Why We Need It and Were We Might Find ItThe Elusive Nature of Context: Why We Need It and Were We Might Find It
The Elusive Nature of Context: Why We Need It and Were We Might Find It
Gail Murphy
 
Why Software Drives Us Crazy
Why Software Drives Us CrazyWhy Software Drives Us Crazy
Why Software Drives Us Crazy
TechWell
 
Customer insights for product strategy
 Customer insights for product strategy Customer insights for product strategy
Customer insights for product strategy
johanna kollmann
 
The Snail Entrepreneur: The 7-year-old kid every startup should learn from
The Snail Entrepreneur: The 7-year-old kid every startup should learn fromThe Snail Entrepreneur: The 7-year-old kid every startup should learn from
The Snail Entrepreneur: The 7-year-old kid every startup should learn from
Claudio Perrone
 
Rochester Creativity Part TWO
Rochester Creativity Part TWORochester Creativity Part TWO
Rochester Creativity Part TWOBrian Housand
 

What's hot (20)

AI Fables, Facts and Futures: Threat, Promise or Saviour
AI Fables, Facts and Futures: Threat, Promise or SaviourAI Fables, Facts and Futures: Threat, Promise or Saviour
AI Fables, Facts and Futures: Threat, Promise or Saviour
 
Sense-making for digital products - UX Lausanne
Sense-making for digital products - UX LausanneSense-making for digital products - UX Lausanne
Sense-making for digital products - UX Lausanne
 
Making sense of messy problems - Systems thinking for interaction designers
Making sense of messy problems - Systems thinking for interaction designersMaking sense of messy problems - Systems thinking for interaction designers
Making sense of messy problems - Systems thinking for interaction designers
 
Rapid video prototyping for connected products
Rapid video prototyping for connected productsRapid video prototyping for connected products
Rapid video prototyping for connected products
 
Win#23 it
Win#23 itWin#23 it
Win#23 it
 
Tech pres
Tech presTech pres
Tech pres
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
 
Impactful SE Research: Some Do's and More Don'ts
Impactful SE Research: Some Do's and More Don'tsImpactful SE Research: Some Do's and More Don'ts
Impactful SE Research: Some Do's and More Don'ts
 
How to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael BoltonHow to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael Bolton
 
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for WorseADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse
 
How To Fail In Public (and not get fired)
How To Fail In Public (and not get fired) How To Fail In Public (and not get fired)
How To Fail In Public (and not get fired)
 
One hundred rules for nasa project managers
One hundred rules for nasa project managersOne hundred rules for nasa project managers
One hundred rules for nasa project managers
 
5 Things Biology Can Teach Us About Breakthrough Design
5 Things Biology Can Teach Us About Breakthrough Design5 Things Biology Can Teach Us About Breakthrough Design
5 Things Biology Can Teach Us About Breakthrough Design
 
Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
Sex, Drugs and The Infinite Scroll: The biology behind engaging design. Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
Sex, Drugs and The Infinite Scroll: The biology behind engaging design.
 
Getting your work funded
Getting your work fundedGetting your work funded
Getting your work funded
 
The Elusive Nature of Context: Why We Need It and Were We Might Find It
The Elusive Nature of Context: Why We Need It and Were We Might Find ItThe Elusive Nature of Context: Why We Need It and Were We Might Find It
The Elusive Nature of Context: Why We Need It and Were We Might Find It
 
Why Software Drives Us Crazy
Why Software Drives Us CrazyWhy Software Drives Us Crazy
Why Software Drives Us Crazy
 
Customer insights for product strategy
 Customer insights for product strategy Customer insights for product strategy
Customer insights for product strategy
 
The Snail Entrepreneur: The 7-year-old kid every startup should learn from
The Snail Entrepreneur: The 7-year-old kid every startup should learn fromThe Snail Entrepreneur: The 7-year-old kid every startup should learn from
The Snail Entrepreneur: The 7-year-old kid every startup should learn from
 
Rochester Creativity Part TWO
Rochester Creativity Part TWORochester Creativity Part TWO
Rochester Creativity Part TWO
 

Viewers also liked

Patterns for the People
Patterns for the PeoplePatterns for the People
Patterns for the People
Kevlin Henney
 
KevlinHenney_PuttingThereIntoArchitecture
KevlinHenney_PuttingThereIntoArchitectureKevlinHenney_PuttingThereIntoArchitecture
KevlinHenney_PuttingThereIntoArchitectureKostas Mavridis
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Kevlin Henney
 
The Architecture of Uncertainty
The Architecture of UncertaintyThe Architecture of Uncertainty
The Architecture of Uncertainty
Kevlin Henney
 
Put to the Test
Put to the TestPut to the Test
Put to the Test
Kevlin Henney
 
The Error of Our Ways
The Error of Our WaysThe Error of Our Ways
The Error of Our Ways
Kevlin Henney
 

Viewers also liked (6)

Patterns for the People
Patterns for the PeoplePatterns for the People
Patterns for the People
 
KevlinHenney_PuttingThereIntoArchitecture
KevlinHenney_PuttingThereIntoArchitectureKevlinHenney_PuttingThereIntoArchitecture
KevlinHenney_PuttingThereIntoArchitecture
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
 
The Architecture of Uncertainty
The Architecture of UncertaintyThe Architecture of Uncertainty
The Architecture of Uncertainty
 
Put to the Test
Put to the TestPut to the Test
Put to the Test
 
The Error of Our Ways
The Error of Our WaysThe Error of Our Ways
The Error of Our Ways
 

Similar to Patterns for the People

Patterns for the People
Patterns for the PeoplePatterns for the People
Patterns for the People
Kevlin Henney
 
Incentives to Encourage Sharing Ideas
Incentives to Encourage Sharing IdeasIncentives to Encourage Sharing Ideas
Incentives to Encourage Sharing IdeasArne Krueger
 
Patterns of fail
Patterns of failPatterns of fail
Patterns of fail
Gleicon Moraes
 
The innovator’s dna
The innovator’s dnaThe innovator’s dna
The innovator’s dna
Vahid Shamekhi
 
Writing A Research Essay.pdf
Writing A Research Essay.pdfWriting A Research Essay.pdf
Writing A Research Essay.pdf
Christina Morgan
 
Mktg. 7 chapter 4
Mktg. 7 chapter 4Mktg. 7 chapter 4
Mktg. 7 chapter 4
Scarlett Voughn
 
Facilitating Complexity: A Pervert's Guide to Exploration
Facilitating Complexity: A Pervert's Guide to ExplorationFacilitating Complexity: A Pervert's Guide to Exploration
Facilitating Complexity: A Pervert's Guide to Exploration
William Evans
 
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
Caxton College
 
Broken Worldview of Experience Design
Broken Worldview of Experience DesignBroken Worldview of Experience Design
Broken Worldview of Experience Design
Thomas Wendt
 
The Convergence of Wills
The Convergence of WillsThe Convergence of Wills
The Convergence of Wills
Beyond20
 
Agile leadership practices for PIONEERS
 Agile leadership practices for PIONEERS Agile leadership practices for PIONEERS
Agile leadership practices for PIONEERS
Stefan Haas
 
Brisbane City Council Future Thinking Presentation May 2009
Brisbane City Council Future Thinking Presentation May 2009Brisbane City Council Future Thinking Presentation May 2009
Brisbane City Council Future Thinking Presentation May 2009
Paul Higgins
 
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
CS, NcState
 
#1NWebinar: Digital on the Runway
#1NWebinar: Digital on the Runway#1NWebinar: Digital on the Runway
#1NWebinar: Digital on the Runway
One North
 
Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0
Cameron Aaron
 
Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0Cameron Aaron
 
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
lorainedeserre
 
Interview Essay Sample
Interview Essay SampleInterview Essay Sample
Interview Essay Sample
Shelly Lane
 
Keynote ASAS 2014 Jim Coplien - The child within
Keynote ASAS 2014 Jim Coplien - The child withinKeynote ASAS 2014 Jim Coplien - The child within
Keynote ASAS 2014 Jim Coplien - The child within
Avisi B.V.
 

Similar to Patterns for the People (20)

Patterns for the People
Patterns for the PeoplePatterns for the People
Patterns for the People
 
Incentives to Encourage Sharing Ideas
Incentives to Encourage Sharing IdeasIncentives to Encourage Sharing Ideas
Incentives to Encourage Sharing Ideas
 
Patterns of fail
Patterns of failPatterns of fail
Patterns of fail
 
The innovator’s dna
The innovator’s dnaThe innovator’s dna
The innovator’s dna
 
Writing A Research Essay.pdf
Writing A Research Essay.pdfWriting A Research Essay.pdf
Writing A Research Essay.pdf
 
Mktg. 7 chapter 4
Mktg. 7 chapter 4Mktg. 7 chapter 4
Mktg. 7 chapter 4
 
Facilitating Complexity: A Pervert's Guide to Exploration
Facilitating Complexity: A Pervert's Guide to ExplorationFacilitating Complexity: A Pervert's Guide to Exploration
Facilitating Complexity: A Pervert's Guide to Exploration
 
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
Not revolution but evolution. By Bernard Andrews and Ahmed Robleh. Caxton Col...
 
Broken Worldview of Experience Design
Broken Worldview of Experience DesignBroken Worldview of Experience Design
Broken Worldview of Experience Design
 
The Convergence of Wills
The Convergence of WillsThe Convergence of Wills
The Convergence of Wills
 
Agile leadership practices for PIONEERS
 Agile leadership practices for PIONEERS Agile leadership practices for PIONEERS
Agile leadership practices for PIONEERS
 
Brisbane City Council Future Thinking Presentation May 2009
Brisbane City Council Future Thinking Presentation May 2009Brisbane City Council Future Thinking Presentation May 2009
Brisbane City Council Future Thinking Presentation May 2009
 
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
PROMISE 2011: Seven Habits of High Impactful Empirical Software Engineers (La...
 
Module2
Module2Module2
Module2
 
#1NWebinar: Digital on the Runway
#1NWebinar: Digital on the Runway#1NWebinar: Digital on the Runway
#1NWebinar: Digital on the Runway
 
Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0
 
Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0Machine creativity TED Talk 2.0
Machine creativity TED Talk 2.0
 
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
2820181Phil 2 Puzzles and ParadoxesProf. Sven B.docx
 
Interview Essay Sample
Interview Essay SampleInterview Essay Sample
Interview Essay Sample
 
Keynote ASAS 2014 Jim Coplien - The child within
Keynote ASAS 2014 Jim Coplien - The child withinKeynote ASAS 2014 Jim Coplien - The child within
Keynote ASAS 2014 Jim Coplien - The child within
 

More from Kevlin Henney

Program with GUTs
Program with GUTsProgram with GUTs
Program with GUTs
Kevlin Henney
 
The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical Excellence
Kevlin Henney
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical Development
Kevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
Kevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
Kevlin Henney
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid Deconstruction
Kevlin Henney
 
Get Kata
Get KataGet Kata
Get Kata
Kevlin Henney
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went Away
Kevlin Henney
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test Cases
Kevlin Henney
 
Agility ≠ Speed
Agility ≠ SpeedAgility ≠ Speed
Agility ≠ Speed
Kevlin Henney
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
Kevlin Henney
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
Kevlin Henney
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-In
Kevlin Henney
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good Name
Kevlin Henney
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Kevlin Henney
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation Quadrant
Kevlin Henney
 
Code as Risk
Code as RiskCode as Risk
Code as Risk
Kevlin Henney
 
Software Is Details
Software Is DetailsSoftware Is Details
Software Is Details
Kevlin Henney
 
Game of Sprints
Game of SprintsGame of Sprints
Game of Sprints
Kevlin Henney
 
Good Code
Good CodeGood Code
Good Code
Kevlin Henney
 

More from Kevlin Henney (20)

Program with GUTs
Program with GUTsProgram with GUTs
Program with GUTs
 
The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical Excellence
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical Development
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid Deconstruction
 
Get Kata
Get KataGet Kata
Get Kata
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went Away
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test Cases
 
Agility ≠ Speed
Agility ≠ SpeedAgility ≠ Speed
Agility ≠ Speed
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-In
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good Name
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation Quadrant
 
Code as Risk
Code as RiskCode as Risk
Code as Risk
 
Software Is Details
Software Is DetailsSoftware Is Details
Software Is Details
 
Game of Sprints
Game of SprintsGame of Sprints
Game of Sprints
 
Good Code
Good CodeGood Code
Good Code
 

Recently uploaded

openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
QuickwayInfoSystems3
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 

Recently uploaded (20)

openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 

Patterns for the People

  • 1. Patterns for the People Kevlin Henney kevlin@curbralan.com @KevlinHenney
  • 2.
  • 4.
  • 5. Habitability is the characteristic of source code that enables programmers, coders, bug-fixers, and people coming to the code later in its life to understand its construction and intentions and to change it comfortably and confidently.
  • 6. Habitability makes a place livable, like home. And this is what we want in software — that developers feel at home, can place their hands on any item without having to think deeply about where it is.
  • 7.
  • 8. I don't make stupid mistakes. Only very, very clever ones. John Peel
  • 10. Failure is a far better teacher than success. Philip Delves Broughton http://www.ft.com/cms/s/0/f33f5508-f010-11e0-bc9d-00144feab49a.html
  • 11. If you want to learn how to build a house, build a house. Don't ask anybody, just build a house. Christopher Walken
  • 12.
  • 13. Programming is difficult business. It should never be undertaken in ignorance. Douglas Crockford JavaScript: The Good Parts
  • 14. It has become commonplace to suggest that failure is good for entrepreneurs. In this view, failure that comes early in a founder's career can teach them important lessons about doing business and harden them up for the next start-up attempt. David Storey, "Lessons that are wasted on entrepreneurs"
  • 15. In the UK, the evidence is that novices are neither more nor less likely to have a business that either grows or survives than experienced founders. In Germany, where much more extensive statistical work has been undertaken, it is clear that those whose business had failed had worse-performing businesses if they restarted than did novices. David Storey, "Lessons that are wasted on entrepreneurs"
  • 16. In short, the assumption that entrepreneurs use the lessons of their own experience to improve their chances of creating a series of profitable businesses is not borne out by the evidence. Success in business remains, as in life, something of a lottery. David Storey, "Lessons that are wasted on entrepreneurs"
  • 17. The assertion that we can learn something from every failure is often heard. This study by Earl Miller and his colleagues Mark Histed and Anitha Pasupathy of the Massachusetts Institute of Technology's Picower Institute for Learning and Memory tests that notion by looking at the learning process at the level of neurons. The study shows how brains learn more effectively from success than from failure. http://www.asfct.org/documents/journal/2009-11/Vol1-2-9.pdf
  • 18. Brain cells keep track of whether recent behaviours were successful or not. When a certain behaviour was successful, cells became more finely tuned to what the animal was learning. After a failure, there was little or no change in the brain – nor was there any improvement in behaviour. http://www.asfct.org/documents/journal/2009-11/Vol1-2-9.pdf
  • 19. Mark Pagel at the University of Reading, UK, doubts that hominins before Homo sapiens had what it takes to innovate and exchange ideas, even if they wanted to. He draws a comparison with chimps, which can make crude stone tools but lack technological progress. They mostly learn by trial and error, he says, whereas we learn by watching each other, and we know when something is worth copying. http://www.newscientist.com/article/mg21328571.400- puzzles-of-evolution-why-was-technological-development-so-slow.html
  • 20. Anti-patterns don't provide a resolution of forces as patterns do, and they are dangerous as teaching tools: good pedagogy builds on positive examples that students can remember, rather than negative examples. Anti-patterns might be good diagnostic tools to understand system problems. James Coplien, Software Patterns
  • 21. Wise men profit more from fools than fools from wise men; for the wise men shun the mistakes of fools, but fools do not imitate the successes of the wise. Cato the Elder
  • 22. One of the hallmarks of architectural design is the use of idiomatic patterns of system organization. Many of these patterns — or architectural styles — have been developed over the years as system designers recognized the value of specific organizational principles and structures for certain classes of software.
  • 23.
  • 24. We know that every pattern is an instruction of the general form: context  conflicting forces  configuration So we say that a pattern is good, whenever we can show that it meets the following two empirical conditions: 1.The problem is real. This means that we can express the problem as a conflict among forces which really do occur within the stated context, and cannot normally be resolved within that context. This is an empirical question. 2.The configuration solves the problem. This means that when the stated arrangement of parts is present in the stated context, the conflict can be resolved, without any side effects. This is an empirical question.
  • 25.
  • 26.
  • 27. Style is the art of getting yourself out of the way, not putting yourself in it. David Hare
  • 28. A pattern is more than just a solution structure, so its audience must also have a sense of the context, the forces, and the consequences that are associated with a solution.
  • 29. A pattern’s audience is ultimately always human. Although a developer may support application of a software pattern solution through libraries and generators, it is the developer and not the technology that is aware of the pattern.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. History rarely happens in the right order or at the right time, but the job of a historian is to make it appear as if it did. James Burke
  • 35.
  • 36.
  • 37. James Siddle "Choose Your Own Architecture" – Interactive Pattern Storytelling