SlideShare a Scribd company logo
Clean Code III
Software Craftsmanship
UC SD La Jolla, June 27th, 2015
SoCal Code Camp 2015
We are hiring!
http://www.appdynamics.com/ careers
Theo Jungeblut
• Director Customer Success at
AppDynamics in San Francisco
• Coder & software craftsman by night, first
time dad and house builder
• Architects decoupled solutions & crafts
maintainable code to last
• Worked in healthcare and factory
automation, building mission critical
applications, framework & platforms
• Degree in Software Engineering
and Network Communications
• Enjoys cycling, running and eating theo@designitright.net
www.designitright.net
Your feedback is important!
http://speakerrate.com/speakers/18667-theo-jungeblut
Where to get the Slides
http://www.slideshare.net/theojungeblut
Overview
• Why Clean Code?
• The Power of Simplicity
• Tools - Your Best Friend
• From Names to Classes
• The "Must Read"-Books
• Summary
• Q&A
Does writing Clean Code
make us more efficient?
The only valid Measurement of Code
Quality
What is Clean Code?
Clean Code is maintainable
Source code must be:
• readable & well structured
• extensible
• testable
Software
Engineering
&
Software
Craftsmanship
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.”
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
Keep it simple, stupid
(KISS)
KISS-Principle – “Keep It Simple Stupid”
http://blogs.smarter.com/blogs/Lego%20Brick.jpg
by Kelly Johnson
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
Chaos build from simplicity
Graphic by Nathan Sawaya courtesy of brickartist.com
Source Code Conventions
.NET Tools and their Impact
Tool name Positive Impact Negative Impact
Resharper compiling ++++,
learning +++
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 --
Code Digger automated test ++ compiling time --
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/
FxCop / Static Code Analysis
Code Analysis:
– Correctness
– Library design
– Internationalization and localization
– Naming conventions
– Performance
– Security
http://msdn.microsoft.com/en-us/library/3z0aeatx.aspx
Style Cop with R# Integration
Code 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
http://submain.com/products/ghostdoc.aspx
• Save keystrokes and time
• Simplify documenting your code
• Benefit of the base class documentation
• Source code and text spellcheck (Pro version)
• API documentation creation (Pro version)
Ghost Doc
Spell Checker
http://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce/
• Spelll chicking for literals and comments in VS
http://msdn.microsoft.com/en-us/devlabs/dd491992
• Design-by-Contract programming
• Improved testability
• Static verification
• API documentation integration with Sandcastle
• Pex automatically generates test suites with high code
coverage.
• Moles allows to replace any .NET method with a delegate.
Flakes
(Microsoft Pex & Moles)
http://research.microsoft.com/en-us/projects/pex/
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
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
Comments
• Comments do 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
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
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
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
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.”
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.”
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!)
Downloads,
Feedback & Comments:
Q & A
Graphic by Nathan Sawaya courtesy of brickartist.com
theo@designitright.net
www.designitright.net
http://speakerrate.com/ speakers
/18667-theo-jungeblut
References…
http://clean-code-developer.com
http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
http://www.manning.com/seemann/
http://en.wikipedia.org/wiki/Keep_it_simple_stupid
http://picocontainer.org/patterns.html
http://en.wikipedia.org/wiki/Separation_of_concerns
http://en.wikipedia.org/wiki/Single_responsibility_principle
http://en.wikipedia.org/wiki/Information_hiding
http://en.wikipedia.org/wiki/Liskov_substitution_principle
http://en.wikipedia.org/wiki/Dependency_inversion_principle
http://en.wikipedia.org/wiki/Open/closed_principle
http://en.wikipedia.org/wiki/Law_Of_Demeter
http://en.wikipedia.org/wiki/Don't_repeat_yourself
http://en.wikipedia.org/wiki/You_ain't_gonna_need_it
http://en.wikipedia.org/wiki/Component-oriented_programming
http://en.wikipedia.org/wiki/Service-oriented_architecture
http://www.martinfowler.com/articles/injection.html
http://www.codeproject.com/KB/aspnet/IOCDI.aspx
http://msdn.microsoft.com/en-us/magazine/cc163739.aspx
http://msdn.microsoft.com/en-us/library/ff650320.aspx
http://msdn.microsoft.com/en-us/library/aa973811.aspx
http://msdn.microsoft.com/en-us/library/ff647976.aspx
http://msdn.microsoft.com/en-us/library/cc707845.aspx
http://msdn.microsoft.com/en-us/library/bb833022.aspx
http://unity.codeplex.com/
http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11
… more References
Resharper
http://www.jetbrains.com/resharper/
FxCop / Code Analysis
http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx
http://blogs.msdn.com/b/codeanalysis/
http://www.binarycoder.net/fxcop/index.html
Code Contracts
http://msdn.microsoft.com/en-us/devlabs/dd491992
http://research.microsoft.com/en-us/projects/contracts/
Fakes (Previous Moles & Pex)
http://www.richonsoftware.com/post/2012/04/20/Comparing-Microsoft
-Moles-in-Visual-Studio-2010-to-Microsoft-Fakes-in-Visual-Studio-11.aspx
http://research.microsoft.com/en-us/projects/pex/
StyleCop
http://stylecop.codeplex.com/
Ghostdoc
http://submain.com/products/ghostdoc.aspx
Spellchecker
http://visualstudiogallery.msdn.microsoft.com/
7c8341f1-ebac-40c8-92c2-476db8d523ce//
Time to say Thank You!
The Organizers
Thevolunteers
(howaboutyou?)TheSponsors
Blog, Rating, Slides
http://www.DesignItRight.net
http://speakerrate.com/
speakers/18667-theo-jungeblut
www.slideshare.net/theojungeblut
… thanks for you attention!
Please fill out the
feedback, and…
www.speakerrate.com/theoj
And visit and support
your local user groups!

More Related Content

Clean Code III - Software Craftsmanship