「データベースとカン拡張と思い出」にて:
僕は、純粋主義が心情的に嫌いなんですけど、[...snip...]
純粋関数主義も純粋オブジェクト主義もずっと嫌い。そして、純粋リレーション主義も嫌いです。理屈じゃなく嫌い。
と、「純粋主義者は嫌いだ」と叫んでいるのですが、ちょっと語弊があると思うので補足します。
僕が言っている純粋主義とは、何らかの純粋さに価値を置き、その価値観からみて不純なものを排除しようとする態度のことです。「純粋さ」を一般的に定義するのは無理ですが、先に挙げた具体例 -- 純粋関数主義、純粋オブジェクト主義、純粋リレーション主義などがあります。
純粋主義者は、純粋さの基準を持っています。それを成文化すれば経典になります。絶対的な基準=教義を作ろうとしたり、既にある教義を遵守して暮らそう、という態度が僕は気に入らないのです。
とか言いながら、僕も何らかの純粋主義に陥っていて、同族嫌悪の感情なのかも知れません。そうだとしても、僕が“より嫌い”な同族がいるのは確かです -- それを仮に、閉塞的(あるいは閉鎖的)純粋主義者と呼びます。一方、シンパシーを感じる純粋主義者を拡張的(あるいは開放的)純粋主義者と呼ぶことにします。
閉塞的純粋主義者は、純粋さの基準=教義をより洗練させて、クリアな境界線を引こうとします。そして、境界線の外=不純なものを悪とみなします。一方で拡張的純粋主義者は、不純なものを包み込んで、純粋・不純の境界線を消し去ろうとします。
純粋関数主義を例にするのが分かりやすいでしょう。純粋関数こそがよきものだと思っている純粋関数主義者は、副作用はダメだ/状態はダメだ/未定義はダメだ/大域変数はダメだ/例外はダメだ、とか主張するでしょう。現在では、このテの純粋さへの拘りはあまり見かけなくなりましたが、昔は実際に言われていました。
「ダメだ」と言われてもねぇー。「ダメなんですか、じゃーやめます」とはなりません。多くの人が長年続けている不純な事は、単なる悪癖ではなくて、不純さが必要な理由があるのです(たまに、単なる悪癖もあるけど)。
副作用/状態/未定義(部分性)/大域変数/例外(大域脱出)などを包み込んで、純粋関数のメリットをあまり失わない手法といえば … そう、モナドです。僕がモナド、つうかモナド的発想が好きなのは、不純なものを目のかたきにせずに、懐柔して手なずけている点です。みんなが蛇蝎のごとく嫌っているgoto制御やフローチャートだって、手なずける方法があるはずです。
自分は、ほんと閉塞的純粋主義者とは相性悪いわ、と改めて感じたのは:
「どこがダメなのか」記事を書いた後で、クリス・デイト(C.J. Date)の本『データベース実践講義 ―エンジニアのためのリレーショナル理論』も眺めてみたんですけど、どうも純粋リレーション主義者とでも呼ぶべき人々がいるようです。
クリス・デイトの、純粋リレーション主義の観点からのSQL標準規格やER図への批判を読んだからです。もちろん、同意できる批判も多いのですが、単に「純粋じゃないからダメ」と言っている部分もあり、正当な根拠とは思えない。なぜなら、徳目的・教条的な純粋さに価値があるとは思ってないから。
関数的不純さをモナドで取り込むように、データベース理論においても、非リレーショナルな不純さを手なずけるメカニズムが必要なんだろうと思います。