練習問題 / 自分のもっともよいものを惜しみなく与えよう

結城浩

2001年12月16日

私が書くプログラミングの書籍には練習問題がよく登場する。 そして必ず解答がつく。 なぜかというと、解答がないと独学している読者が困るから。 解答はヒントだけではいけない。 出来不出来はさておき、ちゃんと解答になっていなければならない。 なぜかというと、読者が困るから。 それから、読者を「出し抜こう」とする問題はよくない。 著者は読者に対して優越感を感じるために本を書くのではないからだ。 著者は読者に何かを伝えようとして本文を書く。 そしてその「何か」が伝わったかどうかの確認のために練習問題を書くのだ。

練習問題は知識の確認のためだけにあるのではない。 練習問題を解くことは新たな何かを学ぶ機会でもある。 練習問題を頑張って解いた人、解こうとした人の頭は活性化している。 その状態になっている人には、新しい情報・新しい知識を伝えやすい。 それに頑張った読者には「ごほうび」があってしかるべきではないか。 その「ごほうび」とは本文では解説できなかった(けれども重要な)事項かもしれないし、 その練習問題にチャレンジした後なら理解しやすい事項かもしれない。 ともかく、練習問題の解答には「プラス・アルファ」をできるだけ用意しようと思っている。

…というような本を書くための私の「心がけ」はあくまで心がけであって、 必ずしも常に100%実現できているわけではないけれど、 まあそういう方向で努力しているのである。 ところで、こういう心がけを私はどこで学んだか。 『プログラミング入門者向けの書籍を書くには』 という本を買って読んだわけではない。 練習問題に関してはクヌース先生の "The Art of Computer Programming"や、 "The TeXbook"から学んだ。 これらの本は初心者向けではないけれど、 練習問題がついていて、解答がついている。 そして上記の「ごほうび」に相当するものもちゃんとあるのだ。 クヌース先生の本の書き方をそっくり真似することはできない。 でも、クヌース先生の本から私は多くのことを学んだ。

ジョークの扱いもクヌース先生から学んだ。 プログラミングの本に、ジョークを入れるなら、 単なるだじゃれや笑い話にしないこと。 そこで解説している内容を「読者が理解しているときに限って」 クスリ・ニヤリとできるように構成する必要がある。 私は「ギコ猫とデザインパターン」のページを書くときにも、そう努力した。 うまくいったかどうかはえーと…まあさておき。

ところで私はなぜこんな話を書いているのか。 私はプログラミングの本を書く仕事をしているのだから、 こういう話はいわば「企業秘密」ではないのか。 なぜそんな(結城にとって)重要な話やネタ元を公開するのか。

理由は簡単だ。私の日記を読んでいる人の中には、 私と同じようにプログラミングの本を書きたいと思っている人がいるからだ。 私は読みやすく、分かりやすい、 よいプログラミングの本が増えればよいと思う。 だから、私は自分の得たノウハウを公開する。 そうすれば、そのノウハウを他の著者が(必要ならば)利用することができる。 それはよいことではないだろうか?

それに、最近よく思うのだが、 いくらノウハウを公開しても何も問題は起こらないのだ。 私の書く本は私の書く本。他の人の書く本は他の人の書く本。 ノウハウが同じだとしても、同じ本は決して出来ないからだ。

自分の知識を隠そう隠そう、守ろう守ろうとして小さくなるよりも、 どんどん公開した方が結局はよいのだ。 私自身も他の人が公開した情報からメリットを得る。 他の人は私が公開した情報からメリットを得る。 「自分のもっともよいものを他の人に与えなさい」 というのは まるで聖書に書かれているような言葉だけれど、 実はコンサルタントのワインバーグの言葉だ。 これは真理だと思う。 自分のもっともよいものを他の人に与える。 お金や物なら、人に与えたらなくなるが、知識は違う。 どんどん公開しよう。他の人に惜しみなく与えよう。 特に、よいものを与えよう。 そうすると、不思議なことに、与えたものよりもはるかに多くの何かが、 他の人から返ってくるのだ。 これは、嘘ではありません。 Trust me.

例えば、 先日公開した 「技術系メーリングリストで質問するときのパターン・ランゲージ」 のページがありますよね。 あのページへの反響はすごくて、たくさんの方からフィードバックをもらっています。 それを通して私は励ましを得、知識を得、また新しい知見を得ました。 文章・メーリングリスト・コミュニティに関する理解も深まりました。 こういうのって、はかりしれない報酬ではないかと思うのです。 あのページを紹介してくださっている方々、 結城にフィードバックを送ってくださった方々に感謝します。

だから、これからも、できるだけよいものを、可能な限り公開していこうと思うのです。

「技術系メーリングリストで質問するときのパターン・ランゲージ」 をJava-Houseに投稿してくださったCroutonさんに感謝します。 そういえばCroutonさんは、 私の『Java言語で学ぶデザインパターン入門』を スラッシュドット・ジャパンに紹介してくださった方でもあります。 重ねて感謝します。