囲碁のプロに学ぶソフトウェア開発のプロのあり方

こんにちは、CTO長谷川です。

囲碁プロの影山利郎氏の著書、「素人(アマ)と玄人(プロ)―徹底分析、これだけ違う両者の視点 (日本棋院アーカイブ)」を読んでいます。昔から囲碁のルールは知っているのですが、強くなるにはどうしたら良いのだろうと思い購入した書籍です。余談ですがアメリカにいるため、和書を手に入れることができず、英訳されたものを読んでいます。日本語の本が英訳されているものを読む機会はあまりないので、不思議な感じです。日本語ではこう書かれていたんだろうなと想像しながら読む感じになっていますので、訳し方が少し不自然なのかもしれません。改めて翻訳というものは難しいものだと痛感しました。

囲碁を強くなるためにはどうすれば良いか、具体的なアドバイスが記されている良書です。中でも目からウロコだったのが、「シチョウ」のお話でした。囲碁には「シチョウ」という戦術というか形があって、相手のことを執拗に追うことによって相手の全ての石が取れてしまうことをさします。説明されると囲碁のルールを知っている人間であればすぐに理解できるのですが、実戦でシチョウが成り立つかどうかは盤面をパッと見ただけでは分かりづらいです。プロならば一瞬で判断できるのですが、それには訓練が必要です。影山氏は碁の弱い人は努力もせずにシチョウの仕組みを分かっただけでシチョウを知ったと思い込んでしまうと言っています。そして、たとえば指で碁盤をなぞったりしながらシチョウが成立するかどうかを調べる人は碁の成長が遅いと決めています。とにかく頑張って頭の中でシチョウを並べられるようになることが強くなるこつらしいです。

プログラミングの世界で例えるならば、コードの中にprint関数を埋め込みながら動かしたり、デバッガーやREPLに頼りながらプログラミングすることに近いのかも知れません。熟練したプログラマーなら、頭の中である程度どのように流れるかを考えた上で一発でプログラムを書き出せる人はいます。もちろんデバッガーも強力なツールなので、味方につけることは重要なのですが、それに頼りすぎると高度なコードが書けなくなったりします。

囲碁は基本となるルールはものすごく単純です。線が交差するところに石を交互に打つ、相手の石の活路が無くなれば相手の石を取れる、最後に囲んだエリアが多い者が勝つ、という3つくらいです。単純なように見えるのですが、それを発展させると「シチョウ」のような原則や、「2眼」のような生きるための原則が生まれてきます。プログラミング言語も似ていて、基本的な文法やルールは単純です。ただそのルールを学んだだけでは良いプログラマーになれません。ルールを発展させて複雑なものを作ろうとするのであれば、それこそ囲碁に例えると盤面をパッと見てシチョウが成立するかどうか即答できるくらい、訓練が必要になってきます。

優秀なプログラマーにセミプロの音楽家やチェスや囲碁などの高度な段位を持っている者が多いのは、それらの領域に相通じるものがあるからなのかも知れません。

それでは、ちょっとシチョウの訓練をしてきます。