純粋理性批判とソフトウェア工学
哲学は自然科学と違い、万人が同じ認識に至るという点での普遍性が乏しいと言われています。また、哲学は難解というだけで敬遠されています。忙しい現代人にとって実務で覚えるべきことが山のようにある状況では哲学までは手が回らないのでしょう。IT分野は変化が激しく実務的な側面が強いので、哲学は無関係な分野、直接的な効果は期待できないと思われているかもしれません。第一、哲学とIT技術のどこに接点があるか、学問的にも確立されているとは言い難いです。
今回、紹介するカントの純粋理性批判は、難解さではかなりなレベルだという一般の認識ですが、ここにはソフトウェア分析やアーキテクチャの原則が多く隠されています。もちろん、当のカント自身、将来のIT技術の到来を予見できていたとは思えませんが、人間が持つ普遍的な認識や理論の体系化という題材に左右されるIT技術もまたこの哲学の配下にあると言えるでしょう。
人間の理性で作られる世界、たとえば、数学やオブジェクト指向は、過去の経験がなくてもわかる普遍性があります。たとえば、小学生に1+1=2の原理を教えても、過去の経験がなくても理解できるのは、人間の持つ理性の性質です。一方、そうでない理解のために経験な必要な分野も多くあります。この2つを分けて考えることを前提とします。
カントは自然科学自体は否定していません。しかし、その有効範囲については独断の世界が存在すると説明しています。
ソフトウェア工学でいえば、パターンの存在は工学的に有効な普遍性を持つけれど、それが有効となるコンテキストに関しては独断な部分が排除できないとする点です。ソフトウェア工学が属人性を排除し、その有効性を獲得する最後の適用の部分は、科学的ではなくなるということです。この峻別を明確化している点は現在でもまた将来にわたっても生き続けるでしょう。
これに加えて、ソフトウェア工学に対する直接的なこの哲学のメリットは人間の認識における部分です。
人間の認識は、空間と時間における直観から、思考への流れを取ります。この思考には4つのカテゴリーが存在します。そのカテゴリーとは、量、質、関係、様相です。このうち、最初の3つがソフトウェアの基本的構造に対応します。UMLクラス構造、DOAの概念モデル、アーキテクチャなどです。最後の様相が役割や用途による基本構造に対するアプリケーション機能と言えるでしょう。たとえば、概念や知識には定量的な定義と定性的な定義が存在します。すべての概念や知識が、厳密な定義ができるのではなく、定性的な定義により、定義スコープが集合的に扱われる場合も存在します。これはドメイン工学におけるフィーチャ(特性)の定義にも現れます。むしろ、フィーチャの場合、現在では定性的定義が主流です。
「すべての存在は関係を持って認識される」、仏教の教えに従うまでもなく、我々の認識は相対的なものです。ですから、基本的構造に対して、関係のカテゴリーを持つことは普遍的です。関係には3つの種類が存在します。実体と属性、相互作用、因果です。クラスやエンティティなどの実体はインスタンスの所属関係を記述する関係の一種です。通常は、属性の発見が最初で、その所属関係の記述は後です。DOAでのエンティティタイプの定義、あるいは、オブジェクト指向分析での責務の配置はこの原理に従います。相互作用もUMLでのオブジェクト図やシーケンス図でおなじみです。が、因果という関係については、一階論理では表現できないのでUMLでは表現されません。UMLのような図形言語は隣接度の表現ができることが利点ですが、関係を命題とみたとき、なぜその関係が起こるのかといった命題の説明は、一階論理であるUMLモデルには加えるべきではありません。隣接関係のメリットがないこうした表現には、図形言語の利点はなくなります。ですので、DSL設計においてクラスベースの図形言語だけが有利ではないのです。
量、質、関係で作られた構造に対して、最後に作用するのが様相です。すべての事象や事実は100%の必然性があるか、あるいは、確率的なのかを表現するために、量、質、関係に対して様相を加えます。ソフトウェア工学での可変性、たとえば、アーキテクチャの拡張性、Dependency Injectionやアスペクトなどの複合化機構、ロールモデリングなどの分析設計手法などはこの思考のカテゴリーの様相にしたがった機構と見ることができます。
IT技術はビジネスに則っていることで、使いやすく保守しやすいよいアーキテクチャになります。そして、その根本には、人間の思考に従うという点が重要です。純粋理性批判は1781年に初版が発表されています。この哲学は300年以上の昔に発表されていたことに驚嘆させられます。基本的なアーキテクチャのミスの根本原因は300年以上も前に明確になっていたということです。