2ntブログ

将棋とプログラム

中学3年生にして、現在19連勝中の藤井4段が最近話題になります。
私もかつて小学生の頃、将棋にはまった事があります。

将棋入門書などにも書かれていますが、将棋が強くなるコツは3手先を読んで指す事です。
プロ棋士などは、3手どころか数十手以上先まで考えて指すようです。
うちの実家は毎日新聞をずっと取っているので、「名人戦」(スポンサーが毎日新聞のため)の様子が誰がどういう手を指したか、その日の終了時の盤の様子などがずっと載っていました。
投了(相手が負けを認めた試合終了の場面)図を見ると、素人にはさっぱりどうしてこれで負けが分かるのか、勝ちが確定したのかという場面で終わっています。
これは、プロ棋士が数十手先まで読める事の一番の証拠です。

さて、この先を読むという思考ですが、これがプログラムに非常に重要な要素です。
プログラムとは、与えられたデータを求められるものに計算処理して変換する事であると言えます。
そのために、何をどうしたら求める結果になるのかを考えなければなりません。
これこそがまさに将棋の、先を読む思考と同じなのです。
将棋もプログラムも、リアルの人生のように無限に可能性があるわけではなく、有限です。
従って、先を読む事ができるのです。
もちろん、将棋の場合は第一手から最後までの指し手はほぼ無限とも言えますが、誰がどう見ても「悪手」というのがあるように、相手がどう指してくるかは、ある程度限定できるのです。
ましてやコンピュータプログラムは、命令の数も動作も限定しており、人間のようにイレギュラーな動作をする事はありません。
なので将棋よりも先を読む、自分の望む結果へ導くのははるかに簡単です。

棋士に開発言語を学ばせたら、仕事の速い優秀なプログラマになれると思います。

「これをこうしたらこうなるから、次こうして・・・」という順序立てた理論的な思考、それが将棋とプログラムに共通するものだということです。

現在プログラマを生業としている人、あるいは将来プログラマになりたいと思ってる人は、開発言語のコマンドを覚えるより、将棋を覚えて強くなるための勉強をした方が、はるかに役に立ちますよってアドバイスです。
もちろん、開発言語の文法や仕様やコマンドはある程度知っている必要はありますが、それよりも重要なのはプログラムの組み立て方だからです。
より速く(効率的に)、より少ない作業メモリで処理できる方法を編み出すのには必要不可欠な能力なのです。

ちなみに天才棋士として名高い羽生さんは、「勘」で指すなどと言われますが、「勘」というのは実は超能力的なものではなく、経験によって得たデータを元に、高速で最善の方法を導き出す能力の事です。
これは、CPUでも分岐予測という形で機能として実装されています。
すなわち今までの処理の傾向から、IF ~ THEN ~ の結果を予測して、分岐処理の実行前に可能性の高い分岐先の処理を実行するものです。
これまさしく、人間の「勘」と同じものです。
全ての可能性を考えるのではなく、今までの経験から一番あり得そうな可能性のみに絞って結果を考え、それに対応する。
こうすることで、無駄な選択肢を考える時間が省かれるので、高速で物事に対応できるのです。
それがあたかも未来を見通すような、超能力に写るだけの話なのです。
そしてそれは、同じような場面に何度も出くわして、経験を積み重ねないとできないのです。
統計学に通じると思いますが、サンプルが多ければ多いほど、正確な確率が出るのと同じでしょう。

将棋もプログラムも、このように先を読む思考と、いくつもの対局あるいはプログラムの作成という経験により、より速くより効率的な手が打てる、プログラムが作れるようになります。

コメントの投稿

非公開コメント

カウンタ
プロフィール

ウホッ!いい男

Author:ウホッ!いい男
異世界転生を待ち続ける中高年のおっさん

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR