Clean Code III - Software Craftsmanship

42
Clean Code III Chandler, Oct. 18 th , 2014 Software Craftsmanship Desert Code Camp 2014.2

description

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 2013. However, the demonstrated patterns and practice can be applied to every other programming language too. Note: Moving forwards this presentation will be updated with the latest version of the slides for the last event I did the presentation instead of creating new separate slide decks here on slideshare. Presentation dates and locations: 2014-11-14 SoCal Code Camp - Los Angeles, CA 2014-10-18 Desert Code Camp - Chandler, AZ

Transcript of Clean Code III - Software Craftsmanship

Page 1: Clean Code III - Software Craftsmanship

Clean Code III

Chandler, Oct. 18th, 2014

Software Craftsmanship

Desert Code Camp 2014.2

Page 2: Clean Code III - Software Craftsmanship

Theo Jungeblut• Engineering manager & lead by day

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 Engineeringand Network Communications

• Enjoys cycling, running and eating [email protected]

www.designitright.net

Page 3: Clean Code III - Software Craftsmanship

We are hiring!http://www.appdynamics.com/ careers

Page 4: Clean Code III - Software Craftsmanship

and there are much more positions

Page 5: Clean Code III - Software Craftsmanship

Your feedback is important!

http://www.speakerrate.com/theoj

Page 6: Clean Code III - Software Craftsmanship

Where to get the Slides

http://www.slideshare.net/theojungeblut

Page 7: Clean Code III - Software Craftsmanship

Overview

• Why Clean Code?• The Power of Simplicity• Tools - Your Best Friend• From Names to Classes• The "Must Read"-Books• Summary• Q&A

Page 8: Clean Code III - Software Craftsmanship

Does writing Clean Code make us more efficient?

Page 9: Clean Code III - Software Craftsmanship

The only valid Measurement of Code Quality

Page 10: Clean Code III - Software Craftsmanship

What is Clean Code?

Page 11: Clean Code III - Software Craftsmanship

Clean Code is maintainable

Source code must be:• readable & well structured• extensible• testable

Page 12: Clean Code III - Software Craftsmanship

Software Engineering

&Software

Craftsmanship

Page 13: Clean Code III - 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.”

Page 14: Clean Code III - Software Craftsmanship

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 15: Clean Code III - Software Craftsmanship

Keep it simple, stupid(KISS)

Page 16: Clean Code III - Software Craftsmanship

KISS-Principle – “Keep It Simple Stupid”

http://blogs.smarter.com/blogs/Lego%20Brick.jpg

by Kelly Johnson

Page 17: Clean Code III - Software Craftsmanship

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 18: Clean Code III - Software Craftsmanship

Chaos build from simplicity

Graphic by Nathan Sawaya courtesy of brickartist.com

Page 19: Clean Code III - Software Craftsmanship

Source Code Conventions

Page 20: Clean Code III - Software Craftsmanship

.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 --

Code Digger automated test ++ compiling time --

Page 21: Clean Code III - Software Craftsmanship

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 22: Clean Code III - Software Craftsmanship

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

Page 23: Clean Code III - Software Craftsmanship

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

Page 24: Clean Code III - Software Craftsmanship

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

Page 25: Clean Code III - Software Craftsmanship

Spell Checker

http://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce/

• Spelll chicking for literals and comments in VS

Page 26: Clean Code III - Software Craftsmanship

http://msdn.microsoft.com/en-us/devlabs/dd491992

• Design-by-Contract programming• Improved testability• Static verification• API documentation integration with Sandcastle

Page 27: Clean Code III - Software Craftsmanship

• 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/

Page 28: Clean Code III - Software Craftsmanship

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 29: Clean Code III - Software Craftsmanship

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 30: Clean Code III - Software Craftsmanship

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

Page 31: Clean Code III - Software Craftsmanship

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 32: Clean Code III - Software Craftsmanship

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 33: Clean Code III - Software Craftsmanship

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 34: Clean Code III - 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.”

Page 35: Clean Code III - Software Craftsmanship

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 36: Clean Code III - Software Craftsmanship

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 37: Clean Code III - Software Craftsmanship

Downloads, Feedback & Comments:

Q & A

Graphic by Nathan Sawaya courtesy of brickartist.com

[email protected] www.speakerrate.com/theoj

Page 38: Clean Code III - Software Craftsmanship

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 39: Clean Code III - Software Craftsmanship

… 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)

Page 40: Clean Code III - Software Craftsmanship

Blog, Rating, Slides

http://www.DesignItRight.net

www.speakerrate.com/theoj

www.slideshare.net/theojungeblut

Page 41: Clean Code III - Software Craftsmanship

Time to say Thank You!

The Organizers

The

volu

ntee

rs

(how

abo

ut y

ou?)

The

Spon

sors

Page 42: Clean Code III - Software Craftsmanship

… thanks for you attention!

Please fill out the feedback, and…

www.speakerrate.com/theoj

And visit and supportyour local user groups!