2014年5月5日月曜日

名前をつけるということ

中世ヨーロッパの思想史では、「実念論」と「唯名論」の対立があったとされる。Wikipediaの説明をそのまま借りると、実念論(実在論)は「言葉に対応するものがそれ自体として実在しているという立場」、唯名論は「実在するのは具体的な個物」という立場である。
一般的な「本質」が存在するかという問題はイスラーム教や禅など「東洋」思想においても議論の対象となってきたようである。(井筒俊彦『意識と本質』
これらの思想で議論で議論の対象となってきたのは、主に「花」とか「犬」といった固体としては物質的な形をとるものである。「科学」や「宗教」、「社会」といった概念に対しては近代の学者がさまざまな定義を試みているが、純粋に分析のための概念と、多少なりとも規範的な概念は扱いが異なると思う。例えば、「社会」はそれ自体ではプラス、マイナスの価値を持って使われないが、「科学」は「非=科学」(疑似科学)より優れたものとして扱われる。

筆者がいるソフトウェア業界でも「科学」のように、純粋に記述的ではなく、規範的な意味を伴って概念が使われる。例えば、「ウォーターフォール」は今ではほぼ記述的に使われるが、「アジャイル開発」や「テスト駆動開発」などはある程度規範的な概念だと思う。(「偽アジャイル」という批判は聞くが、「偽ウォーターフォール」という批判はほとんど聞かない。)

少し前に"TDD is dead. Long live testing."日本語訳という主張が出て筆者の周りでも話題になっていた。自分ではあまり実践できていないし、著者はRuby on Railsなどのコンテキストを背景に主張を述べているためなじみのないところもあるが、TDDを記述的な概念、つまりやるべきことの組み合わせとして考えた場合、状況が違えば(変われば)のやり方のほうがよい場合もあるというのは当たり前で、特に衝撃的とは思えない。

なお、著者の主張はユニットテストだけに頼らずシステムテストなど上位のテストをより重視すべきというものだが、一般論としては状況次第であり、コンテキストとなっているRoRの開発においてどれほど当てはまるのかはわからない。極論をすれば、プロジェクトごとに何をすべきか異なる、ということになる。それでは、なぜ議論が行われるのか?

規範的な概念についての議論の方法


TDDのような概念に対する一つの受け取り方は前述のような記述的なものとみなすことである。コンテキストが特定されていない手法であるから、コンテキストが変わればそのままは適用されないのが当然ということになる。ただ、純粋に記述的な概念はマックス・ウェーバーの「理念型」のように外部の研究者が分析のために使うことはあるものの、内部にいる人にとってはあまり意味をもたない。

別のとらえ方は規範的なもので、「状況に適応する」ということも含め、ソフトウェア開発のあるべき姿を表すものである。この考えに立てば、概念自体を放棄することはありえないが、「成功すること」だけが意味内容であればほとんど無意味になる。

ソフトウェア関係で通常使われる方法論あるいはプラクティスに関する概念は記述的かつ規範的なものである。つまり、一定の条件下ですべきことが述べられており、それに従えば何らかの目的を達成できるものとされる。とはいえ、「条件」や「すべきこと」が常に明確なわけではない。どのような法律でも解釈の予知があるのと同様である。

こうした概念が「従ったがうまくいかない」または「よりよい方法がある」などと批判されるとき、反応としては以下のものが考えられる。

  1. 擁護:考え方は間違っていない。あなたの理解が間違っている。ある宗教の教えに従いながら幸福になれない人に対し、教えを正しく信じ、理解し、実践していないあなたが悪い、と非難するのと構造は似ている。
  2. 拡張:明示されてはいなかったが、もとの概念の中に暗に含まれていたものだ。条件が違う場合にはより一般化して適用すればよい。
  3. 限定:そのケースは概念の適用対象としてふさわしくない。
  4. 否定:もとの概念は間違っている。新しい、より良いものに置き換えるべきだ。
これらははっきり区別できるわけではない。また、同じ概念の中に含めるか、もとの概念を限定して別の概念を独立させるかはさまざまな事情による。

名前をつけるということ


ソフトウェア開発やさらに広くビジネスで使われる方法論の場合、一つの方法を適用すればすべてが成功するということはほとんどない。方法論は特定のコンテキストのもとでの複数のプラクティスの集まりであり、一部だけ適用して他は別のやり方で置き換えるなど、状況に応じて適用の仕方を調整することが求められる。ある意味ではパッケージ化され、名前のついた方法論は関係者を思考停止に導くものであり、害をなすこともあるが、それでも名前をつけることにはメリットもあるのだと思う。

一つはコミュニケーション上の必要である。名前がついていれば少ない言葉で概要を理解することができる。もっとも誤解の可能性もないわけではないが。
また、一つの理想型として参照されることにより、規律を保つというメリットもあると思う。何か違ったやり方をとろうとしても、理想型があればなぜ異なるやり方をするのか理由をはっきりさせることになるので、安易な方向に流れることを防ぐ効果がある。

意味のある議論?


ある方法論やプラクティスが特定のコンテキストのもとで成り立つ(有効である)、またコンテキストを言葉だけで表現することはできないと考える場合(基本的に妥当な仮定だと思う) 、意味のある議論としては、
  1. 個別具体的なケースで特定の方法論やプラクティスを適用すべきか
  2. 特定の条件が方法論やプラクティスの適用にどのような影響を与えるか(メタレベルの議論)
特定の現場にいない人は(ヒアリングを行うなどして)意味のあるアドバイスを与えることはできるとしても、コンテキストをすべて知っているわけではないので判断には限界がある、ということになると思う。
方法論の適用条件に関して、また定式化に関してどのようなことが議論の対象になりうるかについてはまた別の機会に投稿したい。