Haskell今年の後半は、鍋谷さんが主催されている「オフラインリアルタイムどう書く」にオンラインで非リアルタイムで参加させてもらいました(参加というか、勝手にコード書いてアップしてただけですが)。以前にも書きましたが、鍋谷さんが出題される問題の難易度が絶妙で、ぱっと見るとすぐに解けそうで、そう思って考えなしにコードを書き出すとつまずいて、もう一度設問を読み直し解き方をひとつひとつ考えると確かに答えにたどり着く、という感じの難易度なのです。問題を解きながら幾度となく思ったのが、人間の考え方とプログラミングでの考え方はこんなにも違うのか、というところ。人間なら見てすぐに答えが出せます。逆に答えの出し方を説明するのが難しいぐらいではないでしょうか。表現できないという意味でこれも暗黙知のひとつなんじゃないかな、と思います。プログラミングはこの表現できない知を表現できる知に変換する必要があります。最終的に人の目に触れるのはコードという形で表現された知。プログラミングの難しさはこの暗黙知から形式知への変換がコードのレベルでは表現されていない(少なくとも明示的には)というところじゃないだろうか、と感じました。コードのレベルで考えているあいだは問題は解決しない。コードの、ひとつ上の視点で視ることが問題を解決しプログラミングのレベルを上げていくのに必要なことじゃないかな、とそんなことを感じさせられる半年でした。わたしが複数のプログラミング言語に手を出すのも、プログラミングのコードのレベルよりも高い視点が欲しいからなんだと思います。単なる言語好き、言語オタクというだけかもしれませんが。