SlideShare a Scribd company logo
1 of 27
Clean Code

                              Hendrik Ebel
                             10. Mar. 2009
Tuesday, March 10, 2009
Topics
                          Motivation
                          Meaningful Names
                          Comments
                          Functions
                                                        By Robert C. Martin & Co.


                          Objects and Data Structures      Object Mentor Inc.




                          Error Handling
                          Unit Tests
Tuesday, March 10, 2009
What is Clean Code?
                          One Question ...




Tuesday, March 10, 2009
What is Clean Code?
                          One Question ...
                                                   elegant
                                                                efficient
                             simple and direct

                                                  readability        easy to enhance
                      like a well-written prose
                                                             care
                                     no duplications
                                                   was made for the problem
                  ...many answers!
Tuesday, March 10, 2009
What is Clean Code?
                          One Question ...
                                                   elegant
                                                                efficient
                             simple and direct

                                                  readability        easy to enhance
                      like a well-written prose
                                                             care
                                     no duplications
                                                   was made for the problem
                  ...many answers!
Tuesday, March 10, 2009
Motivation
                          The Total Cost of Owning a Mess




                                    productivity vs. time

Tuesday, March 10, 2009
Aims of Clean Code

                          producing better code
                          @author writing for readers
                          code has to be kept clean over time
                          „Leave the campground cleaner than
                          you found it.“


Tuesday, March 10, 2009
Meaningful Names




Tuesday, March 10, 2009
Meaningful Names
                          variable, function or class names should
                          answer all the big questions:

                           why it exists?
                           what it does?
                           how it is used?


Tuesday, March 10, 2009
Meaningful Names
                          If a name requires a comment, then the
                          name does not reveal its intent
                          avoid disinformation
                           don't use type information in names
                           (example: personList)
                           Spelling similar concepts similarly is
                           information. Using inconsistent spellings is
                           disinformation.

Tuesday, March 10, 2009
Comments




Tuesday, March 10, 2009
Good and Bad Comments
                     • Public API Comments     • Redundant Comments
                     • Legal Comments          • Noise Comments
                     • Explanation of Intent   • Position Markers
                     • Warning for             • Closing Brace Comments
                                               • Commented-Out Code
                          Consequences
                     • real TODO Comments      • Obsolete Comments
                                               • Nonpublic JavaDocs



Tuesday, March 10, 2009
Comments

                          „Purpose of a comment is to explain code
                          that does not explain itself.“
                          Comments do not make up for bad code
                          Don‘t use a comment when you can use a
                          function or a variable
                          Comments can contains lies

Tuesday, March 10, 2009
Functions




Tuesday, March 10, 2009
Functions
                          The goal is to tell the story of the
                          system.
                          „The first rule of functions is that they
                          should be small.“
                          Do One Thing!
                          Stepdown Rule


Tuesday, March 10, 2009
Functions
                          Ideal number of arguments is zero
                          More than three should‘t be used
                          anyway
                          Flag arguments are ugly.
                          Avoid output arguments
                          Side effects are lies.


Tuesday, March 10, 2009
Objects and Data
                             Structures




Tuesday, March 10, 2009
Objects
                          hide data and expose functions
                          easy to add new objects
                          hard to add new behaviors




Tuesday, March 10, 2009
Data Structures
                          expose data and have no meaningful
                          functions
                          easy to add new behaviors
                          hard to add new data structures

                          Choose the approach that is best for the job.



Tuesday, March 10, 2009
Error Handling




Tuesday, March 10, 2009
Error Handling

                          Write code that is clean and rebust
                          See error handling as a separate concern
                          Use exceptions rather than return codes
                          Use unchecked exceptions



Tuesday, March 10, 2009
Error Handling
                          Don‘t return NULL
                           throwing an exception or a special
                           case object like
                           „Collections.emptyList()“
                          Don‘t pass NULL
                           InvalidArgumentExceptions or assert
                           better: forbid passing NULL by default
Tuesday, March 10, 2009
Unit Tests




Tuesday, March 10, 2009
Unit Tests
                          Test Driven Development (TDD)
                           test and production code are written
                           together
                           tests just a few seconds ahead
                          Keeping tests clean
                          Test code is just as important as
                          production code.

Tuesday, March 10, 2009
Unit Tests
                          One Assert or Single Concept per Test
                          F.I.R.S.T.
                            Fast
                            Independent
                            Repeatable (in any environment)
                            Self-Validation
                            Timly

Tuesday, March 10, 2009
Thanks - Any Questions?




Tuesday, March 10, 2009
Sources
             Book
                   „Clean Code“ by Robert C. Martin
                   ISBN: 0132350882
             Images
                   http://www.failblog.org
                   http://www.flickr.com/photos/hugovk/199425487/
                   http://www.flickr.com/photos/jackpot321/1809424991/
                   http://www.osnews.com/story/19266/WTFs_m

Tuesday, March 10, 2009

More Related Content

What's hot

What's hot (20)

