将棋プログラム

結城浩

2002年10月24日

長男「ねえ、お父さん。この間、コンピュータで見せてくれた将棋プログラムなんだけど」
 私「うん。ダウンロードしたフリーのソフトだね」
長男「あれって、駒が相手の陣地に入ったとき『成りますか?』って聞いてくるでしょう?」
 私「そうだったね。成るかどうかは競技者が選べるから」
長男「でもね、飛車が龍になるときって、成っても動ける範囲は狭くならないから、
   必ず成るようにしてもいいんじゃないか、って思うんだ」
 私「ふうむ…。確かにそうだね。じゃあ、あなたが将棋プログラムを書くときには、
   そういう風にプログラミングするといいね」
長男「ふうん…」
家内「でも、ああいうプログラムって作るのは難しいんじゃないの?」
 私「いや、数手先を読むくらいのプログラムなら、
   それほどは難しくないと思うよ。
   プログラミングを勉強して二年もしたら書けるんじゃないかな。
   一年でも書けるかもしれない」
長男「ええええ!二年もかかるのお?」

	後日談:
	親切な方が、YukiWiki経由で
	「龍に成ってしまうと負けてしまう場合がある」という話を教えてくださいました。
	たとえば「打ち歩詰めを回避するため」ということです。なるほど。なるほど。
	ありがとうございました。

    * * *

 私「プログラミングを学ぶのはピアノよりも簡単だと思うよ」
長男「そうかなあ…」
 私「だってピアノはリアルタイムに演奏しなければならないけれど、
   プログラムは何度も見直して直すことができるし」
家内「でも、ピアノはちょっとくらい間違ってもいいけれど、
   プログラムはちょっとでも間違うと全体が駄目になっちゃうでしょ」
 私「ピアノだってちょっと間違ったら曲全体が駄目になるじゃない」

    * * *

長男「お父さん。将棋のプログラムを書く人って、将棋のことを知らなくちゃならないね」
 私「そうだね。将棋のことと、プログラムのことを両方知らなくちゃならない。
   銀行のプログラムを書く人は、銀行のお仕事のことを知らなくちゃならない。
   プログラムを書くっていうのは、コンピュータに何かを教えるようなものだね。
   あなたがアメリカの人に将棋を教えるとしたら、将棋と英語の両方を知らなくちゃいけない。
   それと同じように、コンピュータに将棋を教えるためには、
   将棋とプログラムの両方を知らなければね」