トップ «前の日記(2005-08-21) 最新 次の日記(2005-08-23)» 編集

日々の破片

著作一覧

2005-08-22

_ 将棋の子

将棋の子 (講談社文庫)(大崎 善生)

yomoyomoさんの読書記録を読んで、なんとなく読みたくなって購入して3ヶ月くらい、昨日、つい読んでしまった。

とんでもなく身につまされる部分が多々あることとかはおいておいて、1番、ぐらっと来たのは、高速道路に関連するところだった。

主役の成田英二は(というか出て来る棋士の卵は全員そうなわけだけど)天才だから、人の真似はイヤ、定跡の研究をすると人真似になる、おれはおれの将棋がある、だから序盤はどうでも良く、終盤に賭けると言い放つ。詰め将棋は解かない、おれが作る。というタイプで、多分、そういう棋士はたくさんいたんじゃないのかな。が、昭和57年あたりからぞろぞろ違う考え方の子供(なんだな、実際に)がたくさんやって来る。

しかし、その終盤重視の理論は昭和57年に入会した羽生善治を中心とした天才少年軍団によって駆逐されていくことになる。序盤と定跡の研究こそが最重要課題であり、その知識や研究の深さが勝敗に直結していくというのが、新世代の俊英たちの考え方であった。終盤というのはあらかじめ答えが提示されている領域であり、極端にいえば高度な技術を持つ者ならば、誰が指しても同じことになる、というのが羽生の理論であった。

終盤は完全に読みきれる―(略)―要求されるのは感性や才能といったものではなく―(略)―詰将棋を解く訓練は必要不可欠―(略)―終盤の緻密な計算力を高めるトレーニング―(略)―。

ひらめきや創造性は、まだほとんど何も確立されていない序盤から中盤という領域にこそ必要なものであり、そのためには知識と研究の裏づけが最重要という考え方であった。

将棋の歴史と積み重ね、研究すべき定跡の数と比較するのはおこがましいが、元々高速道路として作られたある分野にも言えていることじゃないか、と僕には読める。

人間の行動や心理は、現時点では緻密な科学ではなく、ある状況に対してどう反応するかの行動パターンに当てはめることである程度までは読めるというのが、人間系の科学だ。したがって、良く似た分野の現象は他の分野でも観察可能だったりするし、その類推から歴史の流れる方向は見えるものだ。

つまり、天才の度合いは違えども、ここに出て来る人間たちと似たような種類の連中を僕は本で読んだりMLで見かけたり、mixiで暴れたりしているのを知っているぞ?

序盤―終盤という分け方は、設計―実装と置き換えることができるように見える。(設計−実装という一連の流れ自体が入れ子になっているのが多少異なる点か)

僕は、TDDやYAGNIの信奉者だから、作ってからリファクタリングして構造を洗練させていくべきだと考える。しかし洗練させた先にあるものは、結局は定跡である。この方法論は、つまり過渡的な手法に過ぎず、最終的には、最初から洗練されたものであるべきになるということに落ち着く。

終盤は高度な人間であれば誰がやっても同じになる。それはその通りだ。コードはともかく実行の過程では。仕上げはすでにコンパイラの最適化が走る。高度ではない人間がたくさんいるから、将棋ほど洗練されていないだけの話だ。

敷衍させて考えれば、終盤の高度な計算は、パターンやイディオムを織り込んだDSLインスタンスからコードへのジェネレータが持つ。このerは高度な計算が可能で、かつ誰がやっても同じの誰にふさわしいerだ。

重要なのは、DSLの定義とジェネレータの実装で、これが序盤に相当する。

つまり、やはり、それが時代の方向性であろうな、というようなことを読みながら考えたのだった。

追記:入れ子をもっと大きく取れば、外部設計が序盤、要件定義が序盤というように広げられる(し、確かにシステムとしてはそこで結果が見えるという意味ではそれは当然だ)が、そこまで広げると嘘っぽい気がする。というのは、そこまで序盤を広げると終盤の一意性が決まらないと考えられるからだ(見えた結果が霧の彼方に行ってしまうのは棋力が不足しているのが原因かも知れないが、はなから現実味が無かったからかも知れない)。無理なものは無理だから、実装可能な範囲を盤上に当て嵌めたほうが良さそうだ。

本日のツッコミ(全5件) [ツッコミを入れる]
_ (2005-08-24 11:58)

設計だけを切り取った話ですか?定石本を読んだら(読み聞かせたら)誰でも勝てる?<br>パターンやイディオムは駒の動かし方の規則で、序盤、終盤は反復の時期だったらどうかなあ。序盤は最初の反復、終盤はリリース間際の反復。

_ arton (2005-08-24 12:11)

勝てない、勝てない。あくまでも高段者同士の世界の話。でも、将棋と違って勝負じゃないから、ソースのきれいきたないと、仕様を満たす満たさないは別の象限ですね。それに使い捨てる/捨てない、が加わることになるからややこしい。<br>したがって、想定しているのは、きれい(可読性が高い)+仕様を満たす+保守(拡張を含む)フェーズが長い(数年から10数年の)ソフトウェアです。<br>あと、追記している通り、設計は実装設計に絞っているから流儀によってはいきなりコードを書いても設計。僕だとインターフェイスを切っているあたりが設計。<br>パターンやイディオムはコマの動かし方というのは違うと思います。(動かし方の範囲の取り方に依存するけど、そっちは言語仕様のように取れます。むしろ定跡ではないかな)<br>反復に当てはめることもできそうだけど、ちょっと僕が見てるのとは異なる世界のような気がします。

_ arton (2005-08-24 12:49)

勝てない、といきなり書くのは語弊を招くと気づいた。ハックは才能だと思う。ここで勝負しようとすれば、勝てない。ビルジョイみたくviだかr*を一晩で書くのは無理だ。しかし、最終的にviを作ることならできる(はず)。<br>でも、読んだり聴かせるだけじゃもちろんだめでしょ? 奨励会で死ぬほどコードを書かせなきゃ。あと定跡の研究にはソースの研究(棋譜の研究だ)が不可欠。というわけでソース嫁の世界も必要だと思います。

_ (2005-08-24 13:04)

うん。読んだり書いたりして悩まないと定跡は手に入らない気がします。

_ (2005-08-24 13:10)

局面と定跡とがパターンマッチングできるか否かも。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え