ソフトウェア開発の流派

2008年4月12日

何度も、そしておそらく最後ではないでしょうが、私は実践の定義、その一部を「ベストプラクティス」としてラベル付けすること、そしておそらく「Cワード」(認定)についての議論に巻き込まれています。これはよくある議論であり、まだ始まったばかりですが、その展開をかなり予測できます。これは、より優れたソフトウェア開発者を見分け、既存の開発者が能力を向上させる方法を特定したいという、極めて合理的な願望に突き動かされています。

人々がこのような議論を始めると、たいてい問題に遭遇します。グループが激しい議論になり崩壊する、あるいは激しい議論にならず、他者から酷評される結果を生む、のどちらかです。これが起こる理由の中心、そして私がソフトウェア開発のための単一で広く認められた認定プログラムがすぐに登場するとは考えていない理由は、ソフトウェアを効果的に開発するための単一で広く合意された方法がないということです。

代わりに、私たちが目にするのは、それぞれ独自の定義とベストプラクティスの声明を持つ複数のソフトウェア開発の流派が存在する状況です。職業として、私たちは複数の流派が存在することを認識する必要があります。そして、それらのソフトウェア開発へのアプローチは大きく異なります。ある流派が模範的だと考えるものが、他の流派では無能だと考えられるほどに異なります。さらに、どの流派が正しいのかわかりません(部分的には、生産性を測定できないためです)、しかし各流派は、他の流派に対する許容度の程度は様々ですが、自分自身を正しいと考えています。

ここで「流派」という言葉を使用しているのは、以下の定義のスタイルによるものです。

4 a:共通の教義を保持するか、同じ教師に従う人々のグループ(哲学、神学、または医学など)<アリストテレス学派>; また:そのようなグループの教義または実践 b:共通の影響下にある芸術家のグループ c:類似した意見または行動を持つ人々のグループ; また:そのようなグループの共有された意見または行動<他の思想の流派>

-- Merriam-Webster

この概念に明示的に出会ったのは、コンテキスト駆動型ソフトウェアテストの流派(ジェームズ・バッハブレット・ペティチョードを参照)からです。彼らの見方は、なぜ知的なソフトウェア開発者がこれほど異なるアプローチをとるのかを説明するモデルなので、気に入っています。

コンテキスト駆動型の人々は、テストの世界におけるさまざまな流派を調べてきましたが、ソフトウェア開発のより広い世界における流派を分類しようとする優れた試みは知りません。私はある流派に属していると感じています。それは私にとって、90年代にOOPSLAを通して出会った人々に根ざしています。オブジェクト指向は、この流派の主要な実践であり、アジャイル手法も同様です。これはアジャイル流派だと合理的に主張できますが、アジャイル手法はこの流派の思考の中核的な構成要素ではありますが、全体像ではありません。この流派のリーダーには、ウォード・カニンガム、ラルフ・ジョンソン、ケント・ベック、ロバート・マーティンなどがいます。Thoughtworksは全体として、この流派に従う組織です(そのため、私はここで快適に過ごせます)。

しかし、この比較的まとまった流派という感覚にもかかわらず、未解決の問題も多く残っています。アジャイルの世界を一つの流派と考えるのが最善でしょうか、それとも複数でしょうか(スクラムとXPは別々の流派でしょうか、それとも同じ流派の一部でしょうか)?主要な流派は何ですか?思想の流派を具体的に何によって定義するのでしょうか?

これらの質問に対する答えはあまりありませんが、覚えておくべき重要な点は、ソフトウェアを効果的に開発する方法について、複数の思想の流派が存在するということです。私たちは自分の流派以外の流派のことをあまり考えないかもしれませんが、他の流派が存在することを認識しないのは愚かです。