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

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

藁の混じった議論 5

自然に、

  • プログラム全体に、本質的に位相空間を導入する事が出来なかった。

場合、自然に、

  • インターフェース全体や型全体にも、本質的に位相空間を導入する事が出来ない。

となると思います。プログラムの性質は、インターフェースや、型にも引き継がれるからです。

 

SOLID原則にも影響?

もしそうなら、SOLID原則にもかなりの影響が出ると思います。

以下、SOLID(Wikipedia 日本語版)より。

1.単一責任の原則 (single-responsibility principle)

「一つだけの責務」と言うのは、複数の責務から一つだけの責務への順序関係が無いと、議論が厳しいのでは無いか?

 

2.開放閉鎖の原則(open/closed principle)

これを実現するのにインターフェース固定とするのが良いと思うが、実際には、インターフェースも変えないとならなくなる場合が普通であり、その原因も、複雑さの順序関係が無いため、「最小のインターフェース」を定義出来ないからでは無いか?

 

3.リスコフの置換原則(Liskov substitution principle)

継承のフル活用が前提で、共変、反変と同様に活躍場所が限られるのでは無いか?

 

4.インターフェース分離の原則 (Interface segregation principle)

2.と同様に「特化したインターフェース」を定義出来ないからでは無いか?

 

5.依存性逆転の原則(dependency inversion principle)

絶対的に正しいと思うが、位相空間を導入出来そうに無い今日、発展性に乏しく、「うんうん、そうだね! その通りだね!」以上の対応にならないのでは無いか?

 

と言えると思います。逆に一段視座を上げて(解像度が落ちるのを看過した上で)、結果たるプログラムの原因(その原因、その原因、、、、)で見れば、

  • 個別議論になる(何かある度に変更が必要になる)代わりに、
  • 分類に関して見通しが良くなる

のでは無いかと、推測します。

 

結論

これからも「藁の混じった議論」を周りの人にされる事でプログラミングが嫌いになる人は存在し続けることでしょう。 

 

藁の混じった議論 4

関数型プログラミングはなぜ失速したのか

素人の付け焼き刃での考えとして、

  • プログラム全体に、本質的に位相空間を導入する事が出来なかった。
  • 位相空間とは、順序関係(人間と哺乳類、人間と犬、の大小関係の様な)の有る物の事で、
  • ことUIに関しては部品の継承とか出来たが、一般のプログラム全体では出来なかった。
  • イベントドリブンとか言っても、一般には「doイベント」以外無いと言うのが紛れもない実情。
    完全に実のある議論が存在しない。
  • 鳴物入りの共変、反変も、位相空間で無いなら、余り意味が無い。
  • さらに、「自動で実行する」の制約より、共変、反変は「事実上、入力でしか使えない、事実上、出力でしか使えない」事になり、さらに意味が薄くなった。

とかだと思います。

と言う事では無いでしょうか?

 

何で!

何で、関手とか射とかの方向に、そのまま先に進めば、

  • 関手は射の合成を保つものだったが、ここで考える「自然変換」は関手の構造を保つものだ*1

の様な地点に行き着く事も可能で、(当てが外れた)位相空間を回避した道具立てになる様に出来ると思うのですが。
これは「因果ダイアグラム」に通ずる様な気もしますが。。。

 

結論

これからも「藁の混じった議論」を周りの人にされる事でプログラミングが嫌いになる人は存在し続けることでしょう。  

*1: 圏論の道案内 〜矢印でえがく数学の世界〜【電子書籍】[ 西郷甲矢人 ]

懐疑論を持ち出す必要がある 2

考えてみると

考えてみると、

  • 公理が時間の経過と共に
  • 変化してはいけない

と言っているのを見た事が有りません。

 

プログラミングは「自動で実行する」を成立させる為に、頻繁に、

  • 隠れた原因

が現れます。

隠れた原因が現れる度に、

その因果ダイアグラム*1 上限方向が、プログラムに対応する公理に当たり、

それらは、時間の経過(プログラムの出来上がり具合)に伴い、変化する事が常套です。

そういう「公理」も在っていいはずです。

 

分析哲学と大陸哲学

哲学に関するある本*2 を読んでいると、

が有り、後者を支持している論者が言うには、

  • 言葉を正確に使おうと思っている人って、いまひとつ哲学者ではない感じがするんですよ。
  • 言葉が正確に使えたら、それはそれでいいですよ。でも、なかなかそうはいかない。

