Sunday, June 5, 2016

The Clean Coder: A Code of Conduct for Professional Programmers

Martin, Robert C. (2011). The Clean Coder: A Code of Conduct for Professional Programmers. Old Tappan, NJ: Pearson Education Inc.


The book, "The Clean Coder", focuses on aspects of the working life of a programmer in the software industry. Robert C. Martin ("Uncle Bob"), through this book emphasizes on the various aspects in which a programmer can be and appear "professional". He explores, through his long experience as a programmer, the behavior of software developers and how they are perceived by other professionals in the industry.

This book can be described as a manual for the coming-of-age of a software development professional from a scruffy hacker who would be non-committal and tardy to a clean coder who asserts professionalism through her behavior and work. I have personally had an education in professional software development through the software engineering program for my masters. I have described in previous posts how software engineering is different from Computer Science. This book, although does not acknowledge that difference, emphasizes on the needs of the industry which closely match with the software engineering discipline.

Valuable Insights

The book visits various aspects of software development ranging from inter-personal conduct to self-improvement to growth as a professional coder. The following aspects stood out to me. 

Work Ethic

[Page 16 | Professionalism]

The first chapter of the book gets right down into the behavioral facets of a professional. An individual's career is their own responsibility. This requires them to maintain a work ethic which distances them from their employers in a way. One of the usually observed behavior traits from employees is when they feel entitled to certain perks from the employer regarding the career development of the employee.

The employer is not responsible for how the employee's career shapes up. The employer has and must have a professional business relationship with the employee. This means that the employee must demonstrate that the employer receives the services that they have agreed upon. The employer may have the employee undergo a training program or attend conferences on behalf of the company. This should not be looked at as a perk void any benefit to the employer. 

This leads to the programmer being committed to deliver the services promised to the company in the promised time. A part of this also means that the employee must not work beyond the commitment. This ensures that the work of the professional is valued.

Being a "Team Player"

[Page 30 | Saying No]

One of the key attributes of a professional, which probably is a cliché in job postings and resumés alike, is that of being a "team player". However, very few care to explain what the term really means. One tends to translate the phrase to being person who always agrees with the team or expresses agreement on behalf of the team. 

A team player, as Martin explains, is a person who "communicates frequently, keeps an eye out for his or her teammates, and executes his or her own responsibilities as well as possible." He further goes on describe a conversation between two colleagues who are trying to negotiate the estimates of work to be completed. We see that Mike has already committed on providing a demo to the Director of Development, Don, on behalf of the team without consulting the team. He later tries to push Paula towards his personal goals of impressing Don. Paula, however, stands strong and defends the team from taking an impossible task. The author shows how Don may perceive Mike as a team player as he might be able to get the team do a difficult task, but Paula is the real team player who stands up and defends the team's interests.

I have experienced this at multiple occasions in my professional life where someone commits on behalf of the team and ends up wildly overestimating the efforts. This results in a low morale in the team as they have to put an extra effort in fulfilling a commitment they weren't a part of. A professional must be a team player; she should play for the team.


[Page 127 | Time Management]

Away from the inter-personal behavior highlighted earlier, the author later in the book throws light on personal behavior and management. This includes managing one's time to achieve better productivity. An important part of managing time is to be able to focus on the tasks at hand.

Martin describes the ability to focus as a scarce resource not unlike the biblical manna or its namesake from role-playing games like Dungeons & Dragons. We are most productive in writing code when our focus-manna is high and we feel its lack when we lose alertness and attention. Perhaps, it is similar to a writer's block. He goes on to explain how certain activities can affect our focus-manna.

  • Sleep: One must have an adequate amount of sleep to be productive. I cannot agree more with this statement. I have personally experienced, and I am sure a lot of people have, the lack of alertness and focus when I had inadequate sleep which cannot be helped even with a healthy serving of caffeine.
  • Caffeine: I do not entirely agree with the author on the use of caffeine to create alertness. I do drink a good amount of coffee in a day myself, which sometimes makes me jittery. However, I feel that the jury is still out on the effectiveness of caffeine on someone who is not in the habit of drinking it.
  • Recharging: One other way to refresh the focus-manna is to recharge by de-focussing. One may go for a walk or focus on a more mundane task between high points of productivity to recharge.
  • Muscle Focus: Coding is a sedentary job in most cases. Some may have a standing desk set up to be able to stand while they work. Nonetheless, in almost all cases, we can say that software development lacks any physical exertion. It is important to balance the mental stress endured during programming with a physical activity like biking or running or playing a sport.


The Clean Coder makes an excellent case for a programmer right out of school or with a limited experience to become a software engineer. A professional is in a pursuit of honing her skills while providing great values to her professional relations including employers, employees, business partners, colleagues, and herself.

1 comment:

  1. I thought the magical one was spelled "mana."

    One thing about this book is that the tone seems very authoritarian, end-all-be-all, your life is software development now and the like. I drink coffee because I like too, not necessarily because I think it will impact my work.