Model Thinkingについて

知り合いから Coursera.org が面白いと言われ、試しに Model Thinking というコースを受講してみました。 当初はソフトウェアのモデルの話かと思ったのですが、Game Theory 関連の内容でした。 この分野は余り知識が無かったので最後までつきあってみました(全部オンラインでクイズとか試験とかありました)。

  1. Coursera
  2. Model Thinking

利害関係のある個人や社会の振る舞いを、モデリング言語=数学、モデル=数式、で表現し分析する世界です。 コースは入門者向けだったので入り口を勉強出来ただけでが、私にとっては充分な内容でした。 入り口といってもいろいろなモデルを知る事ができました。 これらのモデルとUMLで記述するモデルの間に何らかのリンクが作れそうな気がするのですが、余り意味がないかもしれません。 今度はいつになるのか分かりませんが、きっとまたあると思いますので、興味のある方はエントリーされてはどうでしょうか。

本ブログの一番下にリンク類があり、その中に Software Engineering Radio をあげています。 最近 IEEE に移管されたのですが、これを主催していた方が現在サイエンスやエンジニアリング全般についての Podcast に力を入れています。

  1. omega tau

この Podcast のエピソード106というのが Game Theory で、専門家へのインタビューになっています。 比較的素人の(といってもソフトウェア工学については深い知識を持つ)人が分野違いの Game Theory についていろいろ質問するのを聴くのは上のコースの復習にもなり(質問の意図や気持ちが良く分かるため)なかなか楽しいものです。 ご関心のある方は是非どうぞ。

Model Thinkingについて

Eclipse Modeling Meet-up in Tokyo

ちょっとしたお知らせをさせて貰います。

12月7日(金曜日)夜に東京で

  1. Eclipse Modeling 勉強会

を開催予定です。 国内にこのあたりの情報交換をする場が無いなと思っていましたので、試しに一度開催してみようということです。 話題としては、例えばEMF, GMF, Xtext, SCA, BPMN, UML などに関連した話や、これらを利用したエディタやアプリ開発の経験談などで、Eclipse と Modeling がキーワードです。

ご関心をお持ちの方は上のページをご覧ください。

Eclipse Modeling Meet-up in Tokyo

モデリングとプログラミングの間について

モデリングは(私的には)対象や物事を抽象化することで「木を見て森を見ず」状態を避けることが大きな効能であると思っています。ソフトウェアの世界でモデリングというと UML が代表的な言語でありその UML で描く事の出来る各種ダイアグラムがモデルということになります(正確には UML モデル)。難しいのは、正しく正確なモデルというものが評価しがたいということではないでしょうか。簡単なモデルならいざ知らず、クラス数(これもモデル作成者によって変わると思いますが)が増えてゆくと(異なる流儀などにより何通りも書き方が出てくるため)正しいモデルというものが見えなくなってきます。

それでも、ある程度まともなモデルに基づいてソフトウェア開発につなげようとする試みは多くあります。MD* (Model Driven Architecture/Development/Engineering/… ) と呼ばれるもので、標準(UML)ベースのものや DSL ベースのものがあります。

モデルをプログラムに近づける MD* の活動は、ツールベンダによる商用製品やオープンソース系のものがあり、オープンソースでは eclipse に多くのプロジェクトがあります。これは eclipse が最初から EMF をその要素としていたためです。当初 EMF がオープンソースとして出されたことに驚きました。EMF は OMG の MOF のサブセット(emof)の実装ですので、これを利用すればモデリング言語を実装出来る訳です。その結果、現在では UML や BPMN などについてのグラフィカルエディタがプロジェクトとして活動しています(使えます)し、GMF や Xtext なども EMF を利用しています。

モデルはあるレベル・視点での表現であり、別の視点での表現や詳細化が必要になることがほとんどです。このためにモデルから別のモデルを生成するモデル変換というものがあります。OMG 標準では QVT と呼ばれていますが、アカデミックな世界には ATL というものもあります。どちらも eclipse 環境用に実装され利用出来るようになっています。

モデルをプログラムに近づけるには、最終的にモデルをテキスト(プログラム)に変換してゆくステップが必要です。これを100%実現するのは困難なため、主流はテンプレート方式をとったものになります。これについても OMG 標準などがあり、それを eclipse 環境で実装するプロジェクトが成果を出しています。

プログラミングを主体に考える立場を取ると、ボイラープレート的なコードは出来るだけ排除し、より本質だけを記述したり、何度も同じようなコード書かずに済ませたい、ということから Internal DSL やフレームワークなどが使われていると思います(例えば RoR のような)。

実は「モデリング」や「プログラミング」という一般的な言葉を並べても現実の世界では余り意味が無く、具体的な対象の世界がまずあって、その世界に向いたモデリングやプログラミングを選ぶ事がとても大切だと思います。例えば状態遷移が支配するような世界からビジネス分析が必要な世界までを同じ言葉で扱うのはやはり無理があるでしょう。

今後このポストの続編として、比較的使えそうに思えるプロジェクトや製品をいくつか紹介出来ればと思っています。

モデリングとプログラミングの間について