日本のソフトウェア産業を考える

日本のソフトウェア開発の生産性が低い理由を考察した記事を見つけた。
全く同感だったので、コメントと共に書き留める。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070306/264055/

 中小のソフトウエア会社は、市場からの要請に応えて、新卒者をろくな教育もせずに開発プロジェクトに放り込んだ。大企業が採用した新卒者も、大量の採用で教育に手が回らず、事情は大して変わらなかった。

日本はプログラマーが不足していると昔から言われているが、ソフトウェア会社自体は結構多くあるように思う。それに、私自身が見てきた経験として、趣味でプログラミングをする若くて優秀なアマチュアのプログラマーは決して少なくない。しかし、優秀なプログラマーが職業プログラマーにはならない傾向があると思う。
その理由はいくつか思い当たる。例えば、趣味のプログラマーはモチベーションが無いと力を発揮できないことを感覚的に知っているため、やらされるプログラミングを嫌う。また、優秀なプログラマーは大抵プログラミング以外にも発揮できる能力があり、職業を選択できるため、プログラマーにはならない。それに、徹夜続きであるとか、実際にプログラミングができる時間は10%も無いとか、プログラマーという職業について希望を持てない噂が流れている。
その結果、ソフトハウスに入る新人はプログラミングの素人が多いのだろう。

 その一方で、目的と手段とを取り違えて、モデルに書かれたプロセスを表面的にこなし、小さな範囲で要領よく認証を取得し、あたかも会社全体がレベル達成したように宣伝する企業も増えた。認証獲得やアセスメント自体を目的とすると、達成した途端に経営トップが投資意欲を失い、地道な改善活動を妨げる。後には死んだ規格や形式的に書類に記録をするといった無駄な作業が残り、本来の目的と逆の結果をもたらす。

能力の無いソフトウェア開発者は、開発プロセスに従うことしか考えなくなる。そして、業務を効率的に進めるためにケースバイケースで開発プロセスを少し外れようとする優秀な技術者にケチをつけるようになる。開発効率を上げるために開発プロセスを手段として採用するのでなく、本来の目的を忘れて開発プロセスに従うことが目的になるのだ。

 発注する側がプログラミングなど、ソフト開発の最下流部分を発注しているつもりでも、受ける側に力量があれば、技術やノウハウを吸収して自らの力で設計や開発ができるようになる。逆に、発注者は技術とノウハウを維持しているつもりでも、実際にソフトウエアを開発していないと、高い品質で効率よく作る能力は急速に衰え、見積もりを正当に評価する力もなくなる。

発注者が受注者の納品物を検査するのは容易ではない。仕様通りに動くかどうかは、テストすれば分かるかも知れない。しかし、受注者も大きな工数をかけてテストをして出す訳で、それで見つからなかった不具合を発注者が見つけるのは大変だ。従って、基本的には受注者が提出したテスト結果報告を信用することになる。
受注者がかけた作業量が妥当であるかどうかを、実際に作業をしていない発注者が見極めるのも難しいし、納品物の仕様通りである以外の品質(保守性や効率性など)を、実際に作ってない発注者が見極めるのも難しい。
結局発注者側がそういう作業を嫌がるために、受注者側の言いなりになっていく。

システムからサブシステムを切り出し、自ら責任範囲を決め、それが果たせるようになると、親会社に執拗しつようにお願いして順次、請負契約に切り替えた。

 ところが派遣指向の会社はその逆をやっている。顧客が請負を要請しても、派遣を続けて欲しいと懇願しているのを知って驚いた。経営の自立は、個人の自立を促す。自らの意思で、必要な技術を身につけようとする。それが企業風土になれば、自立した企業と言える。

実際にソフトウェア開発の仕事をしていると、工数に対して費用を取る方式を希望する外注がある。やった仕事でなく、仕事した時間に対する報酬を求めている訳だから、できる仕事に自信が無いということにしか思えない。
逆に、請負契約(一括の業務委託)にすると、非常に融通が利かなくなる会社がある。最初に決めたこと以外は絶対にやらないとか、ちょっとした仕様変更に対して莫大な追加費用を請求するとかいうことが起こる。そういう会社に遭遇すると、工数精算という方式も重要だと思う。
2つの方式の適正運用に、多くの人が考えさせられ悩まされているのも納得だ。


他にも日本のソフトウェア産業の問題点として個人的に思う所がある。

日本ではプログラマーの地位が異常に低い。尊敬されるべき技術を持ったプログラマーも、単なる作業者の扱いにされる。または、マネジメント業務が重視され過ぎているため、優秀なプログラマーに管理業務が充てられる。

http://jibun.atmarkit.co.jp/lcareer01/rensai/topi05/topi01.htmlより:

日本においては、「プログラマ」は、コンピュータエンジニアとして仕事を始めたばかりの、経験の浅い人に課せられる職責と考えられることがある。しかし、米国では決してそうではない。
 「髪の毛が真っ白になった、明らかに50代から60代の年配の人が、誇りを持って『自分はプログラマだ』と名乗るんです。日本ではプログラマを何年か務めた後、システムエンジニア(SE)になって、その後にプロジェクトリーダー、マネージャになって、といった通念がありますが、それは本当にそうあるべきなのか。いわゆる、『マイスター』として、1つの仕事を続けていくのが向いている人だっていると思うんです」

 確かに技術者の中には、「いつまでもプログラマのままでは問題がある」という風潮に違和感を覚える人もいる。だが、フリーの技術者ならともかく、企業に所属していると、職責を変えていくことが求められるケースが多いというのが現実だろう。


技術で大きくなったソフトハウスであっても、外注を使うことに慣れると、技術の保持に金が掛かるからといって、技術のアウトソーシングを進めたりする所がある。技術の無いソフトハウスに存在する意味があるのだろうか。受託ならブローカー、市販ソフト開発なら企画屋に過ぎないのではないだろうか。
技術があれば容易に真似ができる。技術が無く、技術を移転した外注に逃げられたら、何もできなくなる。無形でわかりにくいからといって、技術を軽視し始めたら終わりだ。職人技の物作りで生き残ってきた国の人間が職人気質を失ってやっていけるのだろうか。