と言えるのだそうです。

思いますに、1階論理の解像度で、仕様書などの高階論理も記述しようとした人間と、分析哲学の人間は同根かも知れません。

 

ソフトウェアシステムの手順書

ソフトウェアシステムの手順書を欲しがる割に(taker!!)、自分では作ろうとしない人間は、

  • 哲学の素養を基にした、解像度の落とし方

を知らない人間では無いでしょうか?

逆に、その様な素養が有れば、手順書的な見方を自ら出来、そこまでクレクレ人間にならないはずです。

例えるなら、

  • 0000から9999の数字で、3つ、塩梅良く選ぶと上手く行っていたのに
  • それは"非科学的"(=解像度が1階論理より落ちる)だと評して
  • 必ず0000を選ぶ様にし、格段に改悪になる

様な愚行をする様なものです。秩序立った解像度の落とし方はシステム開発(特に上流)に必要で、日本人に不足しているのは、(とっくに充足されているであろう)CS分野なんかでは無く、哲学なのかも知れません。

 

結論

ソフトウェアシステムでは「懐疑論を持ち出す必要がある」為、プログラミングが嫌いになる人は存在し続けることでしょう。

 

*1:束構造の因果ダイアグラムの真ん中辺を、その原因に対する結果である、1つ1つのプログラムとすると、

*2:25年後の東浩紀 『存在論的、郵便的』から『訂正可能性の哲学』へ [電子書籍版]

「高階関数」のおかしさ 3

人間を誉める場合は

当代の英傑に対し、王侯貴族に匹敵する地位で誉める事は有ると思います。

でもたとえば、大阪の普通の人に対して「貴方は今太閤ですね」とか誉めても、バカにするな的な事を関西弁で言われるだけだと思います。

名前に対して重きを置いていればいるほど、バカにされたと思ってもおかしく有りません。

 

高階関数”は

私見ですが、3階関数が実現出来れば、

  • ユニバーサルで(プログラムの微調節など不要な)
  • 時間が経つに連れての仕様変更にも当たり前の様に追従出来る
  • 自動テストが構成出来る

と思います。

自動テストを切望する人間にしてみれば、高階関数は王侯貴族どころか、聖杯といった聖なる対象となるべきはずのものです。

それに対し、

  • 引数に関数をとれる関数

を”高階関数”と言うのは、いかにも不可思議です。
”高階”とは、単なる2階でも無く、3階でも無い、無限の階梯を含意した名前です。

もちろん、同期・非同期の記述の分野ではその”高階関数”は、唯一無二の効力を示すと思います。それは事実だと思います。

でも、なんで”高階関数”なのでしょうか?

 

反証可能性

カール・ポパーは、

  • ある理論が科学的であると言えるのは、その理論を反証するような決定的実験(事実)があらかじめ特定できる場合であり、

と述べているそうで*1 、それを「反証可能性」と言うそうですが、

  • 引数に関数を取れる関数を”高階関数”と言う

事に対し、反証可能性極非常に乏しいのでは無いかと思えてなりません。

反証したくても、なんでそういう関数と高階関数が結びつくのか、皆目見当が付きません。

 

「価値操作」

また同じ本*2で、科学には、

  • 科学システムの外部にある社会的な価値一般

を高める効果が有るとされており、

  • 関数型プログラミングが、実績の有無に関わらず高評価を得て
  • それに関わるタイミングを逸した人間の評価を下げるまでになり
  • 単なるプログラミングの短縮形にしか過ぎないmap関数などが、ことさら重要で有るとされたり

するのは、関数型プログラミングやmap関数などが、

からだと思います。

しかし、それは科学でしょうか? 引数に関数を取れる関数と、高階関数に何か関連は有るのでしょうか?

私は、無いと思います。ポパーの科学かどうかの判別法からすると、科学では無いと思います。
まだ、32bit CPU2つで64bit級だと言う方が(反証可能性が有る分)科学的だと思います。

 

結論

これからも「高階関数」のおかしさにより幻惑されたせいでプログラミングが嫌いになる人は存在し続けることでしょう。 

 

*1:自由の論法(自由学芸叢書) ポパー・ミーゼス・ハイエク (創文社オンデマンド叢書) [電子書籍版] 橋本努

*2:同上