ソフトウェア開発の学派
この話はもう何度目だろう。今回で最後にはなるまい。 私は今、プラクティスを定義し、そのうちのいくつかを「ベスト」だとラベリングし、Cで始まる単語(認定[Certification])がどうとかいったような会話に陥っているのだ。 これはありがちな議論なので、たった今始めたばかりにもかかわらず、私はこの議論の結末が見えている。 この議論は、最高のソフトウェア開発者は誰なのか、および世間の開発者たちが能力をどのぐらい向上できるのか、を明らかにしたいという完全に妥当な野望から来るものだ。
この手の会話を始めてしまうと、最後には困ったことになるのが常だ。 議論が過熱しすぎてグループにひびが入るか、でなければ議論は盛り上がらず、他人から馬鹿にされてしまうような結論しか出ないか、どちらかだ。 こういうことになる理由の核心は、そして、なぜ単一で広く認知された認定プログラムが現れる気配すらないのかは、ソフトウェアを効果的に開発する単一で広く同意された方法などないからなのである。
その代わりに私たちが見ているものは、ソフトウェア開発には数多くの学派があり、それぞれには独自の定義とよいプラクティスの宣言があるという状況である。 専門職としては、複数の学派が存在すること、そしてソフトウェア開発に対するそれぞれのアプローチが大きく異なっていることを認識しなければならない。 その違いは、ある学派が模範とするものが別の学派では不適格とみなされるまでに至っている。 さらに、我々にはどちらが正しいかなんて分からないのだ(理由の一部は、生産性は計測不能だからだ)。どちらの学派も自分たちが正しいと考えていて、他学派の許容度はそれぞれ異なっているけれども。
私はここで「学派」を次のような定義で使っている。
4 a: 共通の教義を持っているか、同じ教師 (哲学、神学、医学など) に従う人々のグループ <アリストテレス学派>。また : そのようなグループの教義または実践 b: 共通の影響下にあるアーティストのグループ c: 同様の意見または行動を持つ人々のグループ。また : そのようなグループの共有された意見または行動 <他の学派> --Merriam-Webster他の学派>アリストテレス学派>
この概念は明らかにソフトウェアテストのコンテキスト駆動学派(James Bach と Brett Pettichordを見よ)から来ている。 私が彼らのものの見方を好きなのは、知的なソフトウェア開発者たちがそんなにも異なったアプローチを取る理由を説明するモデルだからだ。
コンテキスト駆動の人たちはテスト界の別学派たちをいくつか判断しているけれども、ソフトウェア開発の広大な世界における学派たちを分類するよい試みを私は知らない。 私もある学派に所属しているという気持ちがあるが、それは私にとって、90年代のOOPSLAで出会った人たちから来ているものだ。 オブジェクト指向がこの学派の鍵となるプラクティスであり、アジャイルな手法も同様だ。 この学派はアジャイル学派なのだと論じることだってできるだろうが、私が思うに、アジャイルな手法はこの学派の考え方におけるコア・コンポーネントではあるけれども、それが全体像というわけではない。 この学派の指導者にはWard Cunningham、Ralph Johnson、Kent Beck、そしてRobert Martinといった人たちが含まれる。 ThoughtWorks は、総じて言えば、この学派を信奉する組織である(だから私は居心地がよい)。
しかし、割と首尾一貫している学派だという感覚はあるのだけれど、未解決問題がいくつも残っている。 アジャイル界を1学派と考えるのと複数学派だと考えるのはどちらがよいのか(ScrumとXPは別学派なのか、同じ学派に含まれるのか)? 世の中で主要な学派はどれだ?学派の考え方を正確に定義するものは何か?
これらの疑問に対する答えはあまり持っていないけれども、覚えておくべきキーポイントは、ソフトウェアを効果的に開発するための考え方には複数の学派があるということだ。 私たちは、他ならぬ私たちの学派よりも他の学派を重視するほどのアホではないだろうが、他の学派が存在していることを忘れない程度には愚かであると言える。