SlideShare a Scribd company logo
1 of 43
Crafting Great Code
Harold Shinsato, Montana Code School, Open Space Institute
BigSkyDevCon June 10, 2017
Overview
Why Bother?
Mastery
 Modern Agile & the Software Craftsmanship Manifesto
 Frontiers of Psychology & Education
Leading Practices
 Test Drive Development, Design Patterns, S.O.L.I.D
Culture
 Team Sport
 Social Tech
Taking it Home
Why Craft Great Code?
Why Bother?
What do you think?
Mastery
Community & Conferences
 Attend, Support, Engage!
Legacy & Modern Agile
We are uncovering
better ways of
developing software
by doing and
helping others do it.
Through this work
we have come to
value …
http://agilemanifesto.org
http://modernagile.org
Software Craftsmanship Manifesto
Raising the bar.
As aspiring Software Craftsmen we are raising the bar of professional software
development by practicing it and helping others learn the craft. Through this
work we have come to value:
 Not only working software,
but also well-crafted software
 Not only responding to change,
but also steadily adding value.
 Not only individuals and interactions,
but also a community of professionals.
 Not only customer collaboration,
but also productive partnerships
That is, in pursuit of the items on the left we have found the items on the right
to be indispensable.
© 2009, the undersigned.this statement may be freely copied in any form,but only in its entirety through this notice.
http://manifesto.softwarecraftsmanship.org
From Dr. Christopher Avery
http://leadershipgift.com
”Flow” – Mihály Csíkszentmihályi
Deliberate Practice
K. Anders Ericsson
Angela Duckworth
Carol Dweck –
Fixed vs. Growth Mindset
Daniel Coyle – Myelin Sheaths
Meta learning & Metacognition
Timothy Ferris – 6 months to mastery -
http://sebastianmarshall.com/community/110017
John Flavel – > 35+ years research
Thinking About Learning = More Learning
“Einstellung”
Paulo Friere – Teaching Peasants
Sharon Bowman – Better Trainings
Leading Practices
Clean Code – “Uncle” Bob Martin
cleancoders.com
Test Driven Development
Write FAILING Test First
Write
Simplest
Code To
Make Test
Pass
Refactor
Refactoring – From Smalltalk
Code Smells
 Duplicate Code (DRY Principle)
 Long Methods and Classes
 Long Parameter Lists
 Comments
Clever Code
“Debugging is twice as hard as writing the code
in the first place. Therefore, if you write the code
as cleverly as possible, you are, by definition, not
smart enough to debug it.”
- Brian Kernigan
Optimizing Code
“We should forget about small efficiencies,
say about 97% of the time: premature
optimization is the root of all evil.”
- Donald Knuth
S.O.L.I.D. Principles
 SRP: Single Responsibility Principle -
Do One Thing Well
 OCP: Open Closed Principle -
Open for Extension/Closed for Modification
 LSP: Liskov Substitution Principle -
Make subclasses usable where the superclass is
 ISP: Interface Segregation Principle –
Separate functionality that might change independently
 DIP: Dependency Inversion Principle –
High level modules independent of lower level with abstractions
Design Patterns
Code Katas & Dojos
“Pragmatic” Dave Thomas -> Martial Arts
 http://codekata.com/kata/codekata-how-it-started/
Coding Dojo inspired by Coding Katas
Randori Technique 2003 Paris Coding Dojo
 http://www.xpdays.de/2005/sessions/The_Coders_Dojo.html
Mob Programming
http://mobprogramming.org
#noestimates #zerobugs
Culture
Team Sport
Lone Wolf
Cowboy Coder
Google’s Project Aristotle
 Harvard Business School Professor - Amy Edmondson
 https://www.nytimes.com/2016/02/28/magazine/what-google-learned-from-its-
quest-to-build-the-perfect-team.html
 180 Team From Across Google
 SUCCESS FACTORS – Team Norms & Culture
 Psychological Safety
 Turn Taking – Overall Equal Participation
Charles Duhigg – “Power of Habit” guy
Social Technology
Jim & Michele McCarthy
Bozo Bit
Check-in Protocol
Ask For Help
Core Protocols
Open Space & Unconferences
Liberating Structures
Lean Coffee™
http://leancoffee.org
Improv!
Conversations
 Non-Violent Communication - Marshall Rosenberg
 Crucial Conversations – Patterson et. al.
 Fierce Conversations – Susan Scott
 Clean Language – David Grove
