頭数要員だけでこなせる仕事が今後もずっと取れると考えているSIerの仮説は間違っている

本来このブログをつける主な目的は、勉強したことのメモとプログラマー向けの技術の共有というところにあって、業界がどうこういうことを書くつもりはなかったのですが、多くの方のさまざまなコメントがいただけることは非常に勉強になるので、この際思っていることを書かせていただきます。(ここではこうあるべきという将来像を主張することが目的ではなくて、現状の問題点について自分が思うことを質問させていただき皆さんに意見をいただきたいと考えています。)自分がまさにSIをやっている会社に所属しているわけですから、できることなら自分の仕事にもっと誇りを持ちたいと思うのですが、多くの方の共通する見解としては、少なくともプログラマーにとってはSIは好ましい仕事ではないという意見が多いように思います。確かに、最適なデータ構造やアーキテクチャを考えるプログラマー的発想で考えると、どうしてもこの業界は無駄が多く美しくないと思えてしまいますね。まあ、この世の中は天国ではないのですから、理想的な世界を追い求めても失望するだけですね。この業界でやっていくにはあくまでも仕事ということで妥協してやっていくことが大切だと思います。
さて、本題に戻ります。前の記事でプログラマーのスキルが低いままという前提で仕事を考えるSIerの考えが間違っていると指摘させていただいたのですが、それに関連して、そもそもスキルの低い頭数要員でできる仕事が5年先10年先もずっと取れるという考え方は正しくないのではないでしょうか。経済全体の不景気の問題に隠されているところもあるのですが、業界固有の問題があるように思えてしまいます。
実は、ちょっと前に(Seamとプログラマーのスキル? - 達人プログラマーを目指して)という記事を書いていてそこで既に主張していたのですが、要するに最新のOSSを使いこなすと、従来のやり方に比べて同じ機能でもクラス数が10分の1で済んだり、ステップ数が5分の1で済んだりということが実際にあるのです。ただし、難しいのはコードの記述量は激減しても結局頭を使う部分が残ってしまうという点です。

従来のStrutsに比べてSeamJPAが敷居が高いとはいわれますが、よくよく考えてみると同じレベルの機能を実現しようとしたら結局どちらでも考えなくてはならないことの総量は一緒かと思います。単にStrutsだと型変換やDTOの詰め替えなどの頭を使わない配管コードの実装に多くのステップ数を費やしていたため、プログラマーのスキルが少なくてもよいように見えているだけで、きちんと考えなくてはならないポイントが存在していること自体は変わりません。Seamに限らずですが最近のOSSフレームワークは、やはり世界中の達人と呼ばれる人々が考え出したベストに近いアイデアをどんどん取り込んで、無駄なコードを極力減らす方向で改善されているため、初心者でできるようなコーディングはほとんど残らず、残りの難しい部分のみが残ってしまっているという傾向があるかもしれません。さらに、裏でいろいろな機能がブラックボックス化されてしまっているため問題解決しようとしたら仕組み的なことについては相当理解している必要があります。手を動かす代わりに頭を動かす必要があるということかと思います。

だから、その記事では

ですので、Seamなどの新しいフレームワークを使って、かつ、初心者をたくさん集めて労働集約的にアプリケーションを作るという発想自体が実態とマッチしていないような気がしてなりません。プログラマーの雇用を保護し、人月ビジネスの売上げ確保ためにあえて冗長で無駄なコーディングを続けるか、最新フレームワークを使いこなせる少数精鋭チームを育成して、それでも収益が上がる仕組みを作るかどちらかだと思いますが。

と結論しています。ここではOSSフレームワークの例を取り上げていますが、その他にも、最近はSaaSSOAや自動生成ツールなどが利用できるようになっていますから、以前と比べてソフトウェアの再利用というのは徐々にですが確実に進んできています。そうすると以前は人月をかけて手間隙かけて手作りしていたプログラムの多くをできるだけ作らなくて済ませるという傾向が顕著になってくるのではないでしょうか。たとえば、以前なら手作りでCRUD処理をするバッチプログラムを作っていたのが、ETLパッケージを使えばほとんどコーディングなしで実現できてしまうということがあります。Force.comのようなクラウド上のPaaS技術を使えば基盤の準備も不要で簡単にCRMのようなアプリケーションが作れてしまいます。
そうすると、わざわざJavaを使ってスクラッチ開発するようなシステムというのは自然に

  • パッケージでは得られないような高性能を追求する
  • 複雑な商品モデルを扱い将来にわたって機能拡張を容易にする
  • 既存のシステムを組み合わせて全体として統合したシステムを構築する
  • 今までにない新しい考え方のサービスを実現する

といったような比較的高度な技術力を要求される分野に限られるようになってくるという傾向があるのではないでしょうか。そういう領域のシステムだと、どうしても技術リスクが高いから少数精鋭でイテレーティブに開発することが適しているし、どれだけ大量の人数を揃えたところで技術レベルが低かったらいつまでたっても実現できないと思われます。
そういうことを考えてみても、プログラマーの成長を考えないSIerの仮説は間違っている - 達人プログラマーを目指してで書いたように、ずっとプログラマーを頭数要員としてしか考えないモデルは実態と合わなくなってくるのではないかと思いますがいかがでしょうか?