「抽象的」という言葉の使い方がおかしいとき
たとえば開発者が同僚に何らかの機能を説明する際、技術者相手でないのに実装レイヤーの話に終始してたとする。それを聞いた人が「その議論は抽象的でわからないので具体的に話してくれ」と返すことがある。
しかしこういうときに「抽象的」という単語を使うのは間違っていて、単に「分かりにくい」と言うべきではないか。
なぜなら普通、実装は仕様よりも具体的なものだからだ。
日常生活では「具体的なもの=わかりやすい」というケースがたまたま多いので、逆にわかりにくいものを全部「抽象的」と呼ぶ癖がついてしまうことがある。
もちろん現実はそうではなく、むしろ「具体的すぎてわからない」「程々の抽象度を持って話して欲しい」ということが往々にしてある。「細かすぎて伝わらない」というときの「細かい」というのはここでいう「具体」のニュアンスに近いだろう。
このように難しい ⇔ 簡単、抽象 ⇔ 具体は独立したものさしである。冒頭の返しをした人は、むしろ抽象度の引き上げを要求すべきだったのだ――
……と言って終わりでもいいのだが、実は冒頭の言い回しにも理というか擁護可能な面があるかもしれない。
そもそも、実装が仕様よりも具体的であると言える理由はなにか。
仕様とは実現したい目的であり、通常そのために複数の実現方法が考えられる。
具体的であるとは個々の事例に関することなので、特定の実装方法に関する説明は実現したい目的よりも具体的だ……と技術者は考える。
しかしここで例の同僚は、実装よりもさらに具体性(= 個別性)が高く、かつそれを聞くことによって仕様を理解できるような何かを求めていた可能性が考えられる。そんなものがあるだろうか。
あるとしたら、それは個別のユースケース(つまり利用のシナリオ)だ。
ここで視点を作る人から使う人に移してみる。するとソフトウェアによって何かをするという目的があり、その使い方に複数の方法が考えられる状況になる。
(※ よく「使う人にとってソフトウェアは手段にすぎない」と言われることがあるが、それは他にいくらでも方法がある場合に視点を広げた際の議論である。少なくともあるソフトウェアを使わないと実現できないなにかがある場合、ソフトウェアによって何かをすることを「目的」と呼ぶのは何らおかしくない。もし冒頭のような言い方をアリと考えたいのなら、それがおかしくないことを認めなければならないだろう。)
すると、冒頭の人はたとえばこう言っていたことになる。「一般にこの機能はこう作られてるのでこういう挙動をする、という話ではなく、Aさんがこうしたらその機能によってどうなるかという話が聞きたい」というような。
これは実装よりもさらに具体性(個別性)が高く、なおかつ実装より抽象度の高い仕様を理解するのに役立つ説明の例と言える。抽象度に大小関係があったとして、仕様 > 実装 > 用例 という順序があると言えそうだ。
しかしそうすると、同じ「具体」なのに「細かすぎて伝わらない」になってしまうものと「個別の事例なのでわかりやすい」になるものに分かれることになる。この違いはどこから来るのか。
先に実装よりも用例が具体的と書いたが、別に実装方向にどんどん細かく具体的な説明を考えることもできる。実装の話からその下でコンピュータがどう動いてるとか、さらにその下ではコンピュータがどういう原理で……とか。これも一種の「具体的な話」には違いないが、そういう話じゃないと誰もが思うだろう。
具体 ⇔ 抽象を縦軸として、それとは別の横軸があることになる。これを 機械論 ⇔ #目的論 の軸と呼べるかもしれない。目的論の領域において、仕様は用例よりも抽象度が高い。また機械論の領域において、プログラムの実装はコンピュータの動作原理よりも抽象度が高い。そして日常生活では目的論の話のほうが機械論の話よりも理解しやすいので、より「具体的(誤用)」に感じられる……云々。