📑

ソフトウェアのデザイン、進化、パターン、進化のパターン

に公開

ソフトウェアにおけるデザイン(設計)、デザインの進化(変化)、デザインのパターン、デザインの進化のパターンについての覚書です。

テーマは、どのようなデザインが進化を容易にするのか? そこに原理はあるのか? です。

ソフトウェアにおけるデザインを何だと捉えるのか(定義するのか)、デザインの進化を何だと捉えるのか(定義するのか)は後に考えます。

一つ、ソフトウェアにおけるデザインを考えるうえで、区別しておくと便利なのは、「プロセス」と「プロセスの結果」の区別です。デザインというとプロセスの意味合いで議論されることが多いように感じますが、本覚書では、結果としてのデザインに力点をおきます。

結果としてのデザインとは、本覚書では、意思決定の結果の集合からなる構造だという捉え方(モデル)で議論をすすめる予定です。意思決定とは、選択肢からの選択だと捉えます。とはいえこの捉え方も十分に検証されているとは言えません。

意思決定の観点からデザインを捉えるなら、プロセスとしてのデザインの捉え方の一つは、意思決定のプロセスであるとみなしたいと思います。

さて、このテーマの周りには他にも様々な要素が関わると思います。
・ツール(プログラミング言語や設計手法など)
・デザインに関わる人(プログラマー)
・ソフトウェアが実現する(満たそうとする)要件、要求、性質、機能など
・などなど

関わり方の一つの見方は、作ろうとしているデザインが何に依存しているのか、という見方かもしれません。
・そのデザインは、そのツールを使ってデザインされたものです。
・そのデザインは、そのデザイナーによってデザインされたものです。
・そのデザインは、それを満たしたくてデザインされたものです。

これらの要素の特徴の一つは、不変ではなく変わるものと考えられます。
・ツールの変化や進化(新たな言語、言語のバージョンアップなど)
・プログラマーの知識の変化、蓄積
・満たしたいものの変化

変わることは、そのデザインに影響を与えると考えられます。
・そのデザインは、その時のツールを使ってデザインされたものです。今のツールでデザインするなら違うデザインかもしれません。
・そのデザインは、その時のデザイナーによってデザインされたものです。今の知識でデザインするなら違うデザインかもしれません。
・そのデザインは、その時のそれを満たしたくてデザインされたものです。今の満たしたいものでデザインするなら違うデザインかもしれません。

ソフトウェアのデザインは、上記のように直接的な依存関係から影響を受けるのではなく、間接的に影響を受けるものだとも捉えられます。
・選択しなかったツールの存在とその変化
・競合のソフトウェアの存在とその変化
・などなど

最後に、ソフトウェアは、ビジネス目的で作られることが多いと思われるため、次のような制約のもとで作られます。これらは意思決定に影響を与えると思われます。
・コスト
・納期
・などなど

改めて、本覚書で考えていくトピックは以下となります。
・デザイン(設計)とはなにか? このトピックは、文献が様々あります。
・デザインの進化(変化)とはなにか? あまり分析はされていない印象です。
・デザインのパターンとはなにか? 従来の取り組みの出発点はGoFからを発端とするデザインパターン(ソフトウェアパターン)です。
・デザインの進化にパターンはみられるか? あまり分析はされていない印象です。

Discussion