「知っていれば簡単」の壁

 初心忘れるべからず、とは言うものの身についてしまったものはなかなか忘れられないというのが実情。

 箸の持ち方を知らない外国人のような箸の持ち方を演技してみてくださいと言われて出来る人はどれだけいるだろうか。できるようになってしまえば、のど元過ぎればといった感じですっかり出来なかったときの苦労を忘れてしまう。九九だって暗記してしまった後でなら簡単に答えを返せるけども、小学生の頃にはこれを必死で暗記しようと四苦八苦したわけだ。

なんでこのAPIを使わないの?

 プログラムにはいろいろなノウハウがあって、便利なAPIも沢山あるし、便利なプロダクトも沢山ある。知っていればそのクラスを使うだけ、メソッドを呼ぶだけということを、知らないがゆえに自作してしまう。これを車輪の再発明と言ってプログラミングの世界では忌避することとされる。*1

 となると、ソースレビューなどをしているときに「なんで標準APIにある機能を使わないで独自実装してるの?」という指摘が出てくる。あるはアルゴリズムで「なんでXX法を使わないの?」という指摘が出てくる。それをフィードバックすることは大事だけれども、その無知を責めてはいけないものだと思う。

 ここに4桁の数字を揃えると開く南京錠があって、その数字を知っている人と知らない人の差は何だろう?プログラミングにおける知識やノウハウの有無の差ってのはこの「知っていると知らないの差」のようなものだと思う。そこに特別な技能がなくとも、ただ知ればそれで身につくという技能がある。それをどうやって探すのだろう?そのサーチビリティを高めるにはどうしたらよいのだろう?そういう問題を提起したのがプログラミング技能の深さと広さとサーチビリティ - プログラマーの脳みそだった。

 世界は全てを知り得ないように出来ているのだから、知らないことを責めてもしょうがない。クイズで戦うなら自分の得意ジャンルで戦えばいい。でもそれで勝ったとか負けたとかってのはニホンザルのマウンティングのような話でしかなくて、それでプログラムが動くようになるわけじゃない。

*1:学習目的で作ってみるというのはアリだけどね