Clean Code III - Software Craftsmanship at SoCal Code Camp San Diego (07/27/2013)
-
Upload
theo-jungeblut -
Category
Technology
-
view
2.436 -
download
0
description
Transcript of Clean Code III - Software Craftsmanship at SoCal Code Camp San Diego (07/27/2013)
Clean Code IIISoftware
CraftsmanshipSan Diego, July 27th, 2013
SolCalCode Camp
Theo Jungeblut• Engineering manager & lead by day
at AppDynamics in San Francisco
• Coder & software craftsman by night
• Architects decoupled solutions tailored to business needs & crafts maintainable code to last
• Worked in healthcare and factory automation, building mission critical applications, framework & platforms
• Degree in Software Engineeringand Network Communications
• Enjoys cycling, running and [email protected]
www.designitright.net
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?
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
Graphic by Nathan Sawaya courtesy of brickartist.com
Source Code Conventions
.NET Tools and their ImpactTool 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 --
Pex & Moles 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 AnalysisCode Analysis:– Correctness– Library design– Internationalization and localization– Naming conventions– Performance– Security
http://msdn.microsoft.com/en-us/library/3z0aeatx.aspx
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
http://submain.com/products/ghostdoc.aspx
• Save keystrokes and time• Simplify documenting your code• Benefit of the base class documentation
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.
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
[email protected] www.speakerrate.com/theoj
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
… 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/
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.aspxhttp://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)
Blog, Rating, Slides
http://www.DesignItRight.net
www.speakerrate.com/theoj
www.slideshare.net/theojungeblut
… thanks for you attention!
And visit and support the
www.sandiegodotnet.com
Please fill out the feedback, and…
www.speakerrate.com/theoj