ソフトウェア工学とソフトウェア開発中二病

id:kwatchさんの「従来のソフトウェア工学が決定的に間違っている点」だが、ありがちかつ決定的な勘違いを1つしている。

それは、『現在のソフトウェア工学は、属人性の排除を目的としている訳ではなく、目的を達成する為の結論として属人性の排除を要素として構築されている。』という事だ。なので、それは間違っている・いないの問題ではなく、むしろコアなのである。ここが問題なのだ。

ではなぜ現在のソフトウェア工学には「属人性の排除が要素として必要」でなければならないのか。


基本に立ち返って、ソフトウェア工学の目的とはなんだろう。それは「ソフトウェア開発が産業として安定成立する事」だろう。そこでこれを、大目的とする。
では、さらに考えて「産業として安定成立」するにはどうしたらいいだろうか。

大目的を成立させる為の、最低限の条件として考えられるのが、

・条件1:成果物の品質安定
・条件2:関連人材の安定供給
・条件3:産業内で流通するマネーの明確化

の3つ。いわゆる「ヒト・モノ・カネ」だろう。ソフトウェア開発が大規模産業であり続けようとするならば、それが接する外部産業との信用関係上、これは欠く事のできない要素であるはずだ。
では、これらの目的と条件に照らして、参照エントリーを見てみたい。

ソフトウェア開発では、個人の生産性は上と下とで 30 倍違うと言われる。これが本当だと仮定したら、これだけ差がでるものを均一化なんてできるわけない (したところで間違った結論しかでない) んだから、属人性を排除することは大きな誤りである。

従来のソフトウェア工学が決定的に間違っている点 - kなんとかの日記

 これは「条件2」に反する。30倍も優秀な開発者が安定的に存在すれば産業として問題ないが、現実にはその存在確立は30分の1以下でしかない。「そんな事はない!30人いれば1人以上はいるはずだ!はてなを見ればわかる!」という話は間違っている。「産業」の意味する対象は広く、産業に従事するはずの人間は全て含まれ、えり好みできないのである。「プログラミングに興味がある人のみ」なんて狭すぎる人材を前提には出来ず、他業種と同じように「経験も無く、単に仕事としてしかソフトウェア開発を考えられない新卒」も含めて成立できなければ産業として十分に大きくなれない。となると、その存在確立は産業全体で1000分の1以下にはなるだろう。
 それでも「産業全体を、30倍の人だけで形成すれば・・・」というのも考える事はできるが、それは虫が良すぎる話だ。その採用だけでも膨大なコストがかかるし、それを前提としたソフトウェア工学では、逆に破綻のリスクが高すぎる。産業のサイズとしても、大きくできない。
 では、チームの一部に30倍開発者を含むとするソフトウェア工学を考えてみるとどうなるか。仮に「30倍 対 平凡」の存在比を、非常に高めに見積もって100人に一人の「1:99」で存在するとしよう。この場合、50人(!)の開発チームに30倍の人が存在できる確立は1/2だ。それ以下のチーム人数なら、さらに低い。半分以下の確立でしか存在しえないチームを前提としたソフトウェア工学は、安定的な人材供給と開発品質確保をしているとは言えないだろう。なので、条件に反する。

頭の悪い大人100人より、すごく頭のいい小学生1人のほうが、成果物が出る。ソフトウェア開発はそういう類いの仕事。

従来のソフトウェア工学が決定的に間違っている点 - kなんとかの日記

 これは「条件1」に反する。ソフトウェア開発がそういう類の仕事でしか存在しえないなら、ほとんどのソフトウェア開発品質*1が安定しない事になり、産業として信頼されず、結果として大きくなれない。そのためには、すごく頭のいい小学生1人にたよらなくても、安定した開発品質を保てなくてはならない。その目的に沿ったソフトウェア工学になっている。さらに言えば「大人100人より、すごく頭のいい小学生」は、現実には前述のとおり10000分の1以下でしか存在しないだろうから、「条件2」にも反する。


 このように、近年のソフトウェア工学は「産業工学として色々考えた結果、属人性を考慮していては産業といて安定しないという結論になった」のである。なので、間違っている・いないの問題ではない。そのあたりを考慮せずに、30倍開発者の不満や、まつもとさん辺りの特殊条件だけを見て「現状のソフトウェア工学は間違っている」というのは、間違っているのではなかろうか。
 もし、「属人性を考慮しても、大きな産業として十分安定する」方法が発見されたり、n倍開発者を量産可能な教育手法が開発されれば、ソフトウェア工学としての前提が変わる*2ので、その方向に行くのだろう。工学には大目的があり、それは明確に存在し、それに向かって構築される・されているのである。結果だけしか知らなかったりや、産業の一部特殊ケースに特化して、ソフトウェア工学について論議を始めるとおかしな話になる。

 しかし思うに、産業全体の大きさや工学の大目的を理解できずに、自分の周辺のみを見て憤るのはよくある話で、開発者としての成長過程で誰もが一度は通る道のように思う。言うならば「ソフトウェア開発中二病」とでも言うべきか。そして優秀な開発者である程、ここで足踏みしすぎたり、最悪は潰れたりする事がある様に思う。ここを抜けさえすれば、自分の立ち位置やアイデンティティ、業界内での動き方もスムースに考え始められるのにもったいないな、と感じるばかりだ。
 もしかしたら、今のソフトウェア産業が、もう一段成長するのに必要なのは「ソフトウェア開発中二病・対策メソッド」なのかもしれない。:p

*1:「開発品質」はいわゆる「バグの少なさ」とかではなく、開発量や期間も含む、対外産業からの視点から見た「品質」

*2:前提とは「n倍開発者は、産業全体の従事可能人数から考えると、ごく一部しか存在しない。のでそれを一般的に組み入れて工学を構築できない」事。