{"product_id":"clean-code-a-handbook-of-agile-software-craftsmanship","title":"Clean Code: A Handbook of Agile Software Craftsmanship","description":"\u003ctable align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\"\u003e\n\u003ctr\u003e\n\u003ctd class=\"productDetailSmallElements\"\u003e\n\u003cp\u003e\n\u003cstrong\u003eMarc Notes\u003c\/strong\u003e:\u003cbr\u003e\n\t\t\t\t\t\t\t\tIncludes bibliographical references and index.\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003eBrief Description\u003c\/strong\u003e:\u003cbr\u003e\n\t\t\t\t\t\t\t\tEven bad code can function. But if code isn't clean, it can bring a development organisation to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way. \n\u003c\/p\u003e\n\u003cp\u003eNoted software expert Robert C. Martin presents a revolutionary paradigm with \u003cem\u003eClean Code: A Handbook of Agile Software Craftsmanship\u003c\/em\u003e. Martin has teamed up with his colleagues from Object Mentor to distil their best agile practice of cleaning code \"on the fly\" into a book that will instil within you the values of a software craftsman and make you a better programmer--but only if you work at it. \u003c\/p\u003e\n\u003cp\u003eWhat kind of work will you be doing? You'll be reading code--lots of code. And you will be challenged to think about what's right about that code, and what's wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft. \u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eClean Code\u003c\/em\u003e is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code--of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and \"smells\" gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. \u003c\/p\u003e\n\u003cp\u003eReaders will come away from this book understanding \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHow to tell the difference between good and bad code \u003c\/li\u003e\n\u003cli\u003eHow to write good code and how to transform bad code into good code \u003c\/li\u003e\n\u003cli\u003eHow to create good names, good functions, good objects, and good classes \u003c\/li\u003e\n\u003cli\u003eHow to format code for maximum readability \u003c\/li\u003e\n\u003cli\u003eHow to implement complete error handling without obscuring code logic \u003c\/li\u003e\n\u003cli\u003eHow to unit test and practice test-driven development \u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003eJacket Description\/Back\u003c\/strong\u003e:\u003cbr\u003e\n\t\t\t\t\t\t\t\tEven bad code can function. But if code isn't clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way. \n\u003cp\u003e\u003c\/p\u003eNoted software expert Robert C. Martin presents a revolutionary paradigm with \n\u003ci\u003e\u003cb\u003eClean Code: A Handbook of Agile Software Craftsmanship\u003c\/b\u003e\u003c\/i\u003e. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code \"on the fly\" into a book that will instill within you the values of a software craftsman and make you a better programmer--but only if you work at it. \n\u003cp\u003e\u003c\/p\u003eWhat kind of work will you be doing? You'll be reading code--lots of code. And you will be challenged to think about what's right about that code, and what's wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft. \n\u003cp\u003e\u003c\/p\u003e\n\u003ci\u003e\u003cb\u003eClean Code\u003c\/b\u003e\u003c\/i\u003e is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code--of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and \"smells\" gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. \n\u003cp\u003e\u003c\/p\u003eReaders will come away from this book understanding \n\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eHow to tell the difference between good and bad code \u003c\/li\u003e\n\u003cli\u003eHow to write good code and how to transform bad code into good code \u003c\/li\u003e\n\u003cli\u003eHow to create good names, good functions, good objects, and good classes \u003c\/li\u003e\n\u003cli\u003eHow to format code for maximum readability \u003c\/li\u003e\n\u003cli\u003eHow to implement complete error handling without obscuring code logic \u003c\/li\u003e\n\u003cli\u003eHow to unit test and practice test-driven development\u003c\/li\u003e\n\u003c\/ul\u003eThis book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code. \n\u003cp\u003e\u003c\/p\u003e\n\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003eBiographical Note\u003c\/strong\u003e:\u003cbr\u003e\n\u003cb\u003eRobert C. \"Uncle Bob\" Martin \u003c\/b\u003ehas been a software professional since 1970 and an international software consultant since 1990. He is founder and president of Object Mentor, Inc., a team of experienced consultants who mentor their clients worldwide in the fields of C++, Java, C#, Ruby, OO, Design Patterns, UML, Agile Methodologies, and eXtreme programming.\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003eTable of Contents\u003c\/strong\u003e:\u003cbr\u003e\n\u003ci\u003e\u003cb\u003eForeword xix\u003cbr\u003eIntroduction xxv\u003cbr\u003eOn the Cover xxix\u003c\/b\u003e\u003c\/i\u003e\n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 1: Clean Code 1\u003c\/b\u003e\n\u003cbr\u003eThere Will Be Code 2 \n\u003cbr\u003eBad Code 3 \n\u003cbr\u003eThe Total Cost of Owning a Mess 4 \n\u003cbr\u003eSchools of Thought 12 \n\u003cbr\u003eWe Are Authors 13 \n\u003cbr\u003eThe Boy Scout Rule 14 \n\u003cbr\u003ePrequel and Principles 15 \n\u003cbr\u003eConclusion 15 \n\u003cbr\u003eBibliography 15 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 2: Meaningful Names 17\u003c\/b\u003e\n\u003cbr\u003eIntroduction 17 \n\u003cbr\u003eUse Intention-Revealing Names 18 \n\u003cbr\u003eAvoid Disinformation 19 \n\u003cbr\u003eMake Meaningful Distinctions 20 \n\u003cbr\u003eUse Pronounceable Names 21 \n\u003cbr\u003eUse Searchable Names 22 \n\u003cbr\u003eAvoid Encodings 23 \n\u003cbr\u003eAvoid Mental Mapping 25 \n\u003cbr\u003eClass Names 25 \n\u003cbr\u003eMethod Names 25 \n\u003cbr\u003eDon't Be Cute 26 \n\u003cbr\u003ePick One Word per Concept 26 \n\u003cbr\u003eDon't Pun 26 \n\u003cbr\u003eUse Solution Domain Names 27 \n\u003cbr\u003eUse Problem Domain Names 27 \n\u003cbr\u003eAdd Meaningful Context 27 \n\u003cbr\u003eDon't Add Gratuitous Context 29 \n\u003cbr\u003eFinal Words 30 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 3: Functions 31\u003c\/b\u003e\n\u003cbr\u003eSmall! 34 \n\u003cbr\u003eDo One Thing 35 \n\u003cbr\u003eOne Level of Abstraction per Function 36 \n\u003cbr\u003eSwitch Statements 37 \n\u003cbr\u003eUse Descriptive Names 39 \n\u003cbr\u003eFunction Arguments 40 \n\u003cbr\u003eHave No Side Effects 44 \n\u003cbr\u003eCommand Query Separation 45 \n\u003cbr\u003ePrefer Exceptions to Returning Error Codes 46 \n\u003cbr\u003eDon't Repeat Yourself 48 \n\u003cbr\u003eStructured Programming 48 \n\u003cbr\u003eHow Do You Write Functions Like This? 49 \n\u003cbr\u003eConclusion 49 \n\u003cbr\u003eSetupTeardownIncluder 50 \n\u003cbr\u003eBibliography 52 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 4: Comments 53\u003c\/b\u003e\n\u003cbr\u003eComments Do Not Make Up for Bad Code 55 \n\u003cbr\u003eExplain Yourself in Code 55 \n\u003cbr\u003eGood Comments 55 \n\u003cbr\u003eBad Comments 59 \n\u003cbr\u003eBibliography 74 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 5: Formatting 75\u003c\/b\u003e\n\u003cbr\u003eThe Purpose of Formatting 76 \n\u003cbr\u003eVertical Formatting 76 \n\u003cbr\u003eHorizontal Formatting 85 \n\u003cbr\u003eTeam Rules 90 \n\u003cbr\u003eUncle Bob's Formatting Rules 90 \n\u003cbr\u003eChapter 6: Objects and Data Structures 93 \n\u003cbr\u003eData Abstraction 93 \n\u003cbr\u003eData\/Object Anti-Symmetry 95 \n\u003cbr\u003eThe Law of Demeter 97 \n\u003cbr\u003eData Transfer Objects 100 \n\u003cbr\u003eConclusion 101 \n\u003cbr\u003eBibliography 101 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 7: Error Handling 103\u003c\/b\u003e\n\u003cbr\u003eUse Exceptions Rather Than Return Codes 104 \n\u003cbr\u003eWrite Your Try-Catch-Finally Statement First 105 \n\u003cbr\u003eUse Unchecked Exceptions 106 \n\u003cbr\u003eProvide Context with Exceptions 107 \n\u003cbr\u003eDefine Exception Classes in Terms of a Caller's Needs 107 \n\u003cbr\u003eDefine the Normal Flow 109 \n\u003cbr\u003eDon't Return Null 110 \n\u003cbr\u003eDon't Pass Null 111 \n\u003cbr\u003eConclusion 112 \n\u003cbr\u003eBibliography 112 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 8: Boundaries 113\u003c\/b\u003e\n\u003cbr\u003eUsing Third-Party Code 114 \n\u003cbr\u003eExploring and Learning Boundaries 116 \n\u003cbr\u003eLearning log4j 116 \n\u003cbr\u003eLearning Tests Are Better Than Free 118 \n\u003cbr\u003eUsing Code That Does Not Yet Exist 118 \n\u003cbr\u003eClean Boundaries 120 \n\u003cbr\u003eBibliography 120 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 9: Unit Tests 121\u003c\/b\u003e\n\u003cbr\u003eThe Three Laws of TDD 122 \n\u003cbr\u003eKeeping Tests Clean 123 \n\u003cbr\u003eClean Tests 124 \n\u003cbr\u003eOne Assert per Test 130 \n\u003cbr\u003eF.I.R.S.T. 132 \n\u003cbr\u003eConclusion 133 \n\u003cbr\u003eBibliography 133 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 10: Classes 135\u003c\/b\u003e\n\u003cbr\u003eClass Organization 136 \n\u003cbr\u003eClasses Should Be Small! 136 \n\u003cbr\u003eOrganizing for Change 147 \n\u003cbr\u003eBibliography 151 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 11: Systems 153\u003c\/b\u003e\n\u003cbr\u003eHow Would You Build a City? 154 \n\u003cbr\u003eSeparate Constructing a System from Using It 154 \n\u003cbr\u003eScaling Up 157 \n\u003cbr\u003eJava Proxies 161 \n\u003cbr\u003ePure Java AOP Frameworks 163 \n\u003cbr\u003eAspectJ Aspects 166 \n\u003cbr\u003eTest Drive the System Architecture 166 \n\u003cbr\u003eOptimize Decision Making 167 \n\u003cbr\u003eUse Standards Wisely, When They Add Demonstrable Value 168 \n\u003cbr\u003eSystems Need Domain-Specific Languages 168 \n\u003cbr\u003eConclusion 169 \n\u003cbr\u003eBibliography 169 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 12: Emergence 171\u003c\/b\u003e\n\u003cbr\u003eGetting Clean via Emergent Design 171 \n\u003cbr\u003eSimple Design Rule 1: Runs All the Tests 172 \n\u003cbr\u003eSimple Design Rules 2-4: Refactoring 172 \n\u003cbr\u003eNo Duplication 173 \n\u003cbr\u003eExpressive 175 \n\u003cbr\u003eMinimal Classes and Methods 176 \n\u003cbr\u003eConclusion 176 \n\u003cbr\u003eBibliography 176 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 13: Concurrency 177\u003c\/b\u003e\n\u003cbr\u003eWhy Concurrency? 178 \n\u003cbr\u003eChallenges 180 \n\u003cbr\u003eConcurrency Defense Principles 180 \n\u003cbr\u003eKnow Your Library 182 \n\u003cbr\u003eKnow Your Execution Models 183 \n\u003cbr\u003eBeware Dependencies Between Synchronized Methods 185 \n\u003cbr\u003eKeep Synchronized Sections Small 185 \n\u003cbr\u003eWriting Correct Shut-Down Code Is Hard 186 \n\u003cbr\u003eTesting Threaded Code 186 \n\u003cbr\u003eConclusion 190 \n\u003cbr\u003eBibliography 191 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 14: Successive Refinement 193\u003c\/b\u003e\n\u003cbr\u003eArgs Implementation 194 \n\u003cbr\u003eArgs: The Rough Draft 201 \n\u003cbr\u003eString Arguments 214 \n\u003cbr\u003eConclusion 250 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 15: JUnit Internals 251\u003c\/b\u003e\n\u003cbr\u003eThe JUnit Framework 252 \n\u003cbr\u003eConclusion 265 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 16: Refactoring SerialDate 267\u003c\/b\u003e\n\u003cbr\u003eFirst, Make It Work 268 \n\u003cbr\u003eThen Make It Right 270 \n\u003cbr\u003eConclusion 284 \n\u003cbr\u003eBibliography 284 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eChapter 17: Smells and Heuristics 285\u003c\/b\u003e\n\u003cbr\u003eComments 286 \n\u003cbr\u003eEnvironment 287 \n\u003cbr\u003eFunctions 288 \n\u003cbr\u003eGeneral 288 \n\u003cbr\u003eJava 307 \n\u003cbr\u003eNames 309 \n\u003cbr\u003eTests 313 \n\u003cbr\u003eConclusion 314 \n\u003cbr\u003eBibliography 315 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eAppendix A: Concurrency II 317\u003c\/b\u003e\n\u003cbr\u003eClient\/Server Example 317 \n\u003cbr\u003ePossible Paths of Execution 321 \n\u003cbr\u003eKnowing Your Library 326 \n\u003cbr\u003eDependencies Between Methods Can Break Concurrent Code 329 \n\u003cbr\u003eIncreasing Throughput 333 \n\u003cbr\u003eDeadlock 335 \n\u003cbr\u003eTesting Multithreaded Code 339 \n\u003cbr\u003eTool Support for Testing Thread-Based Code 342 \n\u003cbr\u003eConclusion 342 \n\u003cbr\u003eTutorial: Full Code Examples 343 \n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eAppendix B: org.jfree.date.SerialDate 349\u003c\/b\u003e\n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003eAppendix C: Cross References of Heuristics 409\u003c\/b\u003e\n\u003cp\u003e\u003c\/p\u003e\n\u003cb\u003e\u003ci\u003eEpilogue 411\u003cbr\u003eIndex 413\u003c\/i\u003e\u003c\/b\u003e\n\u003cp\u003e\u003c\/p\u003e\n\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003ePublisher Marketing\u003c\/strong\u003e:\u003cbr\u003e\n\t\t\t\t\t\t\t\tEven bad code can function. But if code isn't clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way. \n\u003cp\u003e\u003c\/p\u003eNoted software expert Robert C. Martin presents a revolutionary paradigm with \n\u003ci\u003e\u003cb\u003eClean Code: A Handbook of Agile Software Craftsmanship\u003c\/b\u003e\u003c\/i\u003e. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code \"on the fly\" into a book that will instill within you the values of a software craftsman and make you a better programmer--but only if you work at it. \n\u003cp\u003e\u003c\/p\u003eWhat kind of work will you be doing? You'll be reading code--lots of code. And you will be challenged to think about what's right about that code, and what's wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft. \n\u003cp\u003e\u003c\/p\u003e\n\u003ci\u003e\u003cb\u003eClean Code\u003c\/b\u003e\u003c\/i\u003e is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code--of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and \"smells\" gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. \n\u003cp\u003e\u003c\/p\u003eReaders will come away from this book understanding \n\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eHow to tell the difference between good and bad code\u003c\/li\u003e\n\u003cli\u003eHow to write good code and how to transform bad code into good code\u003c\/li\u003e\n\u003cli\u003eHow to create good names, good functions, good objects, and good classes\u003c\/li\u003e\n\u003cli\u003eHow to format code for maximum readability\u003c\/li\u003e\n\u003cli\u003eHow to implement complete error handling without obscuring code logic\u003c\/li\u003e\n\u003cli\u003eHow to unit test and practice test-driven development\u003c\/li\u003e\n\u003c\/ul\u003eThis book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code. \n\u003cp\u003e\u003c\/p\u003e\n\u003cbr\u003e\u003cbr\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\u003cp\u003e\u003cb\u003eAuthor:\u003c\/b\u003e Martin, Robert\u003cbr\u003e\u003cb\u003ePublisher:\u003c\/b\u003e Pearson\u003cbr\u003e\u003cb\u003eBinding:\u003c\/b\u003e Paperback\u003cbr\u003e\u003cb\u003ePub Date:\u003c\/b\u003e 2008-08-01\u003cbr\u003e\u003cb\u003eBISAC:\u003c\/b\u003e Computers|Software Development \u0026amp; Engineering|Quality Assurance \u0026amp; Testing|Computers|Programming|General\u003cbr\u003e\u003cb\u003eSubjects:\u003c\/b\u003e Computer software|Reliability|Agile software development\u003cbr\u003e\u003cb\u003eWeight:\u003c\/b\u003e 1.68 lbs\u003cbr\u003e\u003cb\u003eISBN:\u003c\/b\u003e 9780132350884\u003cbr\u003e\u003cb\u003eASIN:\u003c\/b\u003e -\u003cbr\u003e\u003cb\u003eSKU:\u003c\/b\u003e SP-9780132350884\u003c\/p\u003e","brand":"Pearson","offers":[{"title":"Default Title","offer_id":51154254168342,"sku":"SP-9780132350884","price":74.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0857\/9910\/8886\/files\/9780132350884_spiral.png?v=1774939544","url":"https:\/\/lusper.myshopify.com\/products\/clean-code-a-handbook-of-agile-software-craftsmanship","provider":"Lusperbooks","version":"1.0","type":"link"}