読者です 読者をやめる 読者になる 読者になる

【書評】思考の道筋――平山尚『プログラムはこうして作られる プログラマの頭の中をのぞいてみよう』

数年に一冊読めるかどうか、という良書を読ませてもらいました。

本書は、ブロックを積み重ねていって消していく「あのゲーム」を題材に、ゲーム作りを通してプログラミングを学ぶ、という本です。
プログラミングの本というと、初心者向けと標榜していても、既にある程度解っている人向けではないかと思わされる物にしばしば出会う事があります。そもそもプログラムとは何か、どういう流れで作っていけば良いのだろうか、を知りたいのに、その辺りを端折って文法の解説などにいきなり入る、というような。元々知っている人であればその方が良い場合もあるでしょうけれど、もっと根本の所から知りたい、どこから手をつけたら良いのか判らない、といった段階にある人にとっては、やはりハードルが高いものです*1
そして、その点に関する姿勢が、本書の特色です。とにかく最初からやる、というのを前提に組み立てられています。そのために著者の平山さんは、実行が簡単に出来、文法が日本語で書けて直感的に表現が理解しやすいSunabaという独自のプログラミング言語を用意し、徹底的に懇切丁寧に、一からプログラムの作り方を説明なさっています。初学者にとっては、まずプログラミングが出来る環境を整える事自体がむつかしく感ずるものです。ここからアプリケーションをダウンロードしてインストールし、各種環境設定をして……と。その上、英語をベースにした文法を覚えながらプログラムの流れを把握しなくてはならない。これはつらいものがあります。対して Sunaba は、zipファイルを解凍すれば、後はexeファイルを実行して、コードが書かれたテキストファイルを放り込めば即座に実行されます。昔の N88-BASIC のようにお手軽簡単です。
何かを教える本、というと、まず用語が出てきて、それはどのような内容か、という説明があって、その用法を解説し……のような流れで記述される場合があります。けれどこれは、初学者にとってはあまり面白く無いものです。また、いきなり見慣れない用語が出てきても、それを憶えるのは苦労します。
本書はその辺りに工夫があります。題材のゲームの動き等をまず想定して、それをどのようにすれば実現出来るかという事を考え、その実現にはどのような機能があれば良いのか、と進みます。そうして、読者自らに思考させつつ、そこではこういった道具があると便利だろう、と紹介する訳です。
そして、プログラミング特有の用語自体がほとんど出てきません。変数・関数・プロシジャ・引数・戻り値、等々、脚注で説明される以外では、ほぼ違う言葉で記述されます。たとえば、プロシジャは部分プログラムと表現されます。
これは巧いやり方で、日常的に馴染みのある言葉を使い、まず考え方から理解してもらって、難解な用語を憶える負担を減らす、という工夫なのでしょう。
また、敢えて間違った例を示す所も特徴です。上手く動かない例や、他に効率的に書ける例を敢えて示して、何故それが上手くいかないか、どのように書けば効率的になり、読みやすくなり、行数が減らせるか、を紙面を割いて説明してくれる。このように試行錯誤の流れを丁寧に見せるのは大切な事だと思います。
私自身は、古くは BASICCOBOL をかじり、今は Excel VBA などでちょこちょこプログラムを作る、という感じなのですが、そのような立場の人間からしても、本書はとても役に立ち、勉強になりました。
私は一応、基本的なアルゴリズムは勉強していて、実務で VBA を使う事は出来るくらいではあるのですけれど、そういう事は知っていても、やはりゲームプログラミングは独特と言うか、ああいう動的な流れを考えないといけないアルゴリズムというのは、なかなかハードルが高いものです。ゲームの流れや遷移はよく解るけれども、いざプログラムとしてそれを表現するにはどうすれば良いのかよく解らない。どこにどのような処理を入れていけばいいのかピンと来ない、という感じ。
で、ゲームプログラミングの本を紐解いてはみるのですが、馴染みの無い言語の理解が前提だったり、全体のアルゴリズムの流れが今ひとつ把握しづらく、勉強が進まなかったのですね。けれど本書は、ごくシンプルなパズルゲームを、本当に最初から作っていくという内容なので、流れが把握しやすいのです。しかも言語は独自に設計された日本語ベースのものだから、情報処理を勉強した経験があれば、すぐ解ります。ですから、ああ、ここでこのような処理を入れていくのか、という所がとても勉強になります。これは、本書の腰巻きに書いてある、基本をやり直したい人も対象としているというのがまさにその通りだな、と思いました。また、メモリを直接意識する事はあまり無いので、そこから説明されているのもありがたかったです。
先にも書いたように、本書は、専門用語はほぼ出てきませんし、まず思考の流れから辿らせた上でプログラムを書いていく、というものです。これは、私がかねてから考えている、
名前より先に概念を
知識より先に構造を
という事に実によくマッチしていました。私は、ものを説明するというのはこうあるべきだ、と認識しています。その意味では本書は、ある種の理想型の一つではないかと考えます(いつも大村平さんの本を紹介するのも同じ理由です)。プログラミングに関するものでこのような本が世に出た事を、嬉しく思います。
尤も、この本は必ずしも読みやすいものではありません。イラストで説明がある訳では無いですし、基本的には結構複雑な事を説明しているものですから、それなりに腰を据えてかからないと、読み進める事は出来ないでしょう。しかし、スルメを噛むように、じっくり味わって読めば、大変に面白い本です。
最後に、本書の著者である平山さんの言葉を引用します(P11)。

 もちろん、こういった特徴は欠点にもつながる。
 おそらく君は、一度ならず「くどい」と感じるだろう。「何度同じ説明をするのか」「それは前提として先に行けよ」「もっといいやり方があるのに、なぜこんな馬鹿なやり方をする?」などと思わずに済むことは、たぶんない。
 そして、君は大したことはできるようにならない。たかだか「あのゲーム」を作れる程度だ。すでに言ったように、大きなプログラムを丸ごと作ろうとすれば、どうしても細部は抜け落ちる。一冊の本に入らない。細部を保とうとするならば、小さなプログラムにするしかない。誰でも登れるようにと坂を緩やかにすれば、登れる高さは低くなるのである。
 だが私はこれらの欠点を受け入れ、「二階へ上がるために100メートルの坂道を歩く」ような本とした。

                                  • -

Sunaba のダウンロード等、本書のサポートページはこちら。
プログラムはこうして作られる プログラマの頭の中をのぞいてみよう|サポート|秀和システム
Amazonのページでは試し読みが出来ます。
Amazon.co.jp: プログラムはこうして作られる―プログラマの頭の中をのぞいてみよう: 平山 尚: 本
twitter上で本書を紹介なさっていたYJSZKさんにお礼申し上げます。YJSZKさんが紹介なさらなければ、本書に気付くのは、だいぶ遅れていた事でしょう。おかげさまで、大変な良書に出会えました。