Software Design & Real World

現実世界とソフトウェアデザイン


Posted on Sun, Aug 26, 2018
Tags software, design

現実世界とデザインパターンの行き来

最近、設計について考えることがあり、現実世界とソフトウェアデザインの関係は面白いなと思ったため、記事にしました。

現実 → ソフトウェア (Real2Virtual Method)

デザインパターンであげられるように、ソフトウェアの世界ではよく現実世界の設計や手法を持ち込むことがあります。

これはかなり強力で、現実世界ですでにうまく行っている、使われている設計をソフトウェアに持ち込めるので、

  1. 人間にとってわかりやすい
  2. 要件を満たせば、うまくいくことが多い

というメリットがあります。

例えば、カップラーメンをつくり方はだいたい同じ流れに従います。

  1. 湯をわかす
  2. 蓋をあける
  3. ソースなどをカップラーメンの外に出す
  4. 湯を注ぐ
  5. 数分待つ
  6. ソースを入れる
  7. かきまぜる

これは抽象的な手順であり、細かい数値を調整すれば、世に出回っている大体のカップラーメンをつくることができます。 つまり、「抽象的な手順を作成して、使うときは具体的な数値を入れる」というのは優れたデザイン(設計)ということです。

これを Cup Ramen Pattern と名付けたいところですが、残念ながらこれは 3.TemplateMethod パターン という有名なパターンとして存在しています。

この現実のものからソフトウェアの設計にいかす方法を Real2Virtual Method とでも定義します。

Real2Virtual Method は普段から意識しているとなかなか面白く、たとえば物理学という学問も Real2Virtual Method によってつくられ、数式化して作られることがほとんどでしょう。 (物理学、数学専攻出身のエンジニアで優秀な人が多いのは、抽象化能力に長けているのだと自分は理解しています)

ソフトウェア → 現実 (Virtual2Real Method)

さて、現実と仮想世界は、「単射であり、全射ではない関係* 」だと考えていますが、ソフトウェアの手法が現実世界で応用できることがあります。

例えば、僕は業務で業務フローの改善を行うことがありますが、その際に一度、plantuml を使って、業務フローをプログラムで記述して、その後、並列すべき処理や処理のまとまりを考えることで、大幅に手順全体の速度を改善することができます。

アルゴリズムやデザインパターンを理解していると現実問題を扱う際に、非常に強力だったりします。

*現実と仮想世界が「単射であり、全射ではない関係」

これは哲学的な問題で、「仮想世界も人間が考えるという物理現象だと考えれば現実世界に含まれるのではないか」という意見もあるかと思いますが、ここでは人間が認知できない事象も仮想世界に含まれるとスタンスで記述しています。

全射 - Wikipedia

結論:数学、物理学っておもしろい

ここまでの話から若干飛躍があるかもしれませんが、現実世界のすべての現象は数式化することができ、さらに現実に存在しないものも定義することによって議論ができるため、数学、物理学は非常に面白いです。

そして、こうした眠くなるようなアイデアから現実のプログラムや設計へ落とし込めるエンジニアが優秀なエンジニアの条件な気がしています。

まさに art ですね。

おまけ

オーストリア生まれの友人が小さい頃は、まず集合論から学んだということを聞いて、それは凄いなぁと思いました。

というのも、足し算や引き算は数学の具体的な演算の一つであり、それらは 集合論圏論 の上で成り立っています。

その基本から学ぶことができれば、数学的な素養を伸ばす上で役立つと思います。 ぜひ基礎教育の段階で「抽象的な思考法」のコツを学べるようにしていけると良いですね。