プロのプログラマなら『欠陥ソフトウェアの経済学』を読んでおくべき

まだ読中だが、id:eel3:20100325:1270604248 で予告したように書評を書く。

欠陥ソフトウェアの経済学 ―その高すぎる代償―

欠陥ソフトウェアの経済学 ―その高すぎる代償―

エントリ名の通り、プロのプログラマならこの本を読んでおくべきだと思う。コの業界で食べている職業プログラマだけではない。OS、ミドルウェア、ある種のライブラリといった基盤となるOSSに関わる人も、読んでおいた方がよい。

本書は「現状認識」の為の本だ。今、何が起きていて、何が問題なのか、多方面から深く分析している。特定のベンダーやメーカー、ひいては業界をヒステリックに非難する本ではない。技術論の本でもない。市場と、プレーヤーである企業と、作り手であるプログラマと、ソフトウェアを直接/間接的に使用する顧客―それら全ての行動とその影響を分析した本だ。

プロとして、自分たちが置かれている状況ぐらいは把握しておくべきだろう。幸いにも手頃な価格と分量だ。内容も難しすぎない。

12-15年前、少なくとも日本の一般家庭ではパソコンもネット接続も不要だった。多くの企業では社員にパソコンが支給されることは少なかったし、ネットワークに接続されている必要性は薄かった。

だが今では、一般家庭ではネットワークに接続された何かしらの端末が1台以上ある。企業ではパソコンが支給される(事務方では1人1台だ)し、メールやWebベースのサービスを利用する為にネットワークに繋がっている。

それだけではない。今ではゲーム機や楽器もOSで制御され、TCP/IPプロトコルスタックを積んでHTTPで通信する時代だ。

気がついたら我々は複雑なソフトウェアで制御された機器に囲まれ、ネットワークを介してソフトウェアで構築されたサービスを使用して日々を過ごしている*1。それらのどれか1つでも欠けてしまったら万事立ち行かなくなるぐらいに依存している。

当初は物珍しかったものが、気がついたらインフラ化してしまったのだ。どちらかというと保守的な私でも、有線LANでネットワークに繋がっているパソコンとWebブラウザとメールが使えないと仕事にならない。

しかし事実上インフラ化しているとはいえ、複雑なソフトウェアで制御された機器やサービスの信頼性は高くない。ソフトウェアというものを意識し始めて10年以上たつが、事態は良い方にも悪い方にも進みつつあると感じる。

かつてWindows 95Windows 98と格闘していた頃と比べると、目に見えて大変なことになる回数は減った。しかしパッチの数は相変わらず多く、それに今でもパッチが原因で別の被害に遭うことが時々ある。さらに今ではOS以外のアプリケーションのアップデートも欠かせなくなった。

組込み機器向けのソフトウェアは確実に多機能化・肥大化して、それに伴い不具合も増加している。最近ではネットワーク接続やフラッシュメモリ、小型HDD等のお陰で、製品出荷後でもシステムをアップデートできる。出荷に間に合わないから最初のバージョンアップで修正or提供しよう、なんてこともよくある。それが良いことなのか悪いことなのかは別として。

Webサービスは個人情報の流出やフィッシングなどの詐欺の被害に遭う危険と隣り合わせで便利さを享受する面がある。その便利ささえ、2010/03/31のgooメールリニューアル後の混乱のように、儚く消え去ってしまうことがある。

良くも悪くもインフラ化してしまった以上、品質を問われるのは当然だろう。ガスや水道の供給が不安定になるようなもので、回避策は存在するものの、代償は大きい。考えたくもない。

コの業界の現場の人としては、バグの全く無いソフトウェアを書くことはできないことも、銀の弾丸なんて存在しないことも知っている。と同時に、劇的ではないもののバグを減らすことに繋がる方法が幾つか存在することも知っている。私以外にも同様の人はいるし、幾つかの手法を実践している人さえいる。

バグは減らせる。それでも、今日も現場では相変わらずな光景がひろがっている。バグは増える一方だ。

私は職業プログラマで、特定の企業で働いている。企業は市場のプレーヤーとして他社と熾烈な競争を繰り広げている。そして企業のターゲットは、結局のところサービスや機器を購入する顧客だ。

そう、顧客の行動が市場を動かし、市場の動向に企業が影響を受け、その余波が開発現場にも届く。開発現場を含む企業自体の動きが市場に波及し、顧客の行動に影響する。技術的な話以外の面、市場の下での顧客の行動が企業に及ぼす影響の方が遥かに大きい。

そして市場のプレーヤーである以上、企業は市場や顧客の行動に追従するだろう。売れなければ事業を継続できないのだ。

だから、市場を含む広範囲に及ぶ現状を分析した本書を読み、正しく現状認識するべきだ。でなければ我々は問題解決の為に、単なる印象に基づいて誤った方向に突き進んでいってしまう危険がある。

職業プログラマでない人も、何らかの基盤となるOSSに携わっているなら、本書を読む価値がある。OSSを組み込んだ機器やサービスがインフラ化している以上、品質面の要求は避けられない。そして、OSSには商用ソフトウェアにはない利点があるが、同時に弱点も存在する。万能な手法などない。その弱点による品質面での問題についても、本書で分析されている。

本書では明確な解決策は提示されていない。個々の問題についてどこが原因なのかは分析されている。しかしどうすればエレガントに全ての原因を取り除くことができるかは書かれていない。

しかしそれは当然のことだ。著者も書いているが、複雑に絡み合った問題には正しい解答など存在しない。あちらをたてればこちらがたたず。銀の弾丸など期待できないのだ。

だが他の方法よりマシなアプローチは存在する。気の遠くなるような困難な道かもしれないが、一歩一歩地道に歩んでいくしかない。

本書で現状を把握することが、その最初の1歩である。

*1:ネットワーク通信自体、ソフトウェアを積んだ機器で制御されている。