Clean Code

30
CLEAN CODE IT REALLY MATTERS BROUGHT TO YOU BY DANIEL KUMMER NAMICS AG ZÜRICH WWW.NAMICS.COM SENIOR SOFTWARE ENGINEER

description

Clean Code talk held at the HSR "Hochschule für Technik Rapperswil" and the FHNW "Fachhochschule Nordwestschweiz" based on the great book by Robert C. Martin and enriched with personal experiences

Transcript of Clean Code

Page 1: Clean Code

CLEAN CODE IT REALLY MATTERS

BROUGHT TO YOU BY

DANIEL KUMMER

NAMICS AG ZÜRICH WWW.NAMICS.COM

SENIOR SOFTWARE ENGINEER

Page 2: Clean Code

CLEAN CODE AGENDA

WHY DOES IT EVEN MATTER?

HOW CAN IT BE DONE?

BESIDE THE CODE… ? ! *

Page 3: Clean Code

DEFINITION OF CLEAN CODE

WORKS CORRECTLY

READABLE IT TELLS YOU A STORY

SIMPLE TO UNDERSTAND

EXTENDABLE EASY TO MODIFY

EFFICIENT IT DOES IT RIGHT

CLEAN SOMEONE CARED

Page 4: Clean Code

WHYCARE ?   ”The only valid code metric is WTFs per minute” ~ A comic strip  

Page 5: Clean Code

D O N ’ T L I V E W I T H BROKEN WINDOWS!

THE BROKEN WINDOW

SOFTWAREENTROPY

Page 6: Clean Code

IT’S ALL ABOUT

TIME PRODUCTIVITY

NERVES PROJECTS

$$$  THE COST OF

BAD CODE Mo$va$on  No  one  wants  to  take  it  

Page 7: Clean Code

DETECTING BAD CODE

A FEW SMELLS

DEAD CODE UNUSED = UNNEEDED

DUPLICATES DON’T REPEAT YOURSELF

COMMENTS WHY NOT WHAT

LONG METHOD / PARAMETER LIST SHORTER = EASIER

CONDITIONAL COMPLEXITY HARD TO TEST

SPECULATIVE GENERALITY SOLVE TODAYS PROBLEM, NOT TOMORROWS

A more complete list can be found at http://www.codinghorror.com/blog/2006/05/code-smells.html

Page 8: Clean Code

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” ~Martin Fowler

HOWTO DO IT !  

Page 9: Clean Code

SIMPLERULES 2 EASY TO FOLLOW  

Page 10: Clean Code

WRITE DIRTY CODE FIRST, THEN CLEAN IT 1

YOU CAN’T WRITE CLEAN CODE ON THE FIRST GO!

SUCCESSIVE REFINEMENT IS KEY

YOUR FIRST ATTEMPT WON’T BE YOUR BEST

START WITH PSEUDOCODE

Page 11: Clean Code

THE “BOYSCOUT” RULE

EVEN IF IT’S JUST REFORMATTING – YOU CARED

INCREMENTIALISM – MAKE TINY CHANGES

YOU ARE TAKING RESPONSIBILITY

LEAVE IT CLEANER THAN YOU FOUND IT 2

Page 12: Clean Code

THREE WORDS

CARE FOR CODE

Page 13: Clean Code

CLEAN TIPPS HOW TO GO ABOUT IT

Page 14: Clean Code

NAMING CONVENTIONS REVEAL INTENTION – CLARITY IS KING no questions asked about the purpose

LONG NAMES AREN’T BAD pick names corresponding to the scope

ONE WORD PER CONCEPT / NOT AMBIGUOUS keep the lexicon consistent

USE ENGLISH – DON’T USE YOUR LANGUAGE just don’t!

Page 15: Clean Code

CODING DRY - DON’T REPEAT YOURSELF duplication is a root of evil!

DON’T OPTIMIZE PREMATURELY unless it’s really, really necessary

DON’T SAVE ON CHARACTERS one liners are not faster, just unreadable

DON’T TRY TO OUTSMART THE COMPILER really smart people are working on it…

Page 16: Clean Code