Clean code: meaningful Name
Clean code: meaningful NameClean code: meaningful Name
Clean code: meaningful Name
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Writing clean code
Writing clean codeWriting clean code
Writing clean code
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
Clean code
Clean codeClean code
Clean code
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean code
Clean code Clean code
Clean code
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
7 rules of simple and maintainable code
7 rules of simple and maintainable code7 rules of simple and maintainable code
7 rules of simple and maintainable code
 
Clean code presentation
Clean code presentationClean code presentation
Clean code presentation
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
 
Refactoring and code smells
Refactoring and code smellsRefactoring and code smells
Refactoring and code smells
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
Clean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipClean Code III - Software Craftsmanship
Clean Code III - Software Craftsmanship
 
Clean Code: Chapter 3 Function
Clean Code: Chapter 3 FunctionClean Code: Chapter 3 Function
Clean Code: Chapter 3 Function
 
Clean code
Clean codeClean code
Clean code
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Code smell overview
Code smell overviewCode smell overview
Code smell overview
 
The art of readable code ( pdf )
The art of readable code ( pdf )The art of readable code ( pdf )
The art of readable code ( pdf )
 

Similar to Clean Code

Inleiding tot CHI
Inleiding tot CHIInleiding tot CHI
Inleiding tot CHIErik Duval
 
NodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' GuideNodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' GuideGrey Ang
 
Towards Organizational Agent-based Operating Systems
Towards Organizational Agent-based Operating SystemsTowards Organizational Agent-based Operating Systems
Towards Organizational Agent-based Operating SystemsJavi Palanca
 
JSUG - ActionScript 3 vs Java by Christoph Pickl
JSUG - ActionScript 3 vs Java by Christoph PicklJSUG - ActionScript 3 vs Java by Christoph Pickl
JSUG - ActionScript 3 vs Java by Christoph PicklChristoph Pickl
 
JSUG - AS3 vs Java by Christoph Pickl
JSUG - AS3 vs Java by Christoph PicklJSUG - AS3 vs Java by Christoph Pickl
JSUG - AS3 vs Java by Christoph PicklChristoph Pickl
 
Managing And Optimizing Memory Usage
Managing And Optimizing Memory UsageManaging And Optimizing Memory Usage
Managing And Optimizing Memory UsageJohn Wilker
 
Multi player iPhone Games
Multi player iPhone GamesMulti player iPhone Games
Multi player iPhone GamesJohn Wilker
 
IT Presentation to Internal Library Building Committee
IT Presentation to Internal Library Building CommitteeIT Presentation to Internal Library Building Committee
IT Presentation to Internal Library Building CommitteeJason Griffey
 
Introduction au referencemnet naturel
Introduction au referencemnet naturelIntroduction au referencemnet naturel
Introduction au referencemnet naturelSamuel Lavoie
 
AIM to Chat with Meebo: Logging onto Academic Advising
AIM to Chat with Meebo: Logging onto Academic AdvisingAIM to Chat with Meebo: Logging onto Academic Advising
AIM to Chat with Meebo: Logging onto Academic AdvisingMarissa Saenz
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)magda3695
 
ATA 2009 LT-10 Why You Want To Translate On The Mac
ATA 2009 LT-10 Why You Want To Translate On The MacATA 2009 LT-10 Why You Want To Translate On The Mac
ATA 2009 LT-10 Why You Want To Translate On The MacDierk Seeburg
 

Similar to Clean Code (17)

JavaScript for PHP Developers
JavaScript for PHP DevelopersJavaScript for PHP Developers
JavaScript for PHP Developers
 
Depot Best Practices
Depot Best PracticesDepot Best Practices
Depot Best Practices
 
Inleiding tot CHI
Inleiding tot CHIInleiding tot CHI
Inleiding tot CHI
 
NodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' GuideNodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' Guide
 
Towards Organizational Agent-based Operating Systems
Towards Organizational Agent-based Operating SystemsTowards Organizational Agent-based Operating Systems
Towards Organizational Agent-based Operating Systems
 
JSUG - ActionScript 3 vs Java by Christoph Pickl
JSUG - ActionScript 3 vs Java by Christoph PicklJSUG - ActionScript 3 vs Java by Christoph Pickl
JSUG - ActionScript 3 vs Java by Christoph Pickl
 
JSUG - AS3 vs Java by Christoph Pickl
JSUG - AS3 vs Java by Christoph PicklJSUG - AS3 vs Java by Christoph Pickl
JSUG - AS3 vs Java by Christoph Pickl
 
Managing And Optimizing Memory Usage
Managing And Optimizing Memory UsageManaging And Optimizing Memory Usage
Managing And Optimizing Memory Usage
 
STOP! Use case time!
STOP! Use case time!STOP! Use case time!
STOP! Use case time!
 
Multi player iPhone Games
Multi player iPhone GamesMulti player iPhone Games
Multi player iPhone Games
 
IT Presentation to Internal Library Building Committee
IT Presentation to Internal Library Building CommitteeIT Presentation to Internal Library Building Committee
IT Presentation to Internal Library Building Committee
 
