プログラミングと守破離

何かを学ぶとき「守破離」を大事にしている。

まずは師匠に言われたこと、型を「守る」ところから修行が始まる。その後、その型を自分と照らし合わせて研究することにより、自分に合った、より良いと思われる型をつくることにより既存の型を「破る」。最終的には師匠の型、そして自分自身が造り出した型の上に立脚した個人は、自分自身と技についてよく理解しているため、型から自由になり、型から「離れ」て自在になることができる。

守破離 - Wikipedia

例えば何か新しい料理。ここでいきなり独自のアレンジを加えたりはせず、とにかくレシピを忠実に再現することを目指す。万人が美味しく作れるようい創意工夫が凝らされたセンセイのやり方をとにかくまずは徹底的に真似てみるのだ。そして、何回か作ったら少しずつ隠し味を加えたり材料を変えたりしていく。

守破離のどの段階も大事だ。守ったらいつかは破り、そして離れなければならない。

なぜ離れなければならないのか。それはセンセイの教えは、生徒が混乱しないように意図的に細部を削り、不都合な箇所を端折り、基本的なエッセンスを抽出したものである(ことが多い)からだ。センセイの教えに固執していつまでも離れられず原理主義的になると、だいたいの場合現実的には使い物にならなくなるように思う。

それは勿論プログラミングにも当てはまる。デザインパターンやオブジェクト指向、テスト駆動などなど多くの考え方がある。それらは確かに多くのことを教えてくれる。だが、それを盲目的に信じて、頑なにその教えに忠実であろうとしているだけではダメだ。

DHHがテスト駆動は死んだと言ったり、きしだなおきさんがオブジェクト指向を禁止すべきと嘆いたりするのは、そういう破ったり離れたりせずにいつまでも守ることに固執して老害化した人々に対する批判なんだろう、と僕は勝手に思っている。