日本のソフトウェア技術者は多すぎる

顧客とプログラマ以外の中間層を排除すると

経済産業省「特定サービス産業動態統計調査」の2007年3月分(確報)によれば、日本の情報サービス業の売り上げは年間約11兆円、常用従業者数は約31万人(うち技術系23万人)だそうである。統計というものは常に掘り下げるとわけがわからなくなるのが常なので、あくまでも大体この程度だと捉えておくのがいいだろう。単純に割り算をすると、11兆円 / 31万人 = 3500万円が従業者一人あたりの売り上げとなる。従業者一人当たりの平均年間人件費が 500万円 だと仮定すると、3500 - 500 = 3000 万円は人件費以外のものに消えている勘定になる。それが何なのかよくはわからないが・・・。

私は、大学では経済学を学んだ。経済学というのは厳密に議論しだすときりがないので、ここでは大胆な単純化を行う。従業員一人当たりの平均人件費が 500万円 という仮定の下で、23万人の技術者が総計いくらもらっているというと、

500万円 x 23万人 = 1兆1500億円

である。23万人の技術者が1兆1500億円というパイを共有しているわけである。(単純化のため以下ではこれらの技術者が全員ソフトウェアを生産する人たちだと仮定する。実際にはネットワーク管理者等、ソフトウェアを作らない人たちもいるのだが、それはここでは措いておく。税金についても考えない)

問題は、この23万人の技術者のなかで本当の技術者は何人いるかということだ。つまり、ソフトウェアを直接に作り出している技術者の数である。実際にはマネジャー層も多く含まれているのだろう。設計書を書くだけのいわゆる SE たちも多くいるだろう。しかし、ソフトウェア産業で一番大切なのは、実際に動くコードである。なぜなら、当たり前ながら動くコードだけが現実のビジネス課題を解決するからである。

もっとも理想的な状況は、コードを実際に書く人たち(プログラマ)とソフトウェアを利用する人(顧客)だけが存在する世界だ。プログラマと顧客の中間に挟まる人たち(営業・マネジャ・コンサルタント・ドキュメントを書くだけのエンジニア)は、ある意味で無駄な存在である。ではなぜこうした無駄が存在するのか。それは、現状、こうした中間層が存在しなければ、顧客のニーズをプログラマに伝達して、適切なソフトウェアを作り出すことができないのである。もしなんらかの技術的組織的改革によって、ソフトウェア作りに直接関与しない中間層を削減または根絶することができれば、われわれは以前より安いコストで同じ価値をもつソフトウェアを手に入れることができるようになる。

1人当たりの生産性が2倍になれば報酬は3倍になる?

では、どうやって中間層を排除することができるだろうか?これはプログラマ一人当たりの生産性をあげることによって達成できる。あるプロジェクトで達成すべきタスクが一定であるとき、プログラマの生産性が2倍になれば、そのタスクを半分の人数でこなすことができるはずである。実際には、これは半分以下の人数で達成できる。チームのサイズが小さくなれば、意思疎通のためのコスト(マネジメントコスト/コミュニケーションコスト)がサイズの2乗に比例して小さくなるからだ。

Bruce A. Tate「Java から Ruby へ」からの引用。

マネジメントについて考えてみましょう。たとえば、Webベースのデータベースアプリケーション開発で、Ruby on Rails の生産性が Java の5倍で、標準的なマネージャ1人につき10人の開発者を管理できるとしましょう。Rails で生産性が5倍になれば、開発者の数は5分の1で済みますから、マネージャがたくさんのプロジェクトを管理できるので、マネージャの数を減らせます。マネージャーの数が少なくなれば、マネジメント階層を丸ごと1階層減らして、組織をフラットにできます。

同じプロジェクトに4人のプログラマと2人のマネジャ・ドキュメント書き専門エンジニアが必要であったのが、一人当たりの生産性が2倍になり2人のプログラマで済むようになると、コミュニケーションコストの低下により、こうしたマネジャ・ドキュメント書きエンジニアが必要なくなるかもしれない。そうすると6人の仕事をいまは2人で回せるようになるわけで、もし報酬額全体が不変なら、一人当たり報酬は3倍になる。(まあもちろん、市場の競争にさらされて報酬額自体も減っていくかもしれないが)

プログラマ年収1500万円時代

一人当たりの生産性を上げるのは優秀なツール(例:Ruby on Rails)を使うのも大切だが、もっと重要なのは、優秀なプログラマだけを雇用して、優秀でないひとには辞めてもらうという選択と集中であろう。もっとも優秀なプログラマとそうでないプログラマの間にはどう少なく見積もっても 20:1 くらいの生産性の格差がある。優秀なプログラマだけがソフトウェア業界に残り、年収1500万円を稼ぐ。そして、医師・弁護士と同等の社会的尊敬を受ける。そして、優秀でないプログラマたちには、彼らの適性により合致したほかの産業に移動してもらう。これが、この業界が健全化していくもっともよいシナリオのように思える。そのためには、何がよいエンジニアなのか、何がよいソフトウェアなのか、という客観的基準が確立する必要があるが、これが一番の難題であるのは確かだ・・・。それを今後考えていきたい。