高い品質のプログラムを作らなくてはならないと考えている職人PGの考えは間違っていた?

ソフトウェア工学の教科書やプログラミングに関する技術書は、例外なく「プログラムの品質を(制約の範囲内で)できるだけ高いものにするべき」という前提で書かれています。それがエンジニアリングの目標だし、そもそも、ものづくりの職人として、できるだけ良いものを作りたいという思いがあるのは当然だと思います。
また、よく言われることはプログラムというのは一度書いたら終わりなのではなく、長い年月をかけてメンテナンスされるものであるという考え方です。ですから、単に短い期間で作るということでなくて、長い目で見て保守性、拡張性の高いプログラムを作るということは、こういった専門書では当然良いことであるとされます。ネット上でもプログラムの品質に関するこのような特徴については、いろいろ意見が書かれていますね。
http://blog.miraclelinux.com/yume/2007/10/post_9db7.html
ソースコードの質:気難しいプログラマ:エンジニアライフ
それで、私もずっとそういう価値観で今まで仕事をやってきました。だから、プログラマーの成長を考えないSIerの仮説は間違っているで、プログラマーのスキルを向上させるべきということを書いたわけですし、Java EEや.NETはCOBOLやVB6よりも本当に生産性が高いか?でも、ある程度スキルの高い領域で仕事をしようという議論をしたわけです。しかし、

「なんか動くものを作る」のが目的であって「OOPで作る」のが目的ではないのだから別に良いのでは?という確実にスキルレベルを一定化させる発想があるけど、それは必ずしも悪ではないと思う。

争われるのは営業力と政治力で品質面は最低ラインさえ割らなきゃ後同じ。この状況下でのプロマネなら平均点の向上でなく赤点の回避を目指す方向で合っている。大型案件を奪い合う争いへの最適化かと

その通り!なんだけどそう言われ続けて何十年も変わらん。単価2倍で人月1/3とかの会社が出てきて業界を席巻しないのは、技術成長による生産性向上より客を騙す大人力のほうが利益になるって事なのかも

SIerプログラマの成長というのは、営業を覚えて若手に仕事を与えることだったりする。それが嫌なら別業界へ逝けばいいだけ。

などのご意見を多数いただき、私が今まで当然と思っていた「プログラムは高品質であるべき」というものがSIerの常識の世界では間違っていたのではないかと気づかされました。ショッキングなことだけれども、SI業界の現状としてはそういった意見が多数あることは事実として受け止める必要がありますね。
結局、私が信じてきた本などの情報は主に外国の著者のものであり、当然日本のSI業界の考え方とはまったく異なる価値観で書かれていても不思議ではありません。実際、欧米ではユーザー企業が直接PGを雇って主体的にシステムを開発するのが普通と伺っています。そうであれば、当然作ったプログラムやシステムを資産として長いこと活用したり再利用したりしたいという発想になるのは自然です。オブジェクト指向SOAなど、粒度は異なりますが、さまざまな再利用の手法が考えられてきたのはそういう背景があるのだと思います。
一方、日本のSIerの考え方では基本的に契約したシステムの機能を期限内に実装できれば良いというのが基本的な考え方です。再利用性などはユーザー企業側のメリットですが、多くの場合ユーザー企業は丸投げ状態でシステムの中身は理解できませんから、コピペが蔓延し、単体試験不能なコードであっても、一度試験し、納品できてしまえば良いというところがあります。実際は顧客のビジネスは変化しますし、要件が変わらないということはないはずなのですが、そこは「有能な」PMの政治力によっていかに顧客のわがままを抑えてやりやすい方向にコントロールする*1かというところが最重要となります。逆にソースの綺麗さや保守性といった職人PGのスキルが活かされるところは重要視されません。
エンジニアリングとしてはあるべき姿ではないと思いますが、一度作って納品してしまえば終わりで、数年後に機能拡張が必要になったら、ほぼ全面作り直しなどということはSIerのビジネス上はむしろ成功とされてしまうというところがあります。お客様を怒らせない程度に、かつ、なるべくたくさんのお金を出させるというのがSIerとして最適な成功するパターンであると言われれば、そうなのかと納得せざるを得ない面があります。私としては非常に悲しいことですが、お金儲けということを考えればそういう価値観があってもよいと思いました。
ただし、長い目で考えると、ユーザ企業もずっとだまされ続けるほど馬鹿ではないし、費用対効果や再利用性など、徐々にですが気にする企業も増えていくのではないかとも思われます。事業仕分けなど、政府関係でもだんだん財布の紐がきつくなってきている時代ですから。「ゆで蛙」のたとえ話のように、SIerが知らない間に世の中の価値観が変化して、品質の高い、保守性の高いシステムというのが最重視される世の中にいつの間にか変わっているということもありえないことではありません。そういう時代*2になった時には職人PGのスキルが業務システム開発の領域で本当に発揮できるようになると考えています。
(追記)
本記事のタイトルから私が言いたいことを誤解される方がいらっしゃるようですので、ちょっと補足させていただきます。「高い品質のプログラムを作らなくてはならないと考えている職人PGの考えは間違っていた?」という質問に対しては、今までの一般的なSIerの価値観に則って考えるとそういうことになるという事実があるということに気づいたということに過ぎません。ただし、本記事で絶対的普遍的に職人PGの考えは間違いと主張するつもりはまったくありませんし、私自身今後考え方を悔い改めますということでもありません。実際、良いプログラムを作りたいという私自身の欲求を捨てることなど到底難しいことですし、私としては会社の評価がどうであれ、自分の基本的な姿勢を転換することは考えていません。記事の内容を最後まで読んでいただければ分かると思いますが、むしろ、近い将来職人PGの考え方がビジネス的にも評価される時代が来るはずであるという期待があります。長期的に見てユーザーをだましてお金儲けするなどという考え方のビジネスが永続的に成功するとは私は決して信じたくありません。客観的に見てユーザーも開発者も幸せになれるようなビジネスこそ神の教えに沿った*3正しいあり方であると信じます。

*1:現実には多くの場合お金を出すお客様は神様で、そういったコントロールが難しいところがあるようです。それで結局デスマになると今度は下請け会社に責任を押し付けてありえない納期での作業を要求するなどPGの買い叩きを行う能力が重要となります。

*2:上記のコメントで「赤点」「最低ライン」という言葉がありますが、最近のプロジェクトはこの最低ラインがかなり高めに設定されているか、あるいはテストの問題が非常に難しくて最低ラインの60点を取ることすら難しいというところもあると思います。実際、どこの会社が作っても合格できるような単純なワークフローやマスターメンテのシステムなど、安価なツールで自動生成できる時代になってきていますから。(頭数要員だけでこなせる仕事が今後もずっと取れると考えているSIerの仮説は間違っている - 達人プログラマーを目指して)既に、そういう時代への変化がかなりの部分進行してきているという考えもありますね。

*3:日本語としてはちょっと大げさな表現ですが、シンプルで正しい設計のプログラムというのは客観的に見て美しいのであり、制約の範囲でそういう方向を追及するというのはエンジニアリングの自然な欲求です。今日はクリスマスイブですし、神様について言及するのもよいでしょう。