FutureInsight.info

AI、ビッグデータ、ライフサイエンス、テクノロジービッグプレイヤーの動向、これからの働き方などの「未来」に注目して考察するブログです。

プログラマの生産性はどのレベルにあるか

以下のエントリーを読んでちょっと考えました。

世の中全体で、技術と資本の蓄積が十分に進み、生産性が極限まで高まると何が起きるのか?現代はその過程の中でどのくらいの位置にいるのか? という問題だ。

  1. 生産性が高まったので、単純労働しかできない低スキルの労働者は少ししか必要とされなくなる。スキルと職をめぐる競争が激化し、敗れた者は飢えて死ぬ。(いまのアメリカと日本はこの路線の途中に見える)
  2. 実はそうではなく、生産性が高まったので、世の中の全員が労働しなくてもみんな食って行ける。ベーシックインカムのような制度がうまく機能して、労働はやりたい人だけがやるような世の中になる。ニートはごく普通の社会的状態になる。(共産主義の理想形に近い。もしこうなったら、「働いたら負け」という言葉はものすごく時代を先取りしていたことになる)
  3. そのどちらでもなく、現在はまだ「生産性が極限まで高まる」という状態には程遠いレベルであるので、貧困問題は産業革命以後と全く同じ理由で発生している。

この議論に対して答えが出せるほど社会学の知識を持っているわけではないので、特殊なケースとしてコンピュータにおけるプログラムという行為がどのステージにあるか考えてみようかと思います。

まず、現在のプログラムの生産性が過去に類が高いくらい高いことは間違いありません。デスクトップアプリにおけるC#と.Net Frameworkの生産性、モバイル分野におけるAndroidのプログラミング環境とVM実行速度、システム分野におけるJavaのDIやORマッパー、その他蓄積されたノウハウ、そして進化を止める気配がないRubyやPythonのスクリプト言語。C言語やアセンブラからプログラムを始めたものにとってみれば、現在のプログラミング環境の生産性は信じられない水準になっています。

ただ、この生産性の増加のおかげで費やす人員が減ったかといういうとそんなことはない気がします。たとえば三菱UFJ銀行の業務システム統合作業は総費用3300億円、開発工数14万人月に及び、にわかには想像ができない工数が費やされました。(まぁ、中身はCOBOLとメインフレームかもしれませんが)

この工数増加の主原因が何かというと、プログラムの生産性が高まってしまった結果、人間が理解できる範囲の複雑さを簡単に超えてしまうパーツが作られ、そしてそのある一定の複雑さを備えたパーツが組み合わされることで指数的に複雑さが増加してしまった結果、カバーしなければいけない分野、テスト、想定しなければいけないケースが巨大化してしまったのではないかと思います。

つまり、僕の考えにもっとも近いものは3番の「そのどちらでもなく、現在はまだ「生産性が極限まで高まる」という状態には程遠いレベルであるので、貧困問題は産業革命以後と全く同じ理由で発生している。」というものです。人間は複雑なシステムを何とかして構築する生産性の高い道具を手に入れてしまったが、逆にその高まった生産性がもたらした複雑なシステムを飼いならすという領域には達していないのではないかと。

よって、今後、複雑さを飼いならす技法に一層の進化がない限り、プログラムという分野においては必要な工数が削減されるような生産性の劇的な増加はないのではないかと感じました。もちろん農業とか工業の分野では事情はまったく違うと思いますが。この話題はとても興味深いです。