{ Clean Code } - Finding Marbles · Clean Code = Code Usability Bildquelle:
Clean Code
-
Upload
daniel-kummer -
Category
Technology
-
view
992 -
download
1
description
Transcript of Clean Code
CLEAN CODE IT REALLY MATTERS
BROUGHT TO YOU BY
DANIEL KUMMER
NAMICS AG ZÜRICH WWW.NAMICS.COM
SENIOR SOFTWARE ENGINEER
CLEAN CODE AGENDA
WHY DOES IT EVEN MATTER?
HOW CAN IT BE DONE?
BESIDE THE 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
WHYCARE ? ”The only valid code metric is WTFs per minute” ~ A comic strip
D O N ’ T L I V E W I T H BROKEN WINDOWS!
THE BROKEN WINDOW
SOFTWAREENTROPY
IT’S ALL ABOUT
TIME PRODUCTIVITY
NERVES PROJECTS
$$$ THE COST OF
BAD CODE Mo$va$on No one wants to take it
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
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” ~Martin Fowler
HOWTO DO IT !
SIMPLERULES 2 EASY TO FOLLOW
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
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
THREE WORDS
CARE FOR CODE
CLEAN TIPPS HOW TO GO ABOUT IT
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!
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…
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)
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
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
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
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
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
TEST YOUR CREATION SO YOU MAY SLEEP CALM AT NIGHT
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
TESTING PYRAMID
BESIDECODE THE SATELLITES OF A SOFTWARE PROJECT
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
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!
GOING DEEPER more about everything…
SOFTWARE CRAFTSMANSHIP
CODE OF CONDUCT CLEAN YOUR CODE WITH COMMON
SOLUTIONS
READING MATERIAL
CLEAN CODE DEPENDS ON
Y O U