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.
Clean Code Part III - Craftsmanship at SoCal Code Camp
1. SolCal
CodeCamp
Clean Code III
Software
Craftsmanship
San Diego, June 24rd 2012
2. 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 Engineering
and Network Communications theo@designitright.net
• enjoys cycling, running and eating www.designitright.net
www.speakerrate.com/theoj
3. Overview
• Why Clean Code?
• The Power of Simplicity
• Tools - Your Best Friend
• From Names to Classes
• The "Must Read"-Books
• Summary
• Q&A
10. 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.”
13. KISS-Principle – “Keep It Simple Stupid”
by Kelly Johnson
http://blogs.smarter.com/blogs/Lego%20Brick.jpg
14. The Power of Simplicity
Graphic by Nathan Sawaya courtesy of brickartist.com
Graphic by Nathan Sawaya courtesy of brickartist.com
http://www.geekalerts.com/lego-iphone/
20. 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
21. Ghost Doc
• Save keystrokes and time
• Simplify documenting your code
• Benefit of the base class documentation
http://submain.com/products/ghostdoc.aspx
22. Spell Checker
• Spelll chicking for literals and comments in VS
http://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce/
23. • Design-by-Contract programming
• Improved testability
• Static verification
• API documentation integration with
Sandcastle
http://msdn.microsoft.com/en-us/devlabs/dd491992
24. Microsoft Pex & Moles
• Pex automatically generates test suites with
high code coverage.
• Moles allows to replace any .NET method with
a delegate.
http://research.microsoft.com/en-us/projects/pex/
25. 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
26. 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
27. 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
28. 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
29. 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
30. 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
31. 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.”
32. TheKrzysztof Cwalina,Read”-Book(s)
by
“Must Brad Abrams
Framework Design
Guidelines
“teaches
developers the
best practices for
designing reusable
libraries for the
Microsoft .NET
Framework.”
33. 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!)
34. Q&A
Downloads,
Feedback & Comments:
theo@designitright.net
www.designitright.net
www.speakerrate.com/theoj
Graphic by Nathan Sawaya courtesy of brickartist.com