We (Clean Coders) are Samurai.
No, we don't carry katanas, nor do we fight in duels to death. But we do practice Bushido - the way of the warrior - Software Craftsmanship.
For the Software Craftsman, writing code is not just a job; it's a way of life.
I have long been a proponent of Software Craftsmanship.
Miyamoto Musashi is the most famous samurai (the original kind from feudal Japan), having emerged undefeated from 62 duels... most of them to the death! So good, was Musashi, that he famously arrived for a dual with a wooden sword he had carve from an oar on his boat ride over. Basically, he showed up to sword fight with a stick, and won.
After a long life as a warrior, and as a swordsman, Musashi adopted a reclusive lifestyle, living in a cave, while he wrote his magnum opus, The Book of Five Rings. In this book he documented his philosophies and his way, and shortly after completing it, he died. That was nearly 400 years ago.
Mushashi was a Craftsman. I often compare his craftsmanship to that of Software Craftsmanship. He exemplifies Bushido, having lived the way of the warrior. His dedication to his craft is legendary. And this is how I knew Musashi, as a legend, until recently.
You see, 4 years ago, my younger son, and later my wife, inspired me to join them in Kenpo Karate. It has been a joy to learn with my family, re-enter the world of martial arts, and practice with the amazing people of Legacy Martial Arts. In preparation for our black belt test, there is some optional reading. To my delight, Master Calentog selected The Book of Five Rings, or rather a translation by Stephen F. Kaufman - Musashi's Book of Five Rings for Everyone. What a great excuse to learn more about Musashi and know him by his own words (translated)!
What follows is a light overview of Musashi's Book of Five Rings. I've selected a few poignant quotes from each book and added a bit of commentary.
I was struck within the first few pages of the Book of Five Rings. These words, written 400 years ago, by a man I know only by legend, sound so familiar... they sound like... me. Aside from the craftsmanship we share, I have nothing in common with Musashi. We come from different times, different countries, different professions, not to mention that I have not been in a single duel to the death, let alone 62 of them. Yet, over an over again, I found myself shocked at how familiar his words hit me.
Here is an example from The Book of Earth:
"To become well-rounded, it is necessary to see other forms of discipline, and yes, adopt some of the principles into your own craft. Why? Because you will eventually notice all things are the same except for specific characteristics."
Compare that to an entry I wrote for "The Wondering Book - Zeitgeist of the Software Craftsmanship Movement":
By far, the most verbose of the 5 rings, is about fundamentals. Fundamentals not of swordsmanship, but of any art or craft. I had assumed all 5 rings would be about sword fighting, or battle. I was wrong. The topic is mentioned fleetingly two or three times in the work. The wisdom shared by Musashi is applicable to craftsmanship at large.
Discipline is the divider between professional software developers, and hacks. Ask anyone at Clean Coders about disciplines, They'll rattle off a long list: Test Driven Development, Continuous Integration, Collective Ownership, etc. These allow our teams to "work in harmony", as Musashi puts it, and ensure quality. Software developers without disciplines cannot assure quality and will find themselves lost in a mess of code.
Yes! No tool will fit your need better than a tool you make yourself. Maybe there's an open source library that you can modify, or less commonly, a paid product that will solve your problem, if you can afford it. But don't fear the opportunity to build your own tools.
I cringe when people label themselves as a "Java Developer", "Frontend Developer", or "SPECIFIC SILO HERE Developer". Why limit yourself? Hear Musashi! Be a Software Craftsman; Fear no tool nor technology!
Water has a natural flow, as does "the spirit of the thing itself", in our case, the spirit of Software Craftsmanship.
First, practice. Do you practice? That is, do you write code off hours, on your own time? Practice is essential if you are to progress on your road to mastery. Furthermore, you must practice the way wish perform on the job. Even on your side projects, utilize the disciplines you use when you get paid to code.
A lot of developers start off by learning Javascript. Why? Because it's easy to learn. Too often they stop there. Is Javascript the best tool? Sometimes, for code that has to run in the browser. More often than not, Javascript is a terrible tool, and other programming languages do a much better job. Always be on the hunt for better languages, editors, shell commands, and tools in general.
It is a joy to watch masters at work. The precision, finesse, efficiency... it's beautiful. Whether it be martial artists sparring, grand masters in a game of speed chess, or a wood-worker building a table. I am mesmerised by this type of content on YouTube more then I'd like to admit. Add to that, Software Craftsman performing a code kata. Regardless of the craft, the mastery, or lack thereof, is instantly apparent.
Fire is passion, and the fire must be fed to excell at your craft.
We must leave our comfort zone to grow. Imagine a programmer with 30 years of experience, working on one piece of software, in the same language, using the same tools, year after year. Is he a master? Probably not. He likely has 1 year of experience, repeated 30 times.
Journey is part of craftsmanship. We must be adventurous in our craft, try out new techniques, always learning.
As Master C. says: "A Black Belt is a White Belt who never quit." Perseverance is a ubiquitous trait amongst master craftsmen. Seek out challenging problems. Maybe you're intimidated by functional programming languages, or embedded code, or GUI programming. Embrace those fears and conquer them.
What a comfort that is; to know that there will always be more to learn, more to grow, more fun to be had. This is especially true in software, where the scenery is always changing and if you don't keep moving, the industry will pass you by.
A delightful list of all the things you don't need to care about.
There's no way to avoid the fact that mastery requires hard work and years of dedication. That doesn't stop people from looking for shortcuts. Perhaps the most recent shortcut I see programmers reach for, is AI. Yes, AI can be a great tool. I use it from time to time. But in its current state, AI can confidently take you down the road to failure. It takes a skilled practitioner to identify the warning signs and avoid the pitfalls.
We all know that guy. It's embarrassing. Unless you're Steven Segal or Hulk Hogan, who's job it is to entertain and make people laugh, humility will serve you well.
This is a valuable lesson I learned as a teen from my Jujitsu sensei, Mike Sabo. It is a heavy burden to care what people think about you. The moment you stop caring, a weight is lifted from your shoulders and you become free. And once freed, you can flourish as yourself, and as "the spirit of the thing itself".
I am still chewing on this book, and I fear I may need the rest of my life to digest it.
Thank you, dear reader, for making it this far through my blog. Please consider reading Stephen F. Kaufman's book - Musashi's Book of Five Rings for Everyone. I am going to encourage our Clean Coders book club to put this one on top of the list.
Now, rather than try to explain no-thing, I will leave you with these quotes.