オブジェクト指向言語が与えた開発手法への変化

前記事で「しかしオブジェクト指向言語の流行によって、なんでこんな上流から下流に至るまで全部に影響が出てきたのだろう?」というわざとらしい問いをしました。

この問いに対する答えは、いつも通りの僕のトンデモ理論で恐縮ですが

プログラム言語で文が書けるようになったことで、本来数学的完全世界だったプログラミング世界に文学という答えが一つとは限らない不完全要素が混じるようになったから

だと思っています。「はぁ? なにが文学なの?」と思うかもしれません。たしかに subject.verb() という表記方法になっただけでは「文学になった」とはいえないと思います。しかし大抵のオブジェクト指向言語の場合、この表記法と同時に「抽象化」という概念を扱います。

この抽象化という概念がやっかいで「どう抽象化するのか?」「どの位抽象化するのか?」という答えのない問いを常に発し続けます。この問いには、本質的に答えがないのですが、プログラミングを進めるには答えらしきものを見つける必要があります。数学的に一つの答えに導けないような問いに対する答えにたどり着くための方法論が必要になってきたわけです。その方法論が、文学であり、哲学であり、宗教w、という訳です。

「抽象化」を難しい物にしているのは「どの位抽象化するのか?」という度合い、バランスのとり方の難しさ、だと思います。たとえば文学的に「私はあなたを愛しています」という文を、抽象度最大にしてみることを考えてみましょう。

この問いに対する夏目漱石的答えは

月が綺麗ですね

だそうです。

… … … 

意味分かんないw 全く意味分かんないw これはまあかなりのこじつけですが、大体の場合抽象化を極大化すると意味わからなくなります。ピカソの絵とか典型的ですよね。しかし文学的という観点から見るとこの訳わからなさは逆に「美しい」わけです。

このように抽象化すると美しくなるが、一方で理解しずらくなるというデメリットを生むので、それなりに美しくかつ理解できる範囲に収めるために適度にバランスを取る必要が出てきます。

そこで出てくるのが粒度、とか抽象度とかのバランスパラメータ。つまり抽象度50% とか 抽象度33% とかの感覚値。しかし感覚値であるが故に、これらに明確な正解はありません。

ここらへんは古くからの難題である

ジオングの完成度は80%だが、完全体といえるのかどうか?」

という命題に似ていますw 「似てねーよ」というツッコミはいつも通り無視の方向で行きますw

この命題に対する整備兵の答えは「足なんて飾りです。偉い人にはそれがわからんのですよ」となり、あれで100%完全体である、という答えになります。

しかしエライ人目線からいえば「未完成のまま投入するから負けるんじゃないか、ばーかばーか」という答えになります。

この問いに正解はありません。どちらも正解であり、間違いです。しかし現実問題として取捨選択をしなければなりませんから、何かしらの基準で正解を決めなければなりません。そこで出てくるのが「美しい」という基準。その基準から上記命題に答えを出すと

足つき100%ジオングスカート履いているようにみえるので、おかまっぽい。だから美しくないので、80%ジオングが完全体ということでFA(ファイナルアンサー)
と、なりますw このトンデモな答えはいろいろ議論を巻き起こすでしょう。しかし、美しさを議論しているわけですから、答えなんて出ないんです。それでもプログラムを完成させなければならない、という制約からなにかしらの結論を出さなければなりません。では、どうすれば良いか?

結論を出す方法は色々あるでしょうが、一番重要なことはきっと「関係者全員とよく話し合うこと」だと思います。

そう考えると最近のアジャイル開発プロセス等の各種開発プロセスで重要視されているのが「コミニュケーション」になっている理由がわかってきます。たぶん「文学的に美しい物」という答えのない答えを選び出すには「よく話し合って妥協点を見出すしかない」からなのでしょう。

こんな風に考えていくとオブジェクト指向言語で書かれたプログラムにおける「コードの美しさ」には二種類あることに気が付きます。すなわち

抽象度が適切に設定されていて"文学的"に美しいコード
分岐や数式、アルゴリズム等が"数学的"に美しいコード

という二種類の美しさ。この二種類の美しさの混在っぷりがオブジェクト指向言語でのプログラミングを楽しい物にする一方で難しくしている要因だと思っています。

そして、この二種類の美しさの整理の難しさが各種開発手法を変化させたのではないか? と思っています。これについてはまた来週。