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

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

懐疑論を持ち出す必要がある 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:同上

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

どの様な話?

懐疑論懐疑主義 Wikipedia 日本語版)からたどっていくと、

と言う考え方が有り、ポストモダンは後者であるのに対し、前者では「基礎を公理としてそれ自体は疑わない」態度の数学が代表例として有ると思います。

しかし、ソフトウェアシステムでは、

  • 公理が常にゆらぎ続けている

状態に有ると思います。常に仕様に対して懐疑的になる必要が出ると思います。
だからかも知れませんが、公理型プログラミングは全く鳴かず飛ばずでした。

 

具体的には?

具体的には、

  • ソフトウェアシステムには「自動で動作する」という要求が有り、
  • プログラム1つ1つをいじると、
  • 自動で動作するという要求を満たす為に
  • 因果ダイアグラムの上限側が逐一変化して、
  • ゆらいだ公理状態になる

と言う塩梅です。

 

技術的負債とは

技術的負債とは、この考え方で行くと、

  • ゆらいだ公理に追従出来ていない

状態の事で、しかしながら、追従しようとしても、それにより更にゆらぎ、

  • やはり、ゆらいだ公理に追従出来ていない

状態のままになるのだと思います。

「自動で動作する」を諦めれば、問題は解決すると思いますが、更にたちの悪い「ソフトウェアロボット*1」に矛盾を押し付けただけとなると思います。

 

結論

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

 

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

プログラミング言語の関数は

プログラミング言語の関数は、その表現力の制限から、

  • 1階だけ

なのでは無いでしょうか?
プログラム言語で、「顔と視線は宙吊りに」なんて事を表現出来るとは、到底思えないからです。

ただ、プログラミングの世界では、身近な範囲に高階(2階)の論理が潜んでいるので、「高階関数」が無いと言って嘆く必要も無いと思います。

それは、

  • プログラムの全ての呼び方による動作が、所与の名前と合致するか?
  • プログラムの全ての呼び方による動作が、所与の仕様と合致するか?

などです。(追加開始 2024/5/17 PM8)「動作」に対して(追加終了)「全ての」が付いている述語なので、(追加開始 2024/5/17 PM8)少なくとも(追加終了)2階論理だと思います。

たとえ、
いくら関数に静的な型をつけた所で、プログラミング言語の範囲では(追加開始 2024/5/17 PM7)プログラミング言語の関数で量化可能な)「数字」よりも拡張された対象に対して、(追加終了)全ての」を表現出来ないので、1階に留まるのに対し、
名指しや要求と、プログラミングの動作との対比の議論や、テストは自然に2階になると思います。

(追加開始 2024/5/17 PM7)プログラミング言語の中には単なる

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

の事を「高階関数」と呼んでいるそうですが、どの様な対象を量化出来ているのでしょうか? 関数を変数に収めた所で「全ての」は表現出来ないと思います。
この様な誇大な命名は単なる優良誤認にとどまらず、初学者に対する拭がたい毒だと思います。(追加終了)

高階先に立たずです。

 

特に名前は

特に名前はプログラミング言語では漢字50文字程度を超える事はあまり無く、

  • 短く、余りに簡潔なので、
  • 私的言語になり易く
  • 「合致するか」の議論については困難さを伴う

と思います。
私は、その様な困難に立ち向かうよりは、星座程度の、意味の薄い、他と区別出来さえすれば良いで十分なのでは無いかと、(前から)思っています。

やさしい名前を付けた人が必ずしも愛されやすいとは限らないのは、過去よりの定説だと思います。名前の意味を成就させるのは、非常な困難を伴うと思います。

 

結論

解像度の比較的落ちる、高階の議論をしつつ、事後の情報も踏まえた上で、システム全体で1階に出来る所を探して、そこは自動テストをすれば良く、
そうでなく、あくまで「高階関数」を求めるのであれば、そのせいでプログラミングが嫌いになる人は存在し続けることでしょう。