Your SlideShare is downloading. ×
Clean code
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Clean code

3,042
views

Published on

In Swedish. …

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

Published in: Technology

1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,042
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
90
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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. >>>
  • 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. >>>
  • Jan de Vries
  • IP har nästan ingen kod. IP skriver i ”detta fungerar för mig”.
  • >>> 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 >>> Vissa saker kan vi enas om ganska enkelt, som att nästa slide är sämre.
  • >>> Så, om det kan vara svårt att hitta gemensamma värden, vilka är då de värden som CC-boken förespråkar.
  • >> Readable, ok >> 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. >>> Men det är också så >>>
  • 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. >>> LÅT OSS GÖRA ETT TEST
  • >>> 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å. >>>> 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.
  • Transcript

    • 1.  
    • 2. Clean Code
    • 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/
    • 4.  
    • 5.  
    • 6. Coding Dojo / User Group JDojo@Gbg
    • 7. How is it even possible for code to be this bad?
    • 8. Exhibits
      • Hudson class is 3900+ LOC
      • 9. Hudson class is untestable Singleton
      • 10. Konstruktorn anropar en metod som hämtar singleton-instansen och anropar en metod på den.
      • 11. Hudson extends Node, men Node använder instansmetoder på Hudson
    • 12. ”Smart” vs Professional
      • Smart
        • Great coding skills
        • 13. Writes advanced code
        • 14. String r; // lowercase url
      • Professional
        • Readable code
        • 15. Maintainable code
        • 16. 'Clarity is king'
        • 17. String lowerCaseUrl OfCurrentPage // lowercase url
      http://www.slideshare.net/JandV/clean-code-summary
    • 18. Clean Code Book Comparison http://blog.xebia.com/2009/01/clean-code-vs-implementation-patterns/
    • 19. Vad är Clean Code?
    • 20. int d; // elapsed time in days
    • 21. int d; // elapsed time in days int elapsedTimeInDays;
    • 22. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation;
    • 23. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays;
    • 24. public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; }
    • 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; }
    • 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 ; }
    • 27. public List< Cell > getFlaggedCells() { List< Cell > flaggedCells = new ArrayList< Cell >(); for ( Cell cell : gameBoard) if ( cell.isFlagged() ) flaggedCells.add( cell ); return flaggedCells; }
    • 28. Clean code always looks like it was written by someone who cares
    • 29. Clean code always looks like it was wrtten by somone who craes
    • 30. Readable Maintainable Changeable
    • 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
    • 32.  
    • 33. Read able?
    • 34. ~90 % av din tid är läsning Vad händer om du dubblar skrivtiden , och därmed halverar lästiden ?
    • 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; } }
    • 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 someone who cares
    • 39. Hur ska du skriva kod då?
    • 40. DRY - Don't Repeat Yourself YAGNI - You Ain't Gonna Need It
    • 41. small
    • 42. Meaningful Names
      • Intention-Revealing
      • 43. Pronounceable
      • 44. Avoid Encoding
    • 49. Don't talk to strangers http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/
    • 50. public class PaperBoy { private Wallet myWallet; ... public void chargeCustomer(Customer customer) { Collection<Bill> payment = customer.getPayment(5) myWallet.add(payment); } } Law of Demeter
    • 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
    • 52. public class CareTaker { private Dog dog; ... public void walkTheDog(){ dog.walk(); dog.stop(); // tree or grass etc dog.doYourThing(); ... } } Dog's Legs
    • 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
    • 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
    • 55. Boy Scout Rule Leave the campground cleaner than you found it.
    • 56. The only valid measurement of code quality WTFs / minute
    • 57. Diskussion Kodkvalitet och retrospectives Smart vs Professional Skriva för mottagaren swenug vs JavaForum swejug?
    • 58. Kod utan test Legacy Code
    • 59. Vad gör jag med kod som redan ligger i ryggsäcken?
      • Få upp gubben på banan – få koden testbar (och testad)
      • 60. Fixa ev buggar som testen plockar fram i ljuset
      • 61. ”Make it right”
    • 62. Vad gör jag med kod som redan ligger i ryggsäcken?
      • Få upp gubben på banan – få koden testbar (och testad)
      • 63. Fixa ev buggar som testen plockar fram i ljuset
      • 64. ”Make it right” – refactor!
    • 65. Kod utan test ...
      • är legacy-kod
      • 66. refaktoreras inte
      • 67. ändras gärna inte av någon annan än den som skrev koden senaste dygnen
      • 68. är en ryggsäck
    • 69.  
    • 70. Outline
      • Vad är Clean Code?
      • 71. Varför är det intressant?
        • Problemet
        • 72. Lösningen
      • Diskussion
    • 73. Outline2
      • ”Problemet”?
      • 74. ”Lösningen”?
      • 75. Diskussion

    ×