日々常々

ふつうのプログラマがあたりまえにしたいこと。

"壊してよいオモチャ" を作る

アプレンティスシップ・パターンには "長い道のり" を歩くための心得が書かれています。その中でも "壊してよいオモチャ" はお気に入りの一つです。

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

仕事では安易に失敗することは出来ません。そもそも「安易な失敗」の価値はあまりないのでしょうが、それはさておき、安易じゃない失敗もしてはいけないという強迫観念に近いものがつきまといます。こういう状況では失敗する可能性のあること/新しいことにはチャレンジし辛く、知識だけ持っていてもなかなか推し進めることは出来ません。何かに挑戦した時、どこにでもいる反対派は、些細な失敗も責めるものです。

何かを学ぶ最善の方法は、たいていは失敗することです。

「愚者は経験から学び、賢者は歴史から学ぶ」とか言ったりしますが、話や書籍を通して得られる知識と、自らの身を以て得られる経験とは性質が異なります。それらはお互い補い合うもので、どちらかで完全に賄えるものではないと思っています。だから私は、自分は経験と歴史の双方で学ぶべきだと思っています。その時に使えるのが "壊してよいオモチャ" です。


似たような話で、リファクタリング・ウェットウェアの「ロッククライミングの練習」が印象的でした。ロッククライミング初心者講習に行ったら、講習も無く「まず30分間登ってみろ」と言われたそうです。戸惑いつつ、知識も無く登っては落ちて、上手く行かず。試行錯誤して失敗した後に、講義を受けて多いに納得したと言うエピソードです。

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法


何かを情報として得た場合、それを身につける最もよい方法の一つは追体験することです。プログラムならば写経はとても効果的だと思います。身を以て得たものと、本や話から情報として得たものが重なった時、自分のものとしてしっくり来る感覚があります。

オモチャ相手ならば、失敗を恐れずチャレンジできます。オモチャはたいてい頑丈ですし、構造がシンプルなので直しようもあったりするからです。そして、壊したとしても損害を被るのは自分だけです。
……舌の根も乾かないうちにアレなんですが、「失敗を恐れずチャレンジ」なんてことはあまり良くないです。失敗は大いに恐れるべきで、恐れるからこそ失敗からの学びがあります。冒頭で書いたような「安易な失敗」をするために "壊してよいオモチャ" があるわけではありません。失敗は恐れつつ、失敗しても良い状況を作る。「失敗を恐れてチャレンジしない」となるのが最悪なので「失敗を恐れず」と書いた感じ。
何かにチャレンジできる状況作り。これが "壊してよいオモチャ" に対する私の理解です。


失敗から学べるものは非常に多い。記録に残されないような小さい失敗をしつつ達成した場合、同じことをもう一度やるならばリスクは大幅に減ります。例えば、はじめてやることにはつきものの「予想外に時間がかかった」は大幅に減るでしょう。致命的な失敗は記録されるでしょうが、そう言うものではないものは自分がやらないと拾えなかったりすることも多いものです。小さな失敗をするには、頑丈なオモチャが良いです。そして万一でも、壊してしまって良いもの……つまり「壊れた場合の被害が予測できる範囲であるもの」です。
「失敗して良い状況作り」をうまく出来たら、勝ったようなものです。何と勝負しているのかは知りませんが。