Shuhari is a term that describes the phases or learning in Japanese arts and is considered a part of some martial arts like Aikidō. Learning can be decomposed into three phases:
- 守 – Conformance
- Learning while conforming to the rules.
- 破 – Deviation
- Developing one’s own style, breaking some rules
- 離 – transcendence
- Building one’s own rules
While reading about the subject on the internet, I found an interesting blog post called The Fallacy of Shu-Ha-Ri, which discusses the application of that principle to computer science. It is not so much a criticism of the decomposition than a realisation that it cannot really be applied in a chaotic medium like computer science: what is the point of mastering some technique if you are not sure that said tool is the solution.
To me shuhari looks like a good model once you have accepted a given path. Unsurprisingly, Japanese arts are divided into ways (道), early on, you choose a way and you follow it until you transcend it; not exactly the way things work in computer science.
Reflecting on my situation, there are a very few tools that have stayed around since I started dabbling with computers, having learnt the trade on Commodore 64 with BASIC and 6510 assembly. I learnt C programming in 1992, at the University of Geneva and I’m still coding in C++ these days, but the difference between the two languages is pretty large. In C++, I would say I’m at somewhere between SHU and HA: can’t say I’m fully mastering it, but sometimes bending some rules and using advanced features.