Slide 1

Slide 1 text

CLEAN CODE BECAUSE IT REALLY MATTERS PRESENTED BY DANIEL KUMMER NAMICS AG WWW.NAMICS.COM SENIOR SOFTWARE ENGINEER

Slide 2

Slide 2 text

CLEAN CODE WHY DOES IT EVEN MATTER? HOW CAN IT BE DONE? BESIDE THE CODE… SUMMARY

Slide 3

Slide 3 text

WHY CARE? ”The code works just fine…”

Slide 4

Slide 4 text

THE BROKEN WINDOW SOFTWARE ENTROPY DON’T LIVE WITH BROKEN WINDOWS!

Slide 5

Slide 5 text

IN THE END, IT’S ALL ABOUT TIME PRODUCTIVITY NERVES THE COST OF BAD CODE PROJECTS

Slide 6

Slide 6 text

CODE SMELLS IT STINKS! DETECT BAD CODE … when it’s not obvious there are dozens google it for a more complete list warning signs / indicators

Slide 7

Slide 7 text

A SMELLY SELECTION DEAD CODE COMMENTS DUPLICATE CODE LONG METHOD LONG PARAMETER LIST CONDITIONAL COMPLEXITY SPECULATIVE GENERALITY SHOTGUN SURGERY

Slide 8

Slide 8 text

HOW TO DO IT! “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” ~Martin Fowler

Slide 9

Slide 9 text

CLEAN WHAT’ CLEAN CODE? SIMPLE READABLE EXTENDABLE EFFICIENT understand what it does able to solve upcoming problems if you do it, do it right someone cared for it it has a story to tell

Slide 10

Slide 10 text

LET’S TAKE THE DIVE

Slide 11

Slide 11 text

THE RULES FOR CLEAN CODE 2

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

LEAVE IT CLEANER THAN YOU FOUND IT 2 incrementialism – make tiny changes Even if it’s just reformatting, you cared! the “boyscout” rule

Slide 14

Slide 14 text

IN ONE SCENTENCE CARE FOR CODE  

Slide 15

Slide 15 text

CLEAN UP a few tips on how to go about it

Slide 16

Slide 16 text

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 keep the lexicon consitent NAMING

Slide 17

Slide 17 text

FUNCTIONS DRY - DON’T REPEAT YOURSELF duplication is a root of evil! KISS - KEEP IT SIMPLE AND STUPID equals understandable DO ONE THING ONLY – AND DO IT WELL keep the level of abstraction to a minimum ZERO ARGUMENTS – THE IDEAL pursue it, as best as you can (think about testing)

Slide 18

Slide 18 text

FUNCTIONS CONT. FLAGS ARE BAD! prefer polimorphism SIDE EFFECTS ARE LIES! the function should do one thing EXTRACT ERROR HANDLING improve readability, don’t obscure logic RETURN ONLY ONCE – OR FAIL FAST keep the exit clear

Slide 19

Slide 19 text

COMMENTS NEVER EXPLAIN WHAT CODE DOES explain WHY //drunk, fix later DON’T COMMENT OUT CODE we have VCS for this! NO CHANGE HISTORY HEADER see above (it wouldn’t be maintained anyway) NO REDUNDANT OR MANDATED COMMENTS example: why document an accessor?

Slide 20

Slide 20 text

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 HORIZONTAL ALIGNMENT don’t align just for the looks

Slide 21

Slide 21 text

OBJECTS & CLASSES SRP – SINGLE RESPONSIBILITY PRINCIPLE same as functions - do one thing 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

Slide 22

Slide 22 text

ERROR HANDLING USE UNCHECKED EXCEPTIONS 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 NPEs LoD - LAW OF DEMETER (LOOSE COUPLING) a given object should assume as little as possible about the structure or properties of anything else

Slide 23

Slide 23 text

TEST IT! so you may sleep calm at night

Slide 24

Slide 24 text

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 F.I.R.S.T

Slide 25

Slide 25 text

BESIDE CODE the satellites of a software project

Slide 26

Slide 26 text

VERSION MANAGEMENT TOOLING ISSUE MANAGEMENT SCM / VCS CONTINUOUS INTEGRATION CODE METRICS track your discussions and descisions early problem recognition analyze your code with heuristics define your cycles keep a clean history educate your team

Slide 27

Slide 27 text

THE HUMAN FACTOR REVIEW Improve and learn DISCUSS guidelines solutions problems SHARE thoughts tools ideas

Slide 28

Slide 28 text

GO DEEPER more about everything…

Slide 29

Slide 29 text

READING MATERIAL SOFTWARE CRAFTSMANSHIP CODE OF CONDUCT CLEAN YOUR CODE WITH COMMON SOLUTIONS

Slide 30

Slide 30 text

AGAIN… CARE FOR (YOUR) CODE   YOU WON’T REGRET IT

Slide 31

Slide 31 text

CLEAN CODE DEPENDS ON YOU!   THANKS!