Clean code
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Clean code

on

  • 2,623 views

In Swedish.

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

Statistics

Views

Total Views
2,623
Views on SlideShare
2,365
Embed Views
258

Actions

Likes
2
Downloads
50
Comments
1

8 Embeds 258

http://wendt.se 146
http://www.squeed.com 80
http://speakerrate.com 16
http://www.linkedin.com 8
http://blog.squeed.com 3
https://www.linkedin.com 3
http://tran 1
http://translate.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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.

Clean code Presentation 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
      • Din kund
      • 37. Din kollega
      • 38. Du själv
    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
    • Klasser
    • 45. Metoder
    • JobQueue
    • 46. Problemdomänens ord
    • 47. Kommentarer
    • 48. Kodformatering!
  • 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