Transcript
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!


Top Related