https://www.infoq.com/interviews/andrea-chiou-clean-language-clean-questions-
agile2014
 Language of Emotions – Karla McClaren
 The Five Love Languages – Gary Chapman
THANKS!
 Slideshare Link To Be Posted to my Blog
 http://shinsato.com
 harold@shinsato.com
Questions?
Comments?

More Related Content

Similar to Crafting Great Code

A Rocket Internet experience @ ForumPHP Paris 2013
A Rocket Internet experience @ ForumPHP Paris 2013A Rocket Internet experience @ ForumPHP Paris 2013
A Rocket Internet experience @ ForumPHP Paris 2013Alessandro Nadalin
 
Software as a craft (February, 2018)
Software as a craft (February, 2018)Software as a craft (February, 2018)
Software as a craft (February, 2018)Rachel M. Carmena
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsChristian Heilmann
 
Recipe of a rockstar developer
Recipe of a rockstar developerRecipe of a rockstar developer
Recipe of a rockstar developerTopu Newaj
 
Developing solid applications
Developing solid applicationsDeveloping solid applications
Developing solid applicationsNilesh Bangar
 
15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript ProgrammingFusionCharts
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressmtoppa
 
Creativity vs Best Practices
Creativity vs Best PracticesCreativity vs Best Practices
Creativity vs Best PracticesSupun Dissanayake
 
Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011Sandro Mancuso
 
CF Camp 2013 Software Craftsmanship for CFML Developers
CF Camp 2013 Software Craftsmanship for CFML DevelopersCF Camp 2013 Software Craftsmanship for CFML Developers
CF Camp 2013 Software Craftsmanship for CFML DevelopersKev McCabe
 
The OO Design Principles
The OO Design PrinciplesThe OO Design Principles
The OO Design PrinciplesSteve Zhang
 
30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbookGabriel Paunescu 🤖
 
Software quality
Software qualitySoftware quality
Software quality5minpause
 
UCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designUCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designsdavis6b
 

Similar to Crafting Great Code (20)

A Rocket Internet experience @ ForumPHP Paris 2013
A Rocket Internet experience @ ForumPHP Paris 2013A Rocket Internet experience @ ForumPHP Paris 2013
A Rocket Internet experience @ ForumPHP Paris 2013
 
ALTNET
ALTNETALTNET
ALTNET
 
Software as a craft (February, 2018)
Software as a craft (February, 2018)Software as a craft (February, 2018)
Software as a craft (February, 2018)
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teams
 
Solid principes
Solid principesSolid principes
Solid principes
 
Orientation session
Orientation sessionOrientation session
Orientation session
 
Recipe of a rockstar developer
Recipe of a rockstar developerRecipe of a rockstar developer
Recipe of a rockstar developer
 
Developing solid applications
Developing solid applicationsDeveloping solid applications
Developing solid applications
 
15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPress
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
Creativity vs Best Practices
Creativity vs Best PracticesCreativity vs Best Practices
Creativity vs Best Practices
 
Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011
 
CF Camp 2013 Software Craftsmanship for CFML Developers
CF Camp 2013 Software Craftsmanship for CFML DevelopersCF Camp 2013 Software Craftsmanship for CFML Developers
CF Camp 2013 Software Craftsmanship for CFML Developers
 
The OO Design Principles
The OO Design PrinciplesThe OO Design Principles
The OO Design Principles
 
Os Long
Os LongOs Long
Os Long
 
30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook
 
DDD In Agile
DDD In Agile   DDD In Agile
DDD In Agile
 
Software quality
Software qualitySoftware quality
Software quality
 
UCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designUCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction design
 

Recently uploaded

What need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersWhat need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersEmilyJiang23
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfICS
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfWSO2
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Henry Schreiner
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Gáspár Nagy
 
IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024vaibhav130304
 
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...Marko Lohert
 
Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdftimtebeek1
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabbereGrabber
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024SimonedeGijt
 
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdfMicrosoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdfQ-Advise
 
INGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by DesignINGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by DesignNeo4j
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesNeo4j
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfMehmet Akar
 
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...CloudMetic
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024MulesoftMunichMeetup
 
Community is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletCommunity is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletAndrea Goulet
 

Recently uploaded (20)

What need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersWhat need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java Developers
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdf
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdf
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024
 
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...
Reinforcement Learning – a Rewards Based Approach to Machine Learning - Marko...
 
Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdf
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
 
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdfMicrosoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
 
INGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by DesignINGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by Design
 
