自分が納得するまできちんと考えること

結城浩

2001年9月5日

早めに眠って、早朝に仕事。 やっぱり文章やプログラムは「眠る前」ではなく「起きた後」に書くべきだな、と思う。 ぜんぜん仕事の質が違うんだもの。

ある章のプログラムをリファクタリングする。 マルチスレッドのリファクタリングというのは、 通常のリファクタリングとは一味違うように感じる。 synchronizationのことを考えないといけないから、 安易にメソッド移動できない(synchronizedメソッドがロックするthisが変わってしまうから)。 逆にいえば、synchronized (otherObject) { ... } というブロックが多数登場する場合には、 「リファクタリングが必要となる『匂い』」がする。 otherObjectをthisとなるように、メソッドを移動するのだ。

それはともかく、 今書いている『Java言語で学ぶデザインパターン入門』マルチスレッド編も面白い本になりそうだ。 書いていて、とても面白いから。 前回のように「な、なるほど!」と言って、足を踏み鳴らしたりなんかして。 synchronizedの意味、InterruptedExceptionの意味、 そういう普段当たり前のように感じているものを、きちんと例示しながら説明していると、 「あっ、これはこういう意味だったのか」と驚くときがある。 単に私の勉強不足という話もありますが…。 こほん、それはともかく。 そのように悟った後で、他の参考書を見ると意味がよくわかる。 「ここは、こういう風に書いてくれればもう少し早く悟れたのになあ」 などと勝手な文句を言いながら。

「本を書く」ことや「人に教える」ことというのはとても勉強になるものだ。 そこで大事なのは、自分で「わかったふりをしない」ということだ。 自分なりで構わないんだけれど「なるほど」といえる地点まできちんと考えたり、 調べたりすることが大事だ。 当たり前のことだけれど、意外にこれが難しい。 これには他の人がどうか、というのは関係がない。あくまで自分の問題。 自分が納得するまできちんと考えること。 納得したら、それをもっとも適切な方法で表現する(言葉だけではなく、図やイラストや、プログラムを使って)。 表現されたものを自分で見る。 「それは、私の納得した内容をよく表しているかな?」という観点で見る。 「私の納得した内容が読者にうまく伝わるかな?」と考える。 本を書くことは、そのような作業の繰り返しだと思っている。 そうすれば、その本は、著者の身の丈にあった本になる。 知ったかぶりでもなく、先走りもせず、 すみずみまで「ええ、これはこういう意味です」と言える本になる。 「これは私が書いた本です」と言える本になる。 …と思っている。 学ぶ、ということはすべてそうなのかもしれないけれど。 本を書くことは教えることでもあり、学ぶことでもあるのだなあ。

ところで、なぜか知らないんですが、 レビューアの申し込みが急激に増えているんです。 日記のページビューも倍増しているし。 なぜだろう…。 ともあれ、申し込み感謝します。申し込みのメールには、すごく励まされます。 また、読者が考えていること、本書に期待することが伝わってきてとても参考になります。

『Java言語で学ぶデザインパターン入門』マルチスレッド編のレビューアへの申し込みは現在61人 (そのうち、女性は3人。前回は男性:女性が4:1くらいの比率だったが)。