Introduction au referencemnet naturel
Introduction au referencemnet naturelIntroduction au referencemnet naturel
Introduction au referencemnet naturel
 
Becoming Indie
Becoming IndieBecoming Indie
Becoming Indie
 
AIM to Chat with Meebo: Logging onto Academic Advising
AIM to Chat with Meebo: Logging onto Academic AdvisingAIM to Chat with Meebo: Logging onto Academic Advising
AIM to Chat with Meebo: Logging onto Academic Advising
 
Becoming Indie
Becoming IndieBecoming Indie
Becoming Indie
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)
 
ATA 2009 LT-10 Why You Want To Translate On The Mac
ATA 2009 LT-10 Why You Want To Translate On The MacATA 2009 LT-10 Why You Want To Translate On The Mac
ATA 2009 LT-10 Why You Want To Translate On The Mac
 

Recently uploaded

Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxiammrhaywood
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for BeginnersSabitha Banu
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxleah joy valeriano
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)cama23
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxAshokKarra1
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxlancelewisportillo
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 

Recently uploaded (20)

Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for Beginners
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptx
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 

Clean Code

  • 1. Clean Code Hendrik Ebel 10. Mar. 2009 Tuesday, March 10, 2009
  • 2. Topics Motivation Meaningful Names Comments Functions By Robert C. Martin & Co. Objects and Data Structures Object Mentor Inc. Error Handling Unit Tests Tuesday, March 10, 2009
  • 3. What is Clean Code? One Question ... Tuesday, March 10, 2009
  • 4. What is Clean Code? One Question ... elegant efficient simple and direct readability easy to enhance like a well-written prose care no duplications was made for the problem ...many answers! Tuesday, March 10, 2009
  • 5. What is Clean Code? One Question ... elegant efficient simple and direct readability easy to enhance like a well-written prose care no duplications was made for the problem ...many answers! Tuesday, March 10, 2009
  • 6. Motivation The Total Cost of Owning a Mess productivity vs. time Tuesday, March 10, 2009
  • 7. Aims of Clean Code producing better code @author writing for readers code has to be kept clean over time „Leave the campground cleaner than you found it.“ Tuesday, March 10, 2009
  • 9. Meaningful Names variable, function or class names should answer all the big questions: why it exists? what it does? how it is used? Tuesday, March 10, 2009
  • 10. Meaningful Names If a name requires a comment, then the name does not reveal its intent avoid disinformation don't use type information in names (example: personList) Spelling similar concepts similarly is information. Using inconsistent spellings is disinformation. Tuesday, March 10, 2009
  • 12. Good and Bad Comments • Public API Comments • Redundant Comments • Legal Comments • Noise Comments • Explanation of Intent • Position Markers • Warning for • Closing Brace Comments • Commented-Out Code Consequences • real TODO Comments • Obsolete Comments • Nonpublic JavaDocs Tuesday, March 10, 2009
  • 13. Comments „Purpose of a comment is to explain code that does not explain itself.“ Comments do not make up for bad code Don‘t use a comment when you can use a function or a variable Comments can contains lies Tuesday, March 10, 2009
  • 15. Functions The goal is to tell the story of the system. „The first rule of functions is that they should be small.“ Do One Thing! Stepdown Rule Tuesday, March 10, 2009
  • 16. Functions Ideal number of arguments is zero More than three should‘t be used anyway Flag arguments are ugly. Avoid output arguments Side effects are lies. Tuesday, March 10, 2009
  • 17. Objects and Data Structures Tuesday, March 10, 2009
  • 18. Objects hide data and expose functions easy to add new objects hard to add new behaviors Tuesday, March 10, 2009
  • 19. Data Structures expose data and have no meaningful functions easy to add new behaviors hard to add new data structures Choose the approach that is best for the job. Tuesday, March 10, 2009
  • 21. Error Handling Write code that is clean and rebust See error handling as a separate concern Use exceptions rather than return codes Use unchecked exceptions Tuesday, March 10, 2009
  • 22. Error Handling Don‘t return NULL throwing an exception or a special case object like „Collections.emptyList()“ Don‘t pass NULL InvalidArgumentExceptions or assert better: forbid passing NULL by default Tuesday, March 10, 2009
  • 24. Unit Tests Test Driven Development (TDD) test and production code are written together tests just a few seconds ahead Keeping tests clean Test code is just as important as production code. Tuesday, March 10, 2009
  • 25. Unit Tests One Assert or Single Concept per Test F.I.R.S.T. Fast Independent Repeatable (in any environment) Self-Validation Timly Tuesday, March 10, 2009
  • 26. Thanks - Any Questions? Tuesday, March 10, 2009
  • 27. Sources Book „Clean Code“ by Robert C. Martin ISBN: 0132350882 Images http://www.failblog.org http://www.flickr.com/photos/hugovk/199425487/ http://www.flickr.com/photos/jackpot321/1809424991/ http://www.osnews.com/story/19266/WTFs_m Tuesday, March 10, 2009

Editor's Notes