言葉とプログラマ

僕が「オブジェクト指向」という言葉と出会って、もう十年くらい経つ。

以来ずっと、「オブジェクト指向」という言葉と格闘してきた。


ある日、情報隠蔽の意味を理解した。「これでオブジェクト指向が分かった!」と思った。
しかし翌日には、それは幻であることに気づいた。もっと「オブジェクト指向」は深遠であった。


ある日、ポリモーフィズムを理解した。「今度こそ分かったぞ!」と歓喜した。
しかし書籍やメーリングリストを読めば、まだまだ理解が足りていないことは明らかだった。


UMLを学んだ。オブジェクト指向設計を視覚的に表現できる記法に、感動した。
しかし程なく、UMLの文法を覚えただけでモデリングができるようになるわけではない、ということに気づかされた。


アジャイル開発の波が来た。その波に乗ってxUnitをダウンロードし、TDDにトライした。
単体テストという新しい視点で、ポリモーフィズムに代表されるオブジェクト指向言語の機能を捉えなおすことができた。「今度こそオブジェクト指向にたどり着いたのだろうか」と興奮した。


メイヤーの「オブジェクト指向入門」を読んだ。GoFの「デザインパターン」を読んだ。ファウラーの「リファクタリング」を読んだ。「アナリシスパターン」も読んだ。
グルたちが紡ぐ言葉は素晴らしかった。多くの気づきを得た。
しかし一方で、「オブジェクト指向」なるものの輪郭はますますぼやけていくようでもあった。目を凝らしてその輪郭線を捉えようとすればするほど、その輪郭は周囲の風景に溶けていってしまうようであった。


そうしてようやく気づいた。「オブジェクト指向」というキーワードを完璧に理解するなんてことはあり得ないと。言葉を何度すくっても、その意味は砂のように指の隙間から零れ落ちてしまう。僕にできることは、このとらえどころのない「オブジェクト指向」という概念の輪郭線を、それでも何とか捉えようと目を凝らし続けることだけなのだ。

オブジェクト指向」は変化している。「オブジェクト指向」は静的に固定化された概念ではない。むしろ、「オブジェクト指向」はそのキーワードを中心に集まってくる様々な知識や知恵、活動の集合体と考えたほうがいい。

オブジェクト指向」なんてモノはないのだ。ただ、「オブジェクト指向」という活動があり、「オブジェクト指向」という場があるだけなのだ。


その頃には、「オブジェクト指向」という言葉が人口に膾炙するようになった。いわば、流行語のようであった。単なるバズワードに成り下がったかのようにも思えた。

初心者向けの薄っぺらい説明を見た。オブジェクト指向言語に触れたこともなさそうなオジサンが、得意げに「オブジェクト指向」を語るのを見た。そのたびに、怒りに近い感情が湧いてくるのを感じた。

自分がいくら手を伸ばしても届かなかった「オブジェクト指向」という言葉を、やすやすと口にする人たちが許せなかった。そんな簡単なモンじゃないんだよ、と思った。5年、10年と格闘し続けて、俺はまだわかんねえんだよ、と思った。「オブジェクト指向」ってのは、自分のスピーチに箔をつけるための道具じゃねぇんだよ、と思った。

憧れの「オブジェクト指向」が、安っぽい「オブジェクト指向(笑)」になってしまうように思われたのだ。それがひどく、暴力的なことに感じた。


プログラマは時として、ひどく言葉の定義にこだわる。言葉の誤用を見つけると、烈火のごとく怒り、それを正そうとする。

偏狭なヤツだ、と思われるかもしれない。

なんでそんな細かい定義にいちいちこだわるんだよ、と思われるかもしれない。

これだからエンジニアってのは付き合いにくいんだよ、と思われるかもしれない。


でも、分かって欲しい。

プログラマというのは、言葉の世界に生きているのだ。

ソフトウェアは目に見えない。その見えないものをイメージし、見えないものを設計し、見えないものを開発しなくてはならない。そういう見えないものを扱うとき、重要なものは何か。

言葉だ。

目に見えない概念を説明するのは言葉だ。言葉によって概念を切り取り、言葉によって概念を共有し、言葉によってコミュニケーションするしかない。

オブジェクト指向」も、言葉だ。目に見えない概念を切り取ろうとして生まれた言葉だ。誰も「オブジェクト指向」を見ることも触ることもできない。

言葉を知るということは、その言葉が切り取っている概念を理解するということだ。それを身体知のレベルまで消化するということだ。


極端にいえば、プログラマの仕事とは次の2つだと思っている。

  • 言葉の表す概念を理解すること
  • 概念に名前をつけること

プログラマにとって言葉がいかに大事なものであるか、分かって欲しい。


以上が、「オープンソース」という言葉の誤用を巡って論争に発展した背景ではないだろうか。

僕自身はオープンソース活動に関わった経験がないので、その言葉にはそれほどの拘りはない。だけれど「オブジェクト指向」という言葉ならそれなりに付き合ってきたので、その誤用があればそれなりに敏感になるだろうと思う。

だから、オープンソース活動に深くコミットしてきた人が、その言葉の誤用に強く反発する気持ちは、ある程度想像できているつもり。(勘違いかもしれないけど・・・)

オープンソース活動に関わり、格闘し、自らの血と汗でもって泥にまみれてその言葉に付き合ってきた人からすれば、やすやすとオープンソースを語り誤用される様子は許せないものがあるだろう。


ある言葉が社会に広まるには、ある程度の誤解が含まれてしまうことは避けられないのだろうと思う。

僕たちプログラマは、ある程度はそのことに寛容にならなくてはならないのかもしれない。

ただ、その言葉を語る人たちには分かって欲しいな、と思う。

その言葉は、泥と汗にまみれているということを。多くの人の闘いの上に積み上げられた概念であるということを。