2009年3月26日木曜日

プログラマは世界をこう視る

プログラマが普段どのように問題と向き合あっているかを知るのに、これはうってつけ。



今回、縁があってこの本の出版のお手伝いをさせていただきました。内容はやや難し目のパズル問題集。すべての問題に目を通して、紙と鉛筆で解けるものもあれば、実際に手を動かしてプログラムを書いてみたり。前半は、プログラマでない人でも取り組めるようになっていますが、お勧めは実際にプログラムを使って解く後半。

プログラミングコンテストに挑んだことのある人には、もうおなじみの考え方だと思います。普通の人間ならやらないけれど、コンピュータというお供がいると、すべての可能性を調べ上げるような愚直な方法でも着実に実行してくれる。その様子を見て、人間がより良いアルゴリズムを思いつく、というサイクルが問題を通して学べます。

例えば「数独」。日本では、紙と鉛筆で解くパズルの代表例になっていますが、プログラマの手にかかると、コンピューターを使った答えの探索問題に早変わりです。

原著者のDennis Shasha先生も以下のように述べています。
授業中、私は、いわゆる“講義” をほとんどしない。その代わり、パズルを解くテクニックを披露する。問題の“解答” ではなく、“解法” を紹介するのだ。(中略)面白いことに、学生たちはその週の授業を終えると、自分の問題解決能力が向上していることに驚く。授業を通して得られた体験が、現実問題への取り組み方の一部なのだ。
現実の問題にどう取り組むかを、パズルを通して学ぶ。そのような「プログラマの視点」を垣間見られる例を挙げるとするなら、たとえば、Googleが膨大なデータを扱うために開発したMap-Reduceという計算フレームワーク。その仕組みは説明するととても簡単(問題を分割して解いて、後でまとめるだけ)ですが、それを生みだしたベースとなる物事の見方が、まさに「プログラマの視点」なのです。

こればかりは考え方(Shasha先生の言う「解法」)を知らないと、なかなか0からは出てこないものなので、既にプログラマの人にも、これからプログラミングを始める人にも、お勧めの1冊です。

(補足)
すでにこういった考え方に親しみのあるプログラマにとっては、後半より、前半のパズル問題の方が難しくて手ごたえがあると思います。腕に覚えがある方は、頭のトレーニング用にもどうぞ。

関連:

0 件のコメント:

License

Creative Commons LicenseLeo's Chronicle by Taro L. Saito is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.