最近檜山さんが書いている「牛はワカラン」ネタ(あるいは共変・反変ネタ)には興味をもって見ていたのですが。
以下を読んで、いきなり「えっ!?」と思いました。
■[雑記/備忘]メイヤー先生は比喩が大好
より
昨日のエントリーで:
メイヤー先生の著書にはお世話になりました。随分と影響も受けました。
と書きました。メイヤー先生の著書を具体的にいえば、『オブジェクト指向入門』(翻訳書 アスキー出版局 1990)と『プログラミング言語理論への招待』(同 1995)です。『入門』、『招待』という題名の割には大部で本格的な教科書です。残念ながら、現在はどちらも入手困難なようです。
アスキーから1990年に出ている『オブジェクト指向入門』という本なら持っているはずだ……。読んでないけど。
まさか、それと関係ある話題が延々と続いていたとは。
ってか、そもそもこの本がEiffelを作った「あの」メイヤー先生の本だとは全く認識していませんでした。
じっちゃんの名にかけて謎を解け、真実はいつも1つ! §
この本は、どのような位置づけの本か全く知らずに持っていたことになります。
なぜ認識していなかったのでしょうか?
本当にこの本か確認するために、慌てて出してみました。書名からして持っていると御利益がありそうだったので、仕事場の本棚に昔から大切に入れてあったのです。
表紙を見てすぐぴんと来ました。
とても単純なことだよ、ワトソン君。
表紙を見ると、日本語訳であるにもかかわらず、以下のように表記されています。
どうやら、MAYERがメイヤーだということが直感的に理解できなかったようです。
ついでにいえば、Eiffelというキーワードは鮮明に印象づけられていたものの、当時メイヤー先生の名前はあまり深く印象づけられていなかった可能性があります。(より正確に言えば、Eiffelも名前をよく知っていただけで、それが何かは分かっていなかったかもしれない)
なぜこれが手元にあるのか §
私がMSKKをやめて、株式会社ピーデーの役員として入ったときに、株式会社ピーデーの設立者である故・近沢隆光が「これは持っていると良い」と何冊かの本をまとめてオーダーしました。
『オブジェクト指向入門』は、その中の1冊です。
というわけで、私自身が買おうと思って買った本ではないので、内容を吟味したこともないし、風評をチェックしたこともありません。
ただ、何冊かの本の中に入っていたというだけのことです。
なぜ読まなかったのか §
その当時、オブジェクト指向プログラミング(OOP)に興味がない、ということはありませんでした。むしろ、世間の平均水準を遙かに上回る興味を持っていたと言えます。
その理由は、C言語+SDKベースのWindowsプログラミングが複雑さの壁に阻まれて破綻状態だったという背景にあります。
(もう1つ、私が自力で試行錯誤してCによるPoor Man's OOPに似た領域に到達していた話がありますが、これは長くなるので割愛!)
実は、この段階で最も大きなハードルとなっていたのは、OOPとは何かを理解することではなく、Windowsアプリケーションを作成できるOOP言語処理系を見つけ出すことだったのです。
この当時、Zortech C++ 2.0, Zortech C++ 3.0, MIWA C++, Borland C++などをいろいろと試しまくっていました。
この段階で私がOOPに期待していたことは、カプセル化による複雑度の低減にあり、それはさほど難しい話ではなかったと言えます。(継承は脇役でしかなく、モデリングという発想もおそらくは無かった)
この遍歴は、最終的にMicrosoft初のC++処理系であるMicrosoft C++ 7.0の登場によって終止符が打たれますが、それはこの文脈上はまだ未来の話です。
そのような立場から見たときに、私がこの本を読まなかった理由は明白と言えます。
この本をパラパラっと見たときに、私が悩んでいた問題に関連する話題がほとんど見えなかったからです。
つまり、私の悩みが「動くかどうか」という実装レベルの問題に終始していたにも関わらず、この本は論理設計的なレベルの話題を多く扱っていたということですね。
ちなみに、当時の私は、MIWA C++のサポートパソコン通信ホストなどに書かれたSmalltalkerのC++プログラマが書いたものを読んでOOPを勉強していましたが、最終的には「実装上の要請から不可避に要求される形としてのオブジェクト」が拠り所になっていたような気がします。ゆえに、論理設計的な話題との接点が希薄で、読んでもほとんど分からない……というか読み続けられなかったような気がします。
今なら読めそう §
でも、入手困難な名著が手元に既にあったということに気付くのは、ちょっと嬉しいかな。
たぶん、今ならこの本を読めそうです。
本来あるべき正しいOOPを実現したと称するJavaが、現場レベルでは著しく役に立たない場面が多い(むしろC#の方が遙かに役立つ)という問題について考えているうちに、論理的な視点からOOPを見る視点が自分の中にも出来てきたような気がするので。(これは、ソースコードの抽象化レベルを上げることの長所と短所という現在抱える重大問題につながる)
うん、そういう意味では反面教師としてのJavaの存在価値は、自分にとって大いにあったと言えるかな。まあ、終わったことだから言える綺麗な言葉ではありますが (笑。