
Clean Code A Handbook of Agile Software Craftsmanship
by Martin, Robert C.-
This Item Qualifies for Free Shipping!*
*Excludes marketplace orders.
-
We Buy This Book Back!
-
Complimentary 7-Day eTextbook Access - Read more
When you rent or buy this book, you will receive complimentary 7-day online access to the eTextbook version from your PC, Mac, tablet, or smartphone. Feature not included on Marketplace Items.
Buy New
Rent Book
Rent Digital
Used Book
We're Sorry
Sold Out
How Marketplace Works:
- This item is offered by an independent seller and not shipped from our warehouse
- Item details like edition and cover design may differ from our description; see seller's comments before ordering.
- Sellers much confirm and ship within two business days; otherwise, the order will be cancelled and refunded.
- Marketplace purchases cannot be returned to eCampus.com. Contact the seller directly for inquiries; if no response within two days, contact customer service.
- Additional shipping costs apply to Marketplace purchases. Review shipping costs at checkout.
Summary
Author Biography
Table of Contents
Foreword | p. xix |
Introduction | p. xxv |
On the Cover | p. xxix |
Clean Code | p. 1 |
There Will Be Code | p. 2 |
Bad Code | p. 3 |
The Total Cost of Owning a Mess | p. 4 |
Schools of Thought | p. 12 |
We Are Authors | p. 13 |
The Boy Scout Rule | p. 14 |
Prequel and Principles | p. 15 |
Conclusion | p. 15 |
Bibliography | p. 15 |
Meaningful Names | p. 17 |
Introduction | p. 17 |
Use Intention-Revealing Names | p. 18 |
Avoid Disinformation | p. 19 |
Make Meaningful Distinctions | p. 20 |
Use Pronounceable Names | p. 21 |
Use Searchable Names | p. 22 |
Avoid Encodings | p. 23 |
Avoid Mental Mapping | p. 25 |
Class Names | p. 25 |
Method Names | p. 25 |
Don't Be Cute | p. 26 |
Pick One Word per Concept | p. 26 |
Don't Pun | p. 26 |
Use Solution Domain Names | p. 27 |
Use Problem Domain Names | p. 27 |
Add Meaningful Context | p. 27 |
Don't Add Gratuitous Context | p. 29 |
Final Words | p. 30 |
Functions | p. 31 |
Small! | p. 34 |
Do One Thing | p. 35 |
One Level of Abstraction per Function | p. 36 |
Switch Statements | p. 37 |
Use Descriptive Names | p. 39 |
Function Arguments | p. 40 |
Have No Side Effects | p. 44 |
Command Query Separation | p. 45 |
Prefer Exceptions to Returning Error Codes | p. 46 |
Don't Repeat Yourself | p. 48 |
Structured Programming | p. 48 |
How Do You Write Functions Like This? | p. 49 |
Conclusion | p. 49 |
SetupTeardownIncluder | p. 50 |
Bibliography | p. 52 |
Comments | p. 53 |
Comments Do Not Make Up for Bad Code | p. 55 |
Explain Yourself in Code | p. 55 |
Good Comments | p. 55 |
Bad Comments | p. 59 |
Bibliography | p. 74 |
Formatting | p. 75 |
The Purpose of Formatting | p. 76 |
Vertical Formatting | p. 76 |
Horizontal Formatting | p. 85 |
Team Rules | p. 90 |
Uncle Bob's Formatting Rules | p. 90 |
Objects and Data Structures | p. 93 |
Data Abstraction | p. 93 |
Data/Object Anti-Symmetry | p. 95 |
The Law of Demeter | p. 97 |
Data Transfer Objects | p. 100 |
Conclusion | p. 101 |
Bibliography | p. 101 |
Error Handling | p. 103 |
Use Exceptions Rather Than Return Codes | p. 104 |
Write Your Try-Catch-Finally Statement First | p. 105 |
Use Unchecked Exceptions | p. 106 |
Provide Context with Exceptions | p. 107 |
Define Exception Classes in Terms of a Caller's Needs | p. 107 |
Define the Normal Flow | p. 109 |
Don't Return Null | p. 110 |
Don't Pass Null | p. 111 |
Conclusion | p. 112 |
Bibliography | p. 112 |
Boundaries | p. 113 |
Using Third-Party Code | p. 114 |
Exploring and Learning Boundaries | p. 116 |
Learning log4j | p. 116 |
Learning Tests Are Better Than Free | p. 118 |
Using Code That Does Not Yet Exist | p. 118 |
Clean Boundaries | p. 120 |
Bibliography | p. 120 |
Unit Tests | p. 121 |
The Three Laws of TDD | p. 122 |
Keeping Tests Clean | p. 123 |
Clean Tests | p. 124 |
One Assert per Test | p. 130 |
F.I.R.S.T | p. 132 |
Conclusion | p. 133 |
Bibliography | p. 133 |
Classes | p. 135 |
Class Organization | p. 136 |
Classes Should Be Small! | p. 136 |
Organizing for Change | p. 147 |
Bibliography | p. 151 |
Systems | p. 153 |
How Would You Build a City? | p. 154 |
Separate Constructing a System from Using It | p. 154 |
Scaling Up | p. 157 |
Java Proxies | p. 161 |
Pure Java AOP Frameworks | p. 163 |
AspectJ Aspects | p. 166 |
Test Drive the System Architecture | p. 166 |
Optimize Decision Making | p. 167 |
Use Standards Wisely, When They Add Demonstrable Value | p. 168 |
Systems Need Domain-Specific Languages | p. 168 |
Conclusion | p. 169 |
Bibliography | p. 169 |
Emergence | p. 171 |
Getting Clean via Emergent Design | p. 171 |
Simple Design Rule 1: Runs All the Tests | p. 172 |
Simple Design Rules 2-4: Refactoring | p. 172 |
No Duplication | p. 173 |
Expressive | p. 175 |
Minimal Classes and Methods | p. 176 |
Conclusion | p. 176 |
Bibliography | p. 176 |
Concurrency | p. 177 |
Why Concurrency? | p. 178 |
Challenges | p. 180 |
Concurrency Defense Principles | p. 180 |
Know Your Library | p. 182 |
Know Your Execution Models | p. 183 |
Beware Dependencies Between Synchronized Methods | p. 185 |
Keep Synchronized Sections Small | p. 185 |
Writing Correct Shut-Down Code Is Hard | p. 186 |
Testing Threaded Code | p. 186 |
Conclusion | p. 190 |
Bibliography | p. 191 |
Successive Refinement | p. 193 |
Table of Contents provided by Publisher. All Rights Reserved. |
Excerpts
An electronic version of this book is available through VitalSource.
This book is viewable on PC, Mac, iPhone, iPad, iPod Touch, and most smartphones.
By purchasing, you will be able to view this book online, as well as download it, for the chosen number of days.
Digital License
You are licensing a digital product for a set duration. Durations are set forth in the product description, with "Lifetime" typically meaning five (5) years of online access and permanent download to a supported device. All licenses are non-transferable.
More details can be found here.
A downloadable version of this book is available through the eCampus Reader or compatible Adobe readers.
Applications are available on iOS, Android, PC, Mac, and Windows Mobile platforms.
Please view the compatibility matrix prior to purchase.