/note/tech

"The Essence of Software"が提唱する全く新しいソフトウェア設計の考え方

ソフトウェア設計というのは従来、誤解を恐れずに言えば全て、最終的に「どうプログラムを書くか」に集約されるものでした。建築の世界に例えるなら、最終的にどう建材を組み立てればよいか、という観点から設計するものでした。

ただ、これはあくまで開発者、プログラマの観点からであって、それらのオブジェクトがユーザーに露出することは特に意図されていませんでした。

一方、ユーザーインタフェースやユーザー体験、いわゆるUI/UXといったユーザーに露出する部分のデザインは別途行われていて、いわゆるソフトウェア設計とは分離しているものでした。

Daniel Jackson が提唱したのはそうではなく、プログラムその他の実現方式から一旦離れて、ユーザーがそのソフトウェアに触れて得られるメンタルモデルをまず設計せよ、ということなんだと思います。

ソフトウェアは物理的な実体がないがゆえに、キーボードやマウスやモニタを通じて仮想的な実体(たとえば、Windows や macOS にある「ファイル」や「フォルダ」など)を操作するわけですが、そういった仮想的な実体、つまり概念(concept)を組み上げて作られるメンタルモデルをまず設計し、ソフトウェアの中心に据えよう、と言っています。

建築の例えで言えば、まず居住者にとってどういうものがあれば、どういう気配りがなされていれば居心地の良さや優れた体験を得られるか、をまずデザインしよう、ということです。

つまりドメイン駆動設計ということかな?