MDAがだめだった理由を画像で表現する。そしてDSL。

さて、MDAってのは過去にあった「すべてをモデルで表現したい、いやできる、それも実装に落とせる」というあれだ。僕自身は、MDA、つまり仕様を厳密に表現できる言語を用いてモデリングでする、というのは、少なくとも「仕様の曖昧性をなくす」ためのやり方としては、意味があったと思うし、おそらく学術的に様々な研究を生んだであろう。だが、あいまいでなければよいわけではないのは明らかである。つまり、仕様の入力者である「人」が確認したり分析したりしやすいものでないと意味がない。そもそもそのことを考えないんだったら、初めからソースコードでいいはずだ。脱線して、CやJavaといった汎用的なソースコードを仕様とすることの何が問題かというと人の理解を阻む「複雑さ」を結局「同じセマンティクスを持った言語を用いた定義を構造化することで解決」という形でしか扱えないということにつきる。いくら構造的に表現し抽象的な形でロジックを表現しようと試みてもミクロでとらえれば変数の定義と代入そしてその手続きを制御構造であらわすという形でしか表現できない。これは、Webサーバのロジックであろうが、ゲームであろうが、業務アプリだろうが、全く一緒である。汎用性を追求するあまり致命的にセマンティックがうすいのだ。翻って、UMLだって一緒。UMLつまり代表的な静的関係のモデリングツールであるクラス図は、「UMLのClass」のメタモデルが非常に簡素であることからもわかるようにUMLで静的構造を表そうとすると、クラスの持つ性質や特徴を人が理解できる単純さで表現する方法がない。それを補うための安直な決まりの代表的なものがステレオタイプだと思っている。ステレオタイプを書けばそのクラスの持つ意味を人様にアフォードしてくると考えるのが大きな間違えなのだ。
ということを直感的に表すメタファがないかと探していたのだが、最近、あれだ!と思いだしたので貼っておく。