clean code part iii - craftsmanship at socal code camp
DESCRIPTION
When building a house, good architecture and craftsmanship together form the needed crucial elements for success. The same pattern applies to software development. As the previous sessions focused on the architectural part of software development, this session will strongly focus on often forgotten but very important areas of coding. You will learn why naming is really difficult if done right, why coding and style guidelines are crucial, code structuring, exception handling and why other elements of coding often define the tipping point between success and failure of projects. Following the principles of software craftsmanship will allow you to end up with better maintainability and extensibility of your software and the success of the project in the end. All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. Why writing Clean Code makes us more efficient Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs. Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way. You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained. This presentation is based on C# and Visual Studio 2010. However, the demonstrated patterns and practice can be applied to every other programming language too.TRANSCRIPT
![Page 1: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/1.jpg)
Clean Code IIISoftware
CraftsmanshipSan Diego, June 24rd 2012
SolCalCodeCamp
![Page 2: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/2.jpg)
Theo Jungeblut• Senior Software Developer at
AppDynamics in San Francisco
• architects decoupled solutions tailored to business needs and crafts maintainable code to last
• worked in healthcare and factory automation, building mission critical applications, framework & platforms for 8+ years
• degree in Software Engineeringand Network Communications
• enjoys cycling, running and [email protected]
www.designitright.net www.speakerrate.com/theoj
![Page 3: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/3.jpg)
Overview• Why Clean Code?• The Power of Simplicity• Tools - Your Best Friend• From Names to Classes• The "Must Read"-Books• Summary• Q&A
![Page 4: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/4.jpg)
Does writing Clean Code make us more efficient?
![Page 5: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/5.jpg)
![Page 6: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/6.jpg)
What is Clean Code?
![Page 7: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/7.jpg)
Clean Code is maintainable
Source code must be:• readable & well structured• extensible• testable
![Page 8: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/8.jpg)
Software Engineering
vs. Craftsmanship
![Page 9: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/9.jpg)
Software Engineering
ANDCraftsmanship
![Page 10: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/10.jpg)
The “Must Read”-Book(s)by Robert C Martin
A Handbook of Agile Software Craftsmanship
“Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees.”
![Page 11: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/11.jpg)
Code Maintainability *
Principles Patterns Containers
Why? How? What?
Extensibility Clean Code Tool reuse
* from: Mark Seemann’s “Dependency Injection in .NET” presentation Bay.NET 05/2011
![Page 12: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/12.jpg)
Keep it simple, stupid(KISS)
![Page 13: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/13.jpg)
KISS-Principle – “Keep It Simple Stupid”
http://blogs.smarter.com/blogs/Lego%20Brick.jpg
by Kelly Johnson
![Page 14: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/14.jpg)
The Power of Simplicity
http://www.geekalerts.com/lego-iphone/
Graphic by Nathan Sawaya courtesy of brickartist.com
Graphic by Nathan Sawaya courtesy of brickartist.com
![Page 15: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/15.jpg)
Graphic by Nathan Sawaya courtesy of brickartist.com
![Page 16: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/16.jpg)
Source Code Conventions
![Page 17: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/17.jpg)
.NET Tools and their ImpactTool name Positive Impact Negative Impact
Resharper compiling ++++ VS responsiveness --
FxCop code quality ++ compiling time -
StyleCop code consistency +++ compiling time -
StyleCop plugin for Resharper
compiling time +++ VS responsiveness --
Ghost Doc automated docs potentially worse doc
Spell Checker fewer spelling errors ++ performance --
Code Contracts testability, quality ++ compiling time --
Pex & Moles automated test ++ compiling time --
![Page 18: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/18.jpg)
Resharper
Features:– Code Analysis – Quick Fixes– Code Templates – Code Generation– Code Cleanup– Many, many more…
“The single most impacting development addition to Visual Studio”
http://www.jetbrains.com/resharper/
![Page 19: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/19.jpg)
FxCop / Static Code AnalysisCode Analysis:– Correctness– Library design– Internationalization and localization– Naming conventions– Performance– Security
http://msdn.microsoft.com/en-us/library/3z0aeatx.aspx
![Page 20: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/20.jpg)
Style Cop with R# IntegrationCode Consistency & Readability:– Automated check of C# coding
standard– Enforceable at check-in with TFS
check-in Policy
– Full Integration in Resharper with Style Cop plugin:
– Code Analysis – Quick Fixes– Code Cleanup
![Page 21: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/21.jpg)
http://submain.com/products/ghostdoc.aspx
• Save keystrokes and time• Simplify documenting your code• Benefit of the base class documentation
Ghost Doc
![Page 22: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/22.jpg)
Spell Checker
http://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce/
• Spelll chicking for literals and comments in VS
![Page 23: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/23.jpg)
http://msdn.microsoft.com/en-us/devlabs/dd491992
• Design-by-Contract programming• Improved testability• Static verification• API documentation integration with
Sandcastle
![Page 24: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/24.jpg)
• Pex automatically generates test suites with high code coverage.
• Moles allows to replace any .NET method with a delegate.
Microsoft Pex & Moles
http://research.microsoft.com/en-us/projects/pex/
![Page 25: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/25.jpg)
Names Matter• Meaningful Names• Intention Revealing Names• Use Pronounceable Names• Use Searchable Names• Avoid Encoding (Hungarian)• Don’t be cute• Pick One Word per Concept• Use Problem Domain Names
* Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 26: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/26.jpg)
Functions
• Small – Do One Thing• One Level of Abstraction• No or only few Arguments• Have No Side Effects• Prefer Exceptions to
Returning Error Codes• Don’t Repeat Yourself
* Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 27: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/27.jpg)
Comments
• Comments o not Make Up for Bad Code• Explain Yourself in Code• Clarification• Warning of Consequences• ToDo Comments• Javadocs in Public APIs
* Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 28: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/28.jpg)
Bad Comments• Mumblings• Redundant Comments• Misleading Comments• Journal Comments• Noise Comments• Don’t use a Comment When you Use a
Method or a Variable• Commented-Out Code
* Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 29: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/29.jpg)
The Purpose of Formatting• Team Rules – Consistency is King• Vertical Openness Between Concepts• Vertical Distance• Horizontal Alignment• Indentation• Write Journey Style Code
Resharper & StyleCop – “Code Cleanup”
* Kind of Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 30: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/30.jpg)
Classes• Class Organization • Encapsulation• Classes Should be Small• The Single Responsibility Principle• Cohesion• Organize for Change• Insolating from Change
* Kind of Chapter extract: Robert C. Martin –” Clean Code”, Parson Education, Inc. 2008
![Page 31: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/31.jpg)
The “Must Read”-Book(s)by Robert C Martin
A Handbook of Agile Software Craftsmanship
“Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees.”
![Page 32: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/32.jpg)
The “Must Read”-Book(s)by Krzysztof Cwalina, Brad Abrams
Framework Design Guidelines
“teaches developers the best practices for designing reusable libraries for the Microsoft .NET Framework.”
![Page 33: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/33.jpg)
Summary Clean Code Maintainability is achieved through:
• Readability (Coding Guidelines)
• Simplification and Specialization (KISS, SoC, SRP, OCP, )
• Decoupling (LSP, DIP, IHP, Contracts, LoD, CoP, IoC or SOA)
• Avoiding Code Bloat (DRY, YAGNI)
• Quality through Testability (all of them!)
![Page 34: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/34.jpg)
Downloads, Feedback & Comments:
Q & A
Graphic by Nathan Sawaya courtesy of brickartist.com
[email protected] www.speakerrate.com/theoj
![Page 35: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/35.jpg)
References… http://clean-code-developer.comhttp://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOodhttp://www.manning.com/seemann/http://en.wikipedia.org/wiki/Keep_it_simple_stupidhttp://picocontainer.org/patterns.htmlhttp://en.wikipedia.org/wiki/Separation_of_concernshttp://en.wikipedia.org/wiki/Single_responsibility_principlehttp://en.wikipedia.org/wiki/Information_hidinghttp://en.wikipedia.org/wiki/Liskov_substitution_principlehttp://en.wikipedia.org/wiki/Dependency_inversion_principlehttp://en.wikipedia.org/wiki/Open/closed_principlehttp://en.wikipedia.org/wiki/Law_Of_Demeterhttp://en.wikipedia.org/wiki/Don't_repeat_yourselfhttp://en.wikipedia.org/wiki/You_ain't_gonna_need_ithttp://en.wikipedia.org/wiki/Component-oriented_programminghttp://en.wikipedia.org/wiki/Service-oriented_architecturehttp://www.martinfowler.com/articles/injection.htmlhttp://www.codeproject.com/KB/aspnet/IOCDI.aspxhttp://msdn.microsoft.com/en-us/magazine/cc163739.aspxhttp://msdn.microsoft.com/en-us/library/ff650320.aspxhttp://msdn.microsoft.com/en-us/library/aa973811.aspxhttp://msdn.microsoft.com/en-us/library/ff647976.aspxhttp://msdn.microsoft.com/en-us/library/cc707845.aspxhttp://msdn.microsoft.com/en-us/library/bb833022.aspxhttp://unity.codeplex.com/http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11
![Page 36: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/36.jpg)
… more ReferencesResharperhttp://www.jetbrains.com/resharper/
FxCop / Code Analysis http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspxhttp://blogs.msdn.com/b/codeanalysis/http://www.binarycoder.net/fxcop/index.html
Code Contractshttp://msdn.microsoft.com/en-us/devlabs/dd491992http://research.microsoft.com/en-us/projects/contracts/
Pex & Molehttp://research.microsoft.com/en-us/projects/pex/
StyleCophttp://stylecop.codeplex.com/
Ghostdoc http://submain.com/products/ghostdoc.aspx
Spellcheckerhttp://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce// Lego (trademarked in capitals as LEGO)
![Page 37: Clean Code Part III - Craftsmanship at SoCal Code Camp](https://reader034.vdocuments.mx/reader034/viewer/2022051513/5479543ab4af9fcc458b4615/html5/thumbnails/37.jpg)
… thanks for you attention!
And visit and support the
www.sandiegodotnet.com
Please fill out the feedback, and…
www.speakerrate.com/theoj