
Clean Code: A Handbook of Agile Software Craftsmanship
Clean Code is one of the top 5 recommended reading for Software Developers. The Book is divided into 3 parts.
- principles, practices of writing clean code.
- Case studies (take days to complete).
- Nutshell containing heuristics.
Introduction
There are two parts to learning:
- Craftsmanship
- Knowledge.
Learning to Clean Code is hard work. It requires practice.
As the mess builds, the productivity of the team continues to decrease, asymptotically approaching zero.
The time spent on reading vs writing code is 10:1. So, code should be written as clean as possible.
Meaningful Names
use intention revealing names
The name should tell you why it exists.
Eg. of bad name.
int d
Eg of good name.
int elapsedTimeInDays;
Avoid disinformation
Don’t name variable with reserved keyword like accountList unless it is really a list.
Name it accountGroup
Make meaningful distinctions.
Programmer make mistakes when they write variable names solely to satisfy the compiler or interpreter. Don’t add noise words or random numbers to make distinct variables.
Number series naming
it is non-informative as it provides no context.
(a1,a2...an)
Noise words
Noise words are words like variable table which adds no additional meaning to the variable name.
Use distinct names
Names such as money and moneyAccount are difficult to distinguish and creates ambiguity.
Use pronounceable Names
Use names like generationTimestamp instead of genymdnms
Use searchable Names
Use searchable names instead of constants.
Use MAX_CLASSES_PER_STUDENT instead of 7
Avoid Encodings
Member prefixes
Avoid member prefixes.
Your class should be small enough to that you don’t need them.
Example.. use String description instead of String m_desc
Interface and implementation
The I in IShapeFactory provides too much information.
Its better to name it as ShapeFactory.
Its better to encode the implementation with either ShapeFactoryImpl or CShapeFactory
Avoid mental Mapping
Use single letters i,j,k when the scope is very small. This adds the overhead of mapping the letters to its original context.
Clarity is the king.
Class Names
Class name should be a noun or noun phrase like Customer , WikiPage
Account AddressParser.
Avoid words like Manager, Data, Processor in the name of a class.
Method Names
Methods should have verb or verb phrase.
postPayment, deletePage, save
When constructors are overloaded
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
is better thanComplex fulcrumPoint = new Complex(23.0);
so, use static methods for this.
Make constructor private to enforce this.
Don’t use slangs or cultural jokes
- Use
deleteItemsinstead ofholyHandGrenades. - use
killinstead ofwhack
Pick one word per concept
Be clear.
- The words
fetch,retrieveandgetimply same meaning. - Pick one word per abstract concept.
use solution Domain Names
- Use names from computer science.
- Most programmer would know about JobQueue or AccountVisitor implying visitor pattern.
Use problem domain names
- Separating solution and problem domain concepts is part of the job of a good programmer.
- Use names from problem domain when there is no programming name for what you are doing.

