スーパープログラマのSIにおける限界

普段から総工数1000人月を軽く超えるようなプロジェクト内で生活しているせいで、麻痺しているのかもしれないけれども、SIerの仕事ってやっぱり理解されていないなあと思うことはある。確かに効率は悪いよ。でも実際問題、コーディングをしている時間なんて全体の三分の一にも満たないわけで、そこをスーパープログラマーに置き換えて削れる工数なんてたかが知れている。とても単純な話、量が多いだけ。そんなところにスーパープログラマーを投入するよりは、もうちょっとコアな、真にコンピュータスキルが必要なところに使いたい。ていうか、単純労働なんてしたくないでしょ、スーパープログラマー。均質化は属人性の排除のためにあるわけだし。

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

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

僕の考えていることが正しいかどうかはわからないけれども、ソフトウェア工学が目指すのは、この30倍を縮める手段の提供なんじゃないかなあ。属人性の排除はそれに伴うものだよね。差が出るから均一化できないんじゃなくて、均一化できてないから差が出るのではないか。

仕事が高度になればなるほど、属人性は排除できないし、人材の替えはきかない。問題を解決できない人間を100人集めても、問題は解決できない。問題を解決できるのは、問題を解決できる能力を持った人間だけ。

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

そう、これは正しい。見方を変えると、問題を解決する能力と、生産性が30倍の能力は、別個のものである。30倍の仕事が出来る人間をコーダーとして高額で雇うことは可能だけど、ソリューションを導いてくれる人かどうかはわからない。計算できるのは、手の早さが30倍であることだけだ。それだって眉唾で、常に30倍で計算できるとは限らない。
そりゃあ2倍の金額で30倍働いてくれると助かるけど、それほどはいない、そのレベルの人を10人集めて1人倒れたら30人連れてこないといけないなんてぞっとしない話だ。300人が5人倒れるのとはわけが違う。

たとえば水泳の「チーム北島」に例えるのはどうか。チーム北島では、北島選手のためだけにコーチや栄養士など何人ものスタッフがチームとしてサポートしている。あるいは売れっ子マンガ家とそのアシスタントでもいい。どちらも、たった一人の秀でた才能のためだけに何人ものスタッフがサポートしている。

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

北島が目指すのは一個の金メダルであるけれども、システムが目指すのは1000画面あるシステムかもしれない。一個の人間の持てる能力を搾り出すのが果たして効率的か。10000円の肉が1000円の肉の10倍おいしいわけじゃないのと同じくらい、1人の力の限界を引き出すことに価値はない。一人の人間が限界を振り絞る、という前提がある競技だからこそチーム北島に意味はある。システム開発においてそういった意味があるケースはごくまれだ。

最後にもう一度。高度な仕事になるほど個人に依存するのは避けられないし、属人性を排除すべきではない。属人性を排除して各人の能力を均一化して扱おうとしたソフトウェア工学は根本的に間違っている。

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

単純に、「一人前の職人にといえるにはこれが出来ないと」のレベルを規定しよう、底上げしていこう、ということなんじゃないのかなあ。高度高度というけれど、そこでいう高度は仕事の実に限られた部分だけの話ではないのか。ソリューションを考えること、高度な技術で設計開発すること、それを用いた実システムを作り上げること、全部が同じように大事な仕事だ。特にSIerはプログラムを作るのが仕事なのではなく、お客さんが使うシステムを作るのが仕事なんだ。こと建築現場においては、方法論がしっかりしていればしているほどよい。