ソフトウェア工学は知識や技術を体系化するけど属人性の排除はできてない

ソフトウェア工学は、知識や技術を体系化することには成功している。だけど、属人性の排除はまるっきりできてない。

たとえばオブジェクト指向を考えてみるとよい。オブジェクト指向という考え方は、プログラミング言語においても設計方法論においても大きな影響を与えたし、ソフトウェア開発においても大いに役立っている。またデザインパターンなどは、まさに知識を体系化したものの例としてふさわしい。

しかしオブジェクト指向が広まることで属人性が排除されただろうか? 誰もがよいクラス設計を行なえるようになっただろうか? 現実は逆だろう。一握りのできる人たちは美しいまでのクラス設計を行なうが、多くの人は汚くて複雑なクラス設計しかできていない。つまりオブジェクト指向が広まるにつれ能力差と属人性は拡大していった*1

これには 2 つ理由があると思う。

ひとつは、オブジェクト指向を理解している人としてない人との格差により属人性が広がったこと。オブジェクト指向を理解している人は高い生産性を上げ、そうでない人は生産性を上げるどころか下げてしまうことも珍しくない。新しい技術が登場するほどこういった格差は広がるばかりであり、できる人間への属人性は高まっていく。

もうひとつは、利用可能な選択肢が多いに増えたことで、それをどう適用するかで人による違いが大きくなったこと。これはオブジェクト指向を十分理解している人どうしの間でも違いが大きいことに注意したい。たとえばクラス設計をするうえで、継承を使うのか委譲を使うのかクロージャを使うのか、どんなデザインパターンを使うのか、住所を顧客クラスの属性にするのか独立したクラスにするのか、などなど。利用可能な技術が増えるほど人による違いは大きくなり、結果として属人性は高まってしまう。


どうも少なくない数の人が『ソフトウェア工学は、工学である以上、属人性の排除が求められる』と考えているようだ。しかし工学は知識を体系化して生産性を高めることができればそれでよく、属人性の排除なんて別に必要ないと思うのだが、いかがだろうか。

「工学」は「工業」に通じるので、全体としての生産性を上げたい、というのが目標。何故そうなるかを解明できているかどうかなんて、ときには二の次、三の次にされる。
だから、属人性を排除したい、ということは工学として当たり前のこと。

ソフトウェア工学 - それって食えるのか?

属人性を排除したからといって生産性が上がるわけではないし、属人性を排除しなくても生産性を上げる方法はあるだろう。他の分野での工学は属人性を排除する事で生産性を上げたかもしれないけど、それがすべての分野でも成り立つとは限らない。
少なくとも、属人性を排除しようとして今までの何十年と失敗を繰り返してきたのだから、いいかげん『属人性を排除すれば生産性が高まる』ということに疑問を持つべきではないか。

*1:そもそも「オブジェクト指向」という言葉の定義からして、人によって大きく異なる。まるで属人性を排除できていない。