Clean Code
This work by Fredrik Wendt is licensed under a  Creative Commons  Attribution-NonCommercial-ShareAlike  3.0 Unported Licen...
 
 
Coding Dojo / User Group JDojo@Gbg
How is it even possible for code to be this bad?
Exhibits <ul><li>Hudson class is 3900+ LOC
Hudson class is untestable Singleton
Konstruktorn anropar en metod som hämtar singleton-instansen och anropar en metod på den.
Hudson extends Node,  men Node använder instansmetoder på Hudson </li></ul>
”Smart” vs Professional <ul><li>Smart </li><ul><li>Great coding skills
Writes advanced code
String r; // lowercase url </li></ul></ul><ul><li>Professional </li><ul><li>Readable code
Maintainable code
'Clarity is king'
String lowerCaseUrl OfCurrentPage  // lowercase url </li></ul></ul>http://www.slideshare.net/JandV/clean-code-summary
Clean Code Book Comparison http://blog.xebia.com/2009/01/clean-code-vs-implementation-patterns/
Vad är Clean Code?
int d; // elapsed time in days
int d; // elapsed time in days int elapsedTimeInDays;
int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation;
int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays;
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.ad...
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[]  cell  :  gameBoard ) if ( cell [ ST...
public List<int[]>  getFlaggedCells () { List<int[]>  flaggedCells  = new ArrayList<int[]>(); for (int[] cell : gameBoard)...
public List< Cell > getFlaggedCells() { List< Cell > flaggedCells = new ArrayList< Cell >(); for ( Cell  cell : gameBoard)...
Clean code always looks like it was written by   someone who cares
Clean code always looks like it was wrtten by   somone who craes
Readable Maintainable Changeable
Agile Manifesto Individuals and interactions   over processes and tools Working software   over comprehensive documentatio...
 
Read able?
~90 % av din tid är läsning Vad händer om du  dubblar   skrivtiden ,  och därmed halverar lästiden ?
public class Part { private String m_dsc; // The textual description void setName(String name) { m_dsc = name; } } public ...
Varför bry dig? Vem skrivs koden för – användaren eller programmeraren? Den  primära användaren  av koden är en utvecklare...
Din kollega
Du själv </li></ul></ul>someone who cares
Hur ska du skriva kod då?
DRY - Don't Repeat Yourself YAGNI - You Ain't Gonna Need It
small
Meaningful Names <ul><li>Intention-Revealing
Pronounceable
Avoid Encoding </li></ul><ul><li>Klasser
Metoder </li></ul><ul><li>JobQueue
Problemdomänens ord
Kommentarer
Kodformatering! </li></ul>
Upcoming SlideShare
Loading in...5
×

Clean code

3,399

Published on

In Swedish.
Mitt försök att provocera fram lite diskussion på Javaforum 2011-Q2.

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,399
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
107
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide
  • Detta är det viktigaste du kommer höra idag. Varför står i slide 26.
  • HANDUPPRÄCKNING * Hur många är Utvecklare? eller vi tar inte utvecklare * Hur många får betalt för att huvudsakligen sitta och läsa på arbetstid? Känner till * CLEAN CODE * TDD * SERIESTRIPPEN
  • HANDUPPRÄCKNING * CLEAN CODE * TDD * SERIESTRIPPEN
  • Jag brukar prata om CC på Coding Dojo. Vi har kört detta öppet som en serie övningar som introducerar TDD och då har CC varit en del. Men det som inspirerade mig till att anmäla mig var två andra saker. &gt;&gt;&gt;
  • Gojko Adzic som skrivit böcker (borde kännas igen av dotnetfolk) skrev ett blog inlägg med titeln How is it .... om ett av mina favoritverktyg. &gt;&gt;&gt;
  • Jan de Vries
  • IP har nästan ingen kod. IP skriver i ”detta fungerar för mig”.
  • &gt;&gt;&gt; VI TAR ETT EXEMPEL TILL
  • Clean Code-boken försöker definiera flera gånger och tar in citat från prominenta namn i branchen. Minsta gemensamma nämnaren. Cares är olika beroende på vem someone är. Tänk smart vs proff &gt;&gt;&gt; Vissa saker kan vi enas om ganska enkelt, som att nästa slide är sämre.
  • &gt;&gt;&gt; Så, om det kan vara svårt att hitta gemensamma värden, vilka är då de värden som CC-boken förespråkar.
  • &gt;&gt; Readable, ok &gt;&gt; De andra två kan man ju snabbt se att de härstammar från det agila tänket. Låt oss kolla på manifesten för Agile och SoftCrafShip.
  • Kan tyckas vara en förutsättning för att kunna uppnå de andra två målen. &gt;&gt;&gt; Men det är också så &gt;&gt;&gt;
  • 90 / 10 Dubbla skrivtiden för att halvera lästiden = stor vinst! 45 + 20 = 65 Clean code hänvisar till emacs-tiden och där såg man 10:1-förhållande mellan läs/skriv. &gt;&gt;&gt; LÅT OSS GÖRA ETT TEST
  • &gt;&gt;&gt; DET FINNS ANDRA SKÄL
  • ENLIGT CC-boken
  • Är ”koding agains interface” YAGNI?
  • Metoder under 10 rader. Klasser/filer under 100?
  • Kod som kommunicerar väl – dvs blir lätt att förstå. &gt;&gt;&gt;&gt; IF ALL ELSE FAILS
  • I slutändan handlar det också om att skriva för mottagaren. Är koden för avancerad? Använder vi ord från problemdomänen? Team-standarder – kodformatering, använd IDE.
  • Clean code

    1. 2. Clean Code
    2. 3. This work by Fredrik Wendt is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-nc-sa/3.0/
    3. 6. Coding Dojo / User Group JDojo@Gbg
    4. 7. How is it even possible for code to be this bad?
    5. 8. Exhibits <ul><li>Hudson class is 3900+ LOC
    6. 9. Hudson class is untestable Singleton
    7. 10. Konstruktorn anropar en metod som hämtar singleton-instansen och anropar en metod på den.
    8. 11. Hudson extends Node, men Node använder instansmetoder på Hudson </li></ul>
    9. 12. ”Smart” vs Professional <ul><li>Smart </li><ul><li>Great coding skills
    10. 13. Writes advanced code
    11. 14. String r; // lowercase url </li></ul></ul><ul><li>Professional </li><ul><li>Readable code
    12. 15. Maintainable code
    13. 16. 'Clarity is king'
    14. 17. String lowerCaseUrl OfCurrentPage // lowercase url </li></ul></ul>http://www.slideshare.net/JandV/clean-code-summary
    15. 18. Clean Code Book Comparison http://blog.xebia.com/2009/01/clean-code-vs-implementation-patterns/
    16. 19. Vad är Clean Code?
    17. 20. int d; // elapsed time in days
    18. 21. int d; // elapsed time in days int elapsedTimeInDays;
    19. 22. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation;
    20. 23. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays;
    21. 24. public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; }
    22. 25. public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] cell : gameBoard ) if ( cell [ STATUS_VALUE ] == FLAGGED ) list1.add( cell ); return list1; }
    23. 26. public List<int[]> getFlaggedCells () { List<int[]> flaggedCells = new ArrayList<int[]>(); for (int[] cell : gameBoard) if (cell[STATUS_VALUE] == FLAGGED) flaggedCells .add(cell); return flaggedCells ; }
    24. 27. public List< Cell > getFlaggedCells() { List< Cell > flaggedCells = new ArrayList< Cell >(); for ( Cell cell : gameBoard) if ( cell.isFlagged() ) flaggedCells.add( cell ); return flaggedCells; }
    25. 28. Clean code always looks like it was written by someone who cares
    26. 29. Clean code always looks like it was wrtten by somone who craes
    27. 30. Readable Maintainable Changeable
    28. 31. Agile Manifesto Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
    29. 33. Read able?
    30. 34. ~90 % av din tid är läsning Vad händer om du dubblar skrivtiden , och därmed halverar lästiden ?
    31. 35. public class Part { private String m_dsc; // The textual description void setName(String name) { m_dsc = name; } } public class Part { private String description; void setDescription(String description) { this.description = description; } }
    32. 36. Varför bry dig? Vem skrivs koden för – användaren eller programmeraren? Den primära användaren av koden är en utvecklare, kanske <ul><ul><li>Din kund
    33. 37. Din kollega
    34. 38. Du själv </li></ul></ul>someone who cares
    35. 39. Hur ska du skriva kod då?
    36. 40. DRY - Don't Repeat Yourself YAGNI - You Ain't Gonna Need It
    37. 41. small
    38. 42. Meaningful Names <ul><li>Intention-Revealing
    39. 43. Pronounceable
    40. 44. Avoid Encoding </li></ul><ul><li>Klasser
    41. 45. Metoder </li></ul><ul><li>JobQueue
    42. 46. Problemdomänens ord
    43. 47. Kommentarer
    44. 48. Kodformatering! </li></ul>
    45. 49. Don't talk to strangers http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/
    46. 50. public class PaperBoy { private Wallet myWallet; ... public void chargeCustomer(Customer customer) { Collection<Bill> payment = customer.getPayment(5) myWallet.add(payment); } } Law of Demeter
    47. 51. public class PaperBoy { private Wallet myWallet; ... public void chargeCustomer(Customer customer) { Wallet wallet = customer.getWallet(); Collection<Bill> bills = wallet.getBills(); Collection<Bill> payment = extract(5, bills); myWallet.add(payment); // or bills? } } Law of Demeter
    48. 52. public class CareTaker { private Dog dog; ... public void walkTheDog(){ dog.walk(); dog.stop(); // tree or grass etc dog.doYourThing(); ... } } Dog's Legs
    49. 53. public class CareTaker { private Dog dog; ... public void walkTheDog(){ for (Leg leg : dog.getLegs()) leg.move(); for (Leg leg : dog.getLegs()) leg.stopMoving(); dog.brain.urinationCenter.releaseUrge(); ... } } Dog's Legs
    50. 54. Law of Demeter More formally, the Law of Demeter for functions requires that a method M of an object O may only invoke the methods of the following kinds of objects: 1. O itself 2. M's parameters 3. any objects created/instantiated within M 4. O's direct component objects 5. a variable, accessible by O, in the scope of M
    51. 55. Boy Scout Rule Leave the campground cleaner than you found it.
    52. 56. The only valid measurement of code quality WTFs / minute
    53. 57. Diskussion Kodkvalitet och retrospectives Smart vs Professional Skriva för mottagaren swenug vs JavaForum swejug?
    54. 58. Kod utan test Legacy Code
    55. 59. Vad gör jag med kod som redan ligger i ryggsäcken? <ul><li>Få upp gubben på banan – få koden testbar (och testad)
    56. 60. Fixa ev buggar som testen plockar fram i ljuset
    57. 61. ”Make it right” </li></ul>
    58. 62. Vad gör jag med kod som redan ligger i ryggsäcken? <ul><li>Få upp gubben på banan – få koden testbar (och testad)
    59. 63. Fixa ev buggar som testen plockar fram i ljuset
    60. 64. ”Make it right” – refactor! </li></ul>
    61. 65. Kod utan test ... <ul><li>är legacy-kod
    62. 66. refaktoreras inte
    63. 67. ändras gärna inte av någon annan än den som skrev koden senaste dygnen
    64. 68. är en ryggsäck </li></ul>
    65. 70. Outline <ul><li>Vad är Clean Code?
    66. 71. Varför är det intressant? </li><ul><li>Problemet
    67. 72. Lösningen </li></ul><li>Diskussion </li></ul>
    68. 73. Outline2 <ul><li>”Problemet”?
    69. 74. ”Lösningen”?
    70. 75. Diskussion </li></ul>
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×