Your SlideShare is downloading. ×
Be clean, my friend (Clean code review by BarcelonaJUG)
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

Be clean, my friend (Clean code review by BarcelonaJUG)

453
views

Published on

BE CLEAN, MY FRIEND …

BE CLEAN, MY FRIEND
A modest review of Robert C. Martin “Clean Code, A handbook of Agile Craftmanship” book.

11/10/13 @GDGBarcelona #devfestbcn with @pensashure

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
453
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
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

Transcript

  • 1. BCN } JUG BE CLEAN, MY FRIEND A modest review of Robert C. Martin “Clean Code, A handbook of Agile Craftmanship” book
  • 2. { THANK YOU ALL } BCN } JUG
  • 3. { DO WE NEED TO CODE BETTER? } { Motivation } BCN } JUG
  • 4. { MAIN QUESTION: WHY? } 1. You want to be a good programmer 1. You want to be better programmer 1. You like being part of best teams. { Motivation } BCN } JUG
  • 5. { REALLY ?? ?? } int d; // elapsed time in days or int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays; { Motivation } BCN } JUG
  • 6. { WHAT IS CLEAN CODE ?? } Complex things = composition of simple things. Set of techniques to help us achieve complexity from simplicity. { Concepts } BCN } JUG
  • 7. { TABLE OF CONTENTS } ❏ Baptism ❏ What & how are you building? ❏ Unexpected things ❏ What’s inside? ❏ Are you testing? ❏ Before development ❏ Tell me a (beautiful) story ❏ Last, but not least ❏ Recommended readings BCN } JUG
  • 8. { BAPTISM } /* NAMING GUIDELINES */ BCN } JUG
  • 9. /* USE INTENTION-REVEALING NAMES */ { Baptism - Naming guidelines } BCN } JUG
  • 10. /* USE INTENTION-REVEALING NAMES */ METHOD CODE { Baptism - Naming guidelines } BCN } JUG
  • 11. /* USE PRONOUNCEABLE NAMES */ { Baptism - Naming guidelines } BCN } JUG
  • 12. /* CLASSES AND METHODS */ ❏ Classes should have noun or noun phrase names ❏ payment ❏ Page ❏ singleUser ❏ BankAccount ❏ myObj ❏ Methods should have verbs or verbs phrase names ❏ postPayment ❏ checkPaymentTransfered ❏ delPag ❏ save ❏ checkUserProfileAllowPaymentByCreditCard { Baptism - Naming guidelines } BCN } JUG
  • 13. /* CLASSES AND METHODS */ { Baptism - Naming guidelines } BCN } JUG
  • 14. { WHAT & HOW ARE YOU BUILDING } /* CLASSES & METHODS */ BCN } JUG
  • 15. /* POLYMORPHISM OVER IF/ELSE */ http://www.antiifcampaign.com/ { Classes & methods } BCN } JUG
  • 16. /* FUNCTIONS SHOULD DO ONE THING*/ { Classes & methods } BCN } JUG
  • 17. /* OUTPUT ARGUMENTS */ { Classes & methods } BCN } JUG
  • 18. { UNEXPECTED THINGS } /* ERROR HANDLING */ BCN } JUG
  • 19. /* PREFER EXCEPTIONS TO RETURN CODES */ { Error handling } BCN } JUG
  • 20. /* PREFER EXCEPTIONS TO RETURN CODES */ { Error handling } BCN } JUG
  • 21. /* DON’T RETURN NULL */ { Error handling } BCN } JUG
  • 22. /* DON’T PASS NULL */ { Error handling } BCN } JUG
  • 23. { WHAT IS INSIDE? } /* OBJECTS & DATA STRUCTURES */ BCN } JUG
  • 24. /* HIDE STRUCTURES */ { Objects & data structures } BCN } JUG
  • 25. /* DATA ABSTRACTION */ { Objects & data structures } BCN } JUG
  • 26. /* DATA TRANSFER OBJECTS */ { Objects & data structures } BCN } JUG
  • 27. /* LAW OF DEMETER */ ❏ Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. ❏ Each unit should only talk to its friends; don't talk to strangers. ❏ Only talk to your immediate friends { Objects & data structures } BCN } JUG
  • 28. /* LAW OF DEMETER */ ❏ A method 'm' of a class 'C' may only invoke the methods of the following kinds of elements: ❏ 'C' itself ❏ 'm's parameters ❏ Any objects created/instantiated within 'm' ❏ ‘C’'s direct component objects ❏ A global variable, accessible by 'C', in the scope of 'm' { Objects & data structures } BCN } JUG
  • 29. /* LAW OF DEMETER */ { Objects & data structures } BCN } JUG
  • 30. { ARE YOU TESTING ? } /* UNIT TESTING ! */ BCN } JUG
  • 31. /* USE A COVERAGE TOOL */ Cobertura Sonar { Unit testing } BCN } JUG
  • 32. /* TAKE CARE OF TESTS */ ❏ Don’t skip trivial tests… ❏ But don’t do ONLY trivial tests!!! ❏ Tests the limits/boundaries of the conditions! ❏ One assert per test! { Unit testing } BCN } JUG
  • 33. /* KEEP TEST CLEAN */ { Unit testing } BCN } JUG
  • 34. { BEFORE DEVELOPMENT ... } /* DESIGN */ BCN } JUG
  • 35. /* PRINCIPLES & ADVICES */ ❏ Don’t repeat yourself (DRY): duplication is evil! { Design } BCN } JUG
  • 36. /* PRINCIPLES & ADVICES */ ❏ Runs all the tests ❏ They will help you ❏ Writing tests leads to better designs! ❏ Refactoring = incrementally improvement ❏ Successive refinement ❏ Separation of main (construction objects <> use) { Design } BCN } JUG
  • 37. /* FACTORIES */ { Design } BCN } JUG
  • 38. /* DEPENDENCY INJECTION */ With Dependency Injection (Low dependency with the Interface and Implementation, because the Assembler does the job) Without Dependency Injection (Hard dependency with the Interface and Implementation) { Design } BCN } JUG
  • 39. { TELL ME A (BEAUTIFUL) STORY } /* COMMENTS */ BCN } JUG
  • 40. /* EXPLAIN YOURSELF IN CODE */ { Comments } BCN } JUG
  • 41. /* GOOD COMMENTS */ ❏ Legal comments ❏ Informative comments ❏ Explanation of Intent ❏ Warning of Consequences ❏ TODOs ❏ JavaDocs { Comments } BCN } JUG
  • 42. /* BAD COMMENTS */ /** * @param title The title * @param author The author */ /** * Returns the day of the month * * @return the day of the month */ public int getDayOfMonth() { return dayOfMonth; } /** * CHANGES * ------------* 02-Oct-2001 Reorganize process * 15-Nov-2001 Added new Purchaser type * 21-Nov-2001 Some customer objects arrive without city set */ { Comments } BCN } JUG
  • 43. { LAST, BUT NOT LEAST } BCN } JUG
  • 44. /* THINK ABOUT IT */ ❏ This is not a mantra ❏ (Try to) know your environment! ❏ Code is always live ❏ Refactor & test, test & refactor { Last, but not least } BCN } JUG
  • 45. /* BE CAREFUL */ Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. John F. Woods { Last, but not least } BCN } JUG
  • 46. { DO YOU LIKE IT ?? READ IT ... } Clean Code, A Handbook of Agile Software Craftmanship Robert C. Martin Publication date: August 11, 2008 ISBN-13: 978-0132350884 { ... OR ... WATCH IT !! } http://cleancoders.com/ BCN } JUG
  • 47. { RECOMMENDED READINGS } Effective Java (2nd edition) Joshua Bloch Publication Date: May 28, 2008 ISBN-13: 978-0321356680 Thinking in Java (4rd edition) Bruce Eckel Publication Date: February 20, 2006 ISBN-13: 978-0131872486 BCN } JUG
  • 48. { RECOMMENDED READINGS } Design Patterns: Elements of Reusable Object-Oriented Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Publication Date: November 10, 1994 ISBN-13: 978-0201633610 Refactoring: Improving the Design of Existing Code Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts Publication Date: July 8, 1999 ISBN-13: 978-0201485677 BCN } JUG
  • 49. Thank you ! public static void main (String[] args) { Author bookAuthor = new Author (“Robert”,”C.Martin”); String bookTitle = “Clean Code, A handbook of Agile Craftmanship”; Book cleanCodeBook = new Book(bookTitle, bookAuthor); Engineer esteve = new Engineer(“@pensashure”); Engineer nacho = new Engineer(“@icougil”); Review review = new Review(cleanCodeBook); review.perform( Arrays.asList(esteve, nacho) ); System.out.println(“THANKS FOR YOUR ATTENTION”); } @BarcelonaJUG BCN } JUG

×