嫌われプログラミングの代弁者

「何で頭ごなしに嫌う人間が居るのか」を色々考える

社会実装を伴う、数学的抽象化の禁忌 1

どの様な話?

かなりアウトプットの間が空きましたが、言うべき事が無くなった為でした。

しかし、1つ思いつきました。

それは、

  • 数学的抽象化を使う際、
  • それが社会実装を伴う場合、
  • 絶対的にしてはいけない事

です。それは、

  • 抽象化して、何かを隠す(「本質的でない細部を削ぎ落す」)場合、
  • ダメな、出来ない事隠すのは禁忌

では無いかという事です。

  • 良い、上手く行く、を隠すべきです。

 

 

例1(制御の反転)

制御の反転(Wikipedia 日本語版)では、

  • 上位モジュールはただ「抽象(インターフェース)」に依存する

だけとなると思います。

制御の反転とは、インターフェース以外の依存を隠すだけ(「本質的でない細部を削ぎ落す」)の抽象化だと思いますが、隠しただけです。

隠しただけで、実際には残っている「本質的でない細部」とは、

  • 抽象(インターフェース)以外の「データの作りの制約」など

で有り、消えたのでは無く、隠しただけなので、それらが原因となり、

  • プログラムの変更を妨げ、
  • 自動テストを不安定にする

ダメな、出来ない事に該当します。

ダメな、出来ない事を抽象で隠すのは禁忌で、

数学的には正しくても、社会実装後に、そのダメな、出来ない事が原因で、実用に耐えなくなります。

 

 

例2(圏論)

圏論などで「関数の合成」や、双方向の変換などを議論しますが、

プログラミング言語の関数は、交通ルールと同じで、

  • 特定の危険な場所で、
  • 万人に分かりやすい(即、安全につながる)様にする為に、
  • 出来る事を減らしている(スコープにより、見える、見えないを分けている)
    ↑「拡張に対して開く」という美徳に全力で抗っている

ので、

  • プログラムの変更を妨げ、
  • 自動テストを不安定にする

ダメな、出来ない事に該当します。

しかし圏論などの議論では、そのダメな、出来ない事は

  • 隠す(「本質的でない細部を削ぎ落す」)

ので、

数学的には正しくても、社会実装後に、そのダメな、出来ない事が原因で、実用に耐えなくなります。

 

 

例3(プログラム自体を仕様とする)

プログラム自体を仕様とするのは、抽象化(何かを隠し、本質的でない細部を削ぎ落す)の典型的な分野だと思いますが、

  • プログラムの各手続き(関数を含む、プログラムの部分)が何の原因で、どの様な絡みで結果としてそうなったか

を示す因果ダイアグラムは、

  • プログラムの変更を妨げ、
  • 自動テストを不安定にする

ダメな、出来ない事に該当します。
因果ダイアグラムが必要な程、複雑なプログラム(すべての実用的なプログラム)は、その因果ダイアグラムにより、

  • プログラムの変更を妨げ、
  • 自動テストを不安定にする

性質を獲得します。

それを

  • 隠す(「本質的でない細部を削ぎ落す」)

のは、

数学的には正しくても、社会実装後に、そのダメな、出来ない事が原因で、実用に耐えなくなります。

 

 

結論

これからも「社会実装を伴う、数学的抽象化の禁忌」でプログラミングが嫌いになる人は存在し続けることでしょう。