FUNCTIONS KISS - KEEP IT SIMPLE AND STUPID equals understandable

DO ONE THING ONLY – AND DO IT WELL keep the level of abstraction to a minimum

MINIMIZE ARGUMENTS – LESS IS MORE pursue it, as best as you can (think about testing)

Page 17: Clean Code

FUNCTIONS FLAGS ARE BAD prefer polymorphism

SIDE EFFECTS ARE SCARY the function should do one thing

EXTRACT ERROR HANDLING improve readability, don’t obscure logic

RETURN ONCE ONLY – OR FAIL FAST keep the exit clear

Page 18: Clean Code

COMMENTING //drunk, fix later

NEVER EXPLAIN WHAT CODE DOES explain WHY you did it this way

DON’T COMMENT OUT CODE we have VCS for this!

COMMENT STRANGE OR UNNATURAL CODE do it even if it’s not your own – explain why

NO REDUNDANT OR MANDATED COMMENTS example: don’t document getters / setters

Page 19: Clean Code

FORMATTING DO IT LIKE THE NEWSPAPERS

{ TOP-DOWN PRINCIPLE

MAIN FUNCTIONS ON TOP FOLLOWED BY CALLED FUNCTIONS

} VERTICAL DENSITY WHAT BELONGS TOGETHER SHOULD BE TOGETHER

NO HORIZONTAL ALIGNMENT DON’T ALIGN JUST FOR THE LOOKS

Page 20: Clean Code

OBJECTS AND CLASSES SRP – SINGLE RESPONSIBILITY PRINCIPLE one responsibility per object

SMALL keep away from the “god”-classes

ORGANIZE FOR CHANGE – USE INTERFACES it’s most likely going to happen

LoD - LAW OF DEMETER (LOOSE COUPLING) a given object should assume as little as possible about the structure or properties of anything else

Page 21: Clean Code

ERROR HANDLING USE UNCHECKED EXCEPTIONS AND DOCUMENT THEM IN THE JAVADOC you decide when to handle them

EXTRACT HANDLING BLOCKS (TRY/CATCH) don’t disturb the code flow

DON’T RETURN NULL, DON’T PASS NULL avoid NULL checks and NPEs

CONCENTRATE ON WHAT YOU CAN HANDLE not what to throw

Page 22: Clean Code

TEST YOUR CREATION SO YOU MAY SLEEP CALM AT NIGHT

Page 23: Clean Code

THE F.I.R.S.T PRINCIPLE FAST tests should run quick – or you won’t run them

INDEPENDENT no test should depend on another test

REPEATABLE in any environment, your laptop, the CI server…

SELF-VALIDATING pass or fail - no manual action required

TIMELY don’t write your tests too late, it only gets harder

Page 24: Clean Code

TESTING PYRAMID

Page 25: Clean Code

BESIDECODE THE SATELLITES OF A SOFTWARE PROJECT  

Page 26: Clean Code

USE TOOLS COMBINE YOUR MAGIC HELPERS

SCM / VSC KEEP A CLEAR HISTORY

ISSUE MANAGEMENT TRACK DISCUSSIONS AND DESCISSIONS

RELEASE MANAGEMENT DEFINE YOUR RELEASE CYCLES

CONTINUOUS INTEGRATION EARLY PROBLEM RECOGNITION

CODE METRICS HEURISTIC CODE ANALYSIS

Page 27: Clean Code

HUMAN FACTORS DON’T BE SHY…

LEARN DELIBERATE PRACTICE

SHARE THOUGHTS / TOOLS / IDEAS

DISCUSS GUIDELINES / PROBLEMS / SOLUTIONS

REVIEW IMPROVE AND LEARN

OTHERS HAVE THE SAME PROBLEMS YOU HAVE – EVEN PROS!

Page 28: Clean Code

GOING DEEPER more about everything…

Page 29: Clean Code

SOFTWARE CRAFTSMANSHIP

CODE OF CONDUCT CLEAN YOUR CODE WITH COMMON

SOLUTIONS

READING MATERIAL

Page 30: Clean Code

CLEAN CODE DEPENDS ON

Y O U