プログラミングと囲碁は似ている



最近、「ヒカルの碁」を1巻から最終感まで読み返してみて思った。
囲碁ってプログラミングに似てるんだなあ。


僕は碁はぜんぜん詳しくないんだけど、対局している2人だけに見えている宇宙や、そこで感じるだろう半端ではない緊張や喜びは、僕にも十分伝わってくる。そして後に残るのは、互いに智力を尽くして戦ったからこそ生まれる美しい棋譜だ。


この雰囲気、ちょっとプログラミングと似てるよなあ。


プログラミングも、他人のソースを少し見ればそのコードを書いた人の実力は大体分かるし、より集中して内容を検討していけば、その人が考えていることは手に取るように分かる。その中に稀に(ごく稀に)神の一手に近いと思える美しいコードを見たときなどは、ヒカルの碁の登場人物たちと同様、まさに身震いするような感動を味わうことができる。

プログラミングも、自分のテクニックが向上すればするほど、全体の構造がより深く見えるようになり、今書いている処理の何手も先を読むことが出来るようになる。これはヒカルが成長していく中で、100手101手と先の盤面を読むことができるようになっていく様と同じだ。


作中何度も出てくる、佐為がヒカルに指導碁を打つ場面や、対局終了後にお互いの手を検討しあう姿には、チーム開発の現場に近いものを感じる。


チームでプログラミングをしていく際には、まずは基礎となるフレームワークを作ろうとするけれど、これなんかまさに指導碁に近いんじゃないかと思う。

フレームワークをきちんと設計できるプログラマは、経験の浅い人よりも、やはり何手も先を読むことが出来ている人だ。
そういう人は、具体的な個別の実装を他人に任せる際に、そこで起こりうる諸問題をあらかじめ想定し、なるべく安全に簡単に品質を担保できるよう、「駄目な手は打てないように」フレームワークを組もうとする。経験の浅い人は、そこから様々な局面で使われる定石や、よりレベルの高い深い手を学んでいくことができる。


でも、ガチガチに縛られたフレームワークは、それはそれで使う側にとっては窮屈で退屈なこともある。
そういったときに、こちらの隙をついて、独創的な予想外の手を打ってくる人がいるのを見たりすると、ハラハラすると同時に何故かワクワクしてしまったりもする。これだからチーム開発はやめられない。


最近は自分がフレームワークを作る際も、どうしても譲れない箇所以外は、他の人にもっと自由に打たせてあげたいと思うようになってきた。僕は自分が思いもよらない驚くような手をもっと見てみたい。神の一手は一人では作れないんだよきっと。

多分、プログラミングの底知れないこの楽しさも、碁と同じように、工夫してより上手い手を打とうとする思考の中にあり、自分や他人とソフトウェアを作っていく中で、より美しい手を打とうと切磋琢磨することにあるんだろうなあと思う。


いやあそれにしても、ヒカルの碁はおもしろいなあ。このおもしろさは卑怯なくらいだ!