ソフトウェアプロジェクトにかかわる多数の決断は、生産性が第一に考慮される。プロジェクトが成功し、その市場が成長し、ドメイン知識とクライアントニーズの両方で複雑さが増している場合、特にその傾向が強くなる。適用範囲が予期せぬ転換になる可能性は高く、プロダクトにはカスタマイゼーションが益々必要になる。Lispyが強調しているように、新しいニーズにすばやく適合させ、「クライアントを満足させて料金を支払うようにさせる」ために、多数のチームが「ひどいハックを実装する」。ソフトウェアの質が巻き添えになるとすれば、これはLispyの言う「成功の痛み」に当たる。
Bob Martin氏はこうした巻き添え(source)を説明し、クイック&ダーティなアプローチは長期的にみれば持続不可能であり、その理由は、そうしたアプローチが必然的にプロジェクトの速度を鈍らせるから、と論じている。
最近クライアント先に行ってきました。このクライアントは、急速に大成長を遂げて立ち上げに成功した新会社です。同社のソフトウェアは急速に拡大しましたが、それはかなり乱暴なプログラムを介してでした。現在は混乱に陥っており、それが原因でかなりの減速状態になっています。欠陥がたくさんあります。変更によって、多くの意図しない結果がもたらされたのです。生産性は低くなりました。
[…]クイック&ダーティは矛盾語法です。ダーティは常に「遅い」を意味します。
ビジネスソフトウェアはとにかく乱雑と仮定することにより、乱暴なアプローチが正当化されることが多々あるが、Bob Martinは強く異を唱える。ビジネスルールには「複雑、任意、その場しのぎ」という傾向があっても、コードはそれとは逆に、可能な限りクリーンかつクリアでなければならないとBobは主張する。
ビジネスルールの混乱が別の混乱にくるまれていたら、ルールの混乱を処理できません! 混乱したルールを把握する唯一の方法は、可能な限りクリーンで明確なコードの中で、ルールを表現することです。
Martin氏の記事にコメントしたRoland Kaufmann氏によれば、生産性第一主義を釈明するのはなんと、「長期的利益よりも、どんな短期の普通預金でも好ましく見せてしまう狂気の内部収益率」である。これは真実である。なぜなら、十分に長い期間継続しているプロジェクトであれば、ゼロからのデザインと再実装を周期的に行わなければならないという仮定の下で、多数のマネージャーが活動しているからである。同様のことがあるコメントで強調されているが、そのコメントの筆者は、情報科学科の卒業生がしばしばソフトウェアを書けないと非難される(source)理由の1つが、生産性志向の合理性であると主張する。
David Chisnell氏が強調しているように、「情報科学とソフトウェア・エンジニアリングが全く別の学問」であることに疑いはない。ソフトウェア・エンジニアリングでは「ツールとプロセス両方の観点からソフトウェア開発のプロセスを教える」のに対し、情報科学科のコースでは「この二つのテーマに簡単に触れる」だけであり、「職業訓練」は意図していない。卒業生は多数の言語に触れるが、言語について、また関連するツールについて深く知識を得ることはない。そのため、情報科学科を卒業した者は、生産性の高いコードを書くことができず、厳しい締め切りを守れない可能性が高い。あるブロガーが「情報科学科卒業生の無能は明らか」と強調するように、「大規模デザインや大規模アーキテクチャの頭脳をほとんど持ち合わせないか、全く持たない」者が急速に進展させたからといって、「大規模デザインにおけるお粗末な決断が原因で、システム全体が徐々に保守不能になっていっても、個人的な責任を問うことはできない」であろう。なぜなら「以前に成功した者はいずれ失敗する可能性が高いと経営陣は考える」からである。
しかしながらLispyによると、非生産的な情報科学科卒業生には、プロジェクトの規模と複雑性が増すにつれて、プロジェクト成功に向けて開発していく上で極めて重要な技能がある。「ソフトウェアに多数の機能を追加する、あるいは、各取引で高額な注文制の仕事をする」ことは「スケールするには摩擦が大きすぎ」、「無訓練の『ストリート・プログラマー』」が運に恵まれ、努力しても、プロジェクトが一定地点を越えて成長するよう促せるだけであり、その先ではツールを書く上で役立つツールが必要になる」(source)とLispyは論ずる。たとえばBob Warfield氏は、「低コストで多少の工作を行い、顧客の望みを実現することを可能にする」手段としてドメイン特化言語を推奨する。Lispyは、こうしたツールを提供する上で情報科学の専門知識が必要と考えるが、その理由は、ツール提供には異なる理解レベルでの操作が必要になるからである。アインシュタインがよくこう言っていた。「我々が直面する重要な問題は、その問題が発生したときと同レベルの思考では解決できない」と。現実世界の開発で直面する問題を解決するには、現実世界における生産性志向の要件下では明らかにコードを書くことができない、情報科学科の卒業生が必要なのかもしれない。
原文はこちらです:http://www.infoq.com/news/2008/01/productivity-implications