What is an API Development- Definition, Types, Specifications, Documentation.pdf
What is an API Development- Definition, Types, Specifications, Documentation.pdfWhat is an API Development- Definition, Types, Specifications, Documentation.pdf
What is an API Development- Definition, Types, Specifications, Documentation.pdf
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdf
 
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
 
Community is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletCommunity is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea Goulet
 
5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand
 

Crafting Great Code

  • 1. Crafting Great Code Harold Shinsato, Montana Code School, Open Space Institute BigSkyDevCon June 10, 2017
  • 2. Overview Why Bother? Mastery  Modern Agile & the Software Craftsmanship Manifesto  Frontiers of Psychology & Education Leading Practices  Test Drive Development, Design Patterns, S.O.L.I.D Culture  Team Sport  Social Tech Taking it Home
  • 3. Why Craft Great Code? Why Bother? What do you think?
  • 5. Community & Conferences  Attend, Support, Engage!
  • 6. Legacy & Modern Agile We are uncovering better ways of developing software by doing and helping others do it. Through this work we have come to value … http://agilemanifesto.org http://modernagile.org
  • 7. Software Craftsmanship Manifesto Raising the bar. As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:  Not only working software, but also well-crafted software  Not only responding to change, but also steadily adding value.  Not only individuals and interactions, but also a community of professionals.  Not only customer collaboration, but also productive partnerships That is, in pursuit of the items on the left we have found the items on the right to be indispensable. © 2009, the undersigned.this statement may be freely copied in any form,but only in its entirety through this notice. http://manifesto.softwarecraftsmanship.org
  • 8. From Dr. Christopher Avery http://leadershipgift.com
  • 9. ”Flow” – Mihály Csíkszentmihályi
  • 12. Carol Dweck – Fixed vs. Growth Mindset
  • 13. Daniel Coyle – Myelin Sheaths
  • 14.
  • 15. Meta learning & Metacognition Timothy Ferris – 6 months to mastery - http://sebastianmarshall.com/community/110017 John Flavel – > 35+ years research Thinking About Learning = More Learning
  • 17. Paulo Friere – Teaching Peasants
  • 18. Sharon Bowman – Better Trainings
  • 20. Clean Code – “Uncle” Bob Martin cleancoders.com
  • 21. Test Driven Development Write FAILING Test First Write Simplest Code To Make Test Pass Refactor
  • 22. Refactoring – From Smalltalk
  • 23. Code Smells  Duplicate Code (DRY Principle)  Long Methods and Classes  Long Parameter Lists  Comments
  • 24. Clever Code “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” - Brian Kernigan
  • 25. Optimizing Code “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” - Donald Knuth
  • 26. S.O.L.I.D. Principles  SRP: Single Responsibility Principle - Do One Thing Well  OCP: Open Closed Principle - Open for Extension/Closed for Modification  LSP: Liskov Substitution Principle - Make subclasses usable where the superclass is  ISP: Interface Segregation Principle – Separate functionality that might change independently  DIP: Dependency Inversion Principle – High level modules independent of lower level with abstractions
  • 28.
  • 29. Code Katas & Dojos “Pragmatic” Dave Thomas -> Martial Arts  http://codekata.com/kata/codekata-how-it-started/ Coding Dojo inspired by Coding Katas Randori Technique 2003 Paris Coding Dojo  http://www.xpdays.de/2005/sessions/The_Coders_Dojo.html
  • 34. Google’s Project Aristotle  Harvard Business School Professor - Amy Edmondson  https://www.nytimes.com/2016/02/28/magazine/what-google-learned-from-its- quest-to-build-the-perfect-team.html  180 Team From Across Google  SUCCESS FACTORS – Team Norms & Culture  Psychological Safety  Turn Taking – Overall Equal Participation
  • 35. Charles Duhigg – “Power of Habit” guy
  • 37. Jim & Michele McCarthy Bozo Bit Check-in Protocol Ask For Help Core Protocols
  • 38. Open Space & Unconferences
  • 42. Conversations  Non-Violent Communication - Marshall Rosenberg  Crucial Conversations – Patterson et. al.  Fierce Conversations – Susan Scott  Clean Language – David Grove https://www.infoq.com/interviews/andrea-chiou-clean-language-clean-questions- agile2014  Language of Emotions – Karla McClaren  The Five Love Languages – Gary Chapman
  • 43. THANKS!  Slideshare Link To Be Posted to my Blog  http://shinsato.com  harold@shinsato.com Questions? Comments?