これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

将棋とプログラミングは似ている

詰め将棋というものがある。1手詰めや3手詰め程度のものから、プロが一ヶ月かかっても解けないようなものまで。で、この詰め将棋を繰り返し解くことで、将棋の終盤力が身につくらしい。
詰みが将棋という問題を解いた状態だとすれば、終盤力とは、そこにたどり着く確かな手順を見出す力、ということになるだろう。


これ、プログラムのアルゴリズムの話に似ているように思える。アルゴリズムも、プログラミング上の問題を解決するための手順だから。
ということは、アルゴリズムに関して繰り返し学習することは、即ちプログラミングにおける終盤力を鍛えることと同じではなかろうか。
先日、将棋の羽生二冠が7手詰めまでをパターン化して記憶しているらしいと書いたが、アルゴリズムを記憶することも、これに近いように思う。パターンが蓄積されれば、目の前の問題に対して、瞬時に解を見つけだすことができるようになるはず。


瞬時に解を見いだせないものについては、地道に手を読んでいくかのように、課題を細分化し、少しずつ解いていく。この細分化の戦略(デザインパターンや再帰等のプログラミングテクニックの使用)は、将棋でいうところの定跡だとか、あるいは「垂れ歩」のように局所戦を優位にするノウハウみたいなものじゃなかろうか。
序盤〜中盤の大局観は、プログラム全体の構造を決めるアーキテクチャ設計か。上手くできれば、その後の展開が楽になるが、失敗したら苦しみながら個々の局所戦でどうにか戦い続けるような感じ。
また、基本は1つ1つの手順を論理的に積み重ねていくものでありながら、時に直感や感性が大きく作用するところも似ている。
棋譜はコードそのものだろう。美しい棋譜もあれば、汚いものもある。美しいプログラムもあれb(ry


かくも将棋とプログラミングは似ている。うん、こじつけと言われても反論はしないw というか、将棋と違ってプログラミングには対戦者も居ないし、待ったもすることが出来るわけだしなぁ。
何が書きたかったんだろw 勢いのまま書いてしまった。