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

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

関数型の誤解 3

プログラミング言語に終始している

  • AIも、
  • (狭義の)ソフトウェア開発での、(束論的)束構造の因果ダイアグラムも、

プログラミング言語「以外」に目を向けていて、成果を得ていると思います。

しかし、関数型の誤解として、

事が有ると思います。

これにより、

  • 良い事(抽象とか高階とか純粋とか)を、
  • ローコスト、ノーコストで得られる事になる
  • 得られる理由は、その良いことが、プログラミング言語に終始している場合、何もしないになる為

と言う虫が良すぎる結果を産みます。

 

 

関数型の原罪?

大昔のLisp言語で、

  • ラムダ抽象

と言う言い方をした様ですが、

  • 抽象は、
  • 特定の具体的な詳細から離れて、物事の共通の性質や本質的な特徴を捉える
  • 思考のプロセス

Google Gemini 2.5 Flash に、2025/6/18 AM4に、「抽象とはどの様な概念でしょうか?」と質問)

と言う通り、

  • 何かに終始していては、何もしないになる

行いです。プログラミング言語に終始しつつ、「抽象」と言われても、
そもそもプログラミング言語とは、抽象化をし尽くした一種の到達点で有り、

さらにそれをしても、

  • 単なる、少数の変数の強調

以上の事にはならないのに、「抽象」と言う金字塔をローコスト、ノーコストで得られ、優位だ、としているのです。

これを誤解と言わずして、何と言うのでしょうか?

 

 

Haskell言語の大罪?

Haskell言語では、

がこれに当たります。

「高階」と言った際の対象に対し、足し算とか引き算とかせず、そのまま参照するだけ、だったり、

IO(Databaseクラスのシングルトンの様なものだと思います)に対し、コンパイル時に一切操作せず(当たり前ですが)、純粋だと言ってみたり

です。

これでは、良い事をローコスト、ノーコストで得られるのは当然で、これを誤解と言わずして、何と言うのでしょうか?

 

 

品質管理の要諦

品質管理は、(狭義の)ソフトウェア開発での、(束論的)束構造の因果ダイアグラムで言うと、

  • 承認された原因からたどれない、(プログラマーなどが勝手に妄想した)野良の原因(これが有ると、束構造で無くなる)が無い

事を管理する事では無いかと瞥見します。
(私は、専門家で無く、実務にも携わった事は有りません。)

これはプログラミング言語に終始していては、正邪の判定が出来ないはずです。

プログラミング言語に終始している、関数型は、

  • 何を言っても正しい、
  • 取りなしをする先生にとっては有り難い
  • しかし、実務では品質管理に値しない

やり方だと思います。

これを実務に持って来るのは、これを誤解と言わずして、何と言うのでしょうか?

 

 

結論

これからも「関数型の誤解」でプログラミングが嫌いになる人は存在し続けることでしょう。

関数型の誤解 2

日本語で言う「束」

受験数学で「束」についての番組がYouTubeであったので見たのですが、

どうも、

日本語で言う(数学の用語の)「束」とは3種類あるそうです。

束 (位相幾何学)(Wikipedia 日本語版)の冒頭の注意書きで、

  • この項目では、位相幾何学における“bundle”について説明しています。
    束論における“lattice”については「束 (束論)」を、
    射影幾何学における“pencil”については「束 (射影幾何学)」を
    ご覧ください。

とあります。このブログで、

  • (狭義の)ソフトウェア開発での、束構造の因果ダイアグラムは、

と言う時は、

  • 束論における“lattice”

    束 (束論) Wikipedia 日本語版より

    となります。

 

 

結論

この文書に結論は有りません。

 

関数型の誤解 1

どの様な話?

オブジェクト指向では、

  • 共通で使える訳でも無い、小さい(手続き1つとか)機能を関数にまとめた、
    プライベートメソッド ー(1)
  • 公開に値する責務を具現化しているが、いかんせん混ざり物になる
    パブリックメソッド ー(2)

を織り交ぜて(どちらが優位劣位とか無しに)、理想の問題記述に近づこうとしている面が有ると思います。

その様なオブジェクト指向が出回り、

賛成派、反対派入り混じって、10年、20年と実績を重ねて来たと思いますが、

その状況下で、

  • より素晴らしい関数型

が提案されたのは、誤解に基づくのでは無いか? と言うのがこの文書の趣旨です。

 

要するに、

  • 上記(1)でも無い、(2)でも無い、メソな問題記述方法が有り、
  • もしそれが有るならば、
  • それを関数としてまとめるだけで、
  • 理想の問題記述になる。

と言う誤解です。

学問は、ほんの小さな萌芽であっても、いくらでも取りなしをして、重要化をして、褒め称える対象にするのが得意だと思いますが、

その様なメソな問題記述は、10年、20年経っても、全く出ません。

これは、不存在(原理的に0)の強い傍証だと思いますが、それゆえ、

  • 関数型の誤解であり
  • オブジェクト指向の、プライベート・パブリックを織り交ぜた記述が出来得る最善だ

と言えると思います。

 

 

責務は何か?

『特定の側のみからの「ベストプラクティス」 7』で述べましたが、

(狭義の)ソフトウェア開発での、束構造の因果ダイアグラムは、

  1. 上限が「システムを作ろうとする発端」で、
  2. 上限方向のグラフの半分が「原因が、複数の独立・直交した部分原因に
    分かれる」過程で有り、
  3. グラフの真ん中の一番「太った」部分に、一番小さいプログラムの
    部分が置かれ、
    (追記:ここがマクロレベルとミクロレベルの直接的な接点で、メソレベルはあくまで不存在)
  4. その後、下限方向のグラフの半分にて、より大きいプログラムの部分へ集約されて行き、
  5. 下限が「システム完成」を表す

であり、

責務は、

  • オブジェクト指向で言う、パブリックメソッドであり、
  • 上定式化では、4. の「より大きなプログラムの部分への集約」

に当たると思います。

 

「まともな名前をつけさせてくれず、意味がわからない 5」では、筆が滑ってしまい、

  • 責務とは、メソレベルの情報となり、本質的に混ざり物

と書いてしまいましたが、

  • 責務とは、公開に値する情報だが、本質的に混ざり物

とすべきでした。

狭義のソフトウェア開発では、メソレベルの情報は不存在であると言う強い傍証(10年経っても、20年経っても、どんな先生の取りなしでも、完全に成果が0)が有る以上、

  • 責務(歴とした狭義のソフトウェア開発の一隅)メソレベルとする

のは、ひどい誤りとなります。

 

 

結論

これからも「関数型の誤解」でプログラミングが嫌いになる人は存在し続けることでしょう。

 

 

 

『ソフトウェア開発』という用語が曖昧 2

怒られにくい

会社の後輩が、

  • 自分は怒られてばかりなのに、あの人(筆者)は怒られにくい

とか言っていた事が有りました。

多分ですが、私は、

  • 色気を出さず、
  • 狭義のソフトウェア開発では、マクロレベルとミクロレベルに終始している

事が、相対的に怒られにくくなる原因だと思います。

そうする事で、

  • うまいかまずいかが決まり、
  • まずいを除く様にすれば怒られにくくなる

と思います。

しかし色気を出してしまうと、

  • 努力している様には見えるが、
  • 偽を前提としていて、
  • 何も成果が出ない

となり、それが延々と続けば、怒られてばかりになって当然です。

 

 

1970年代や1980年代

1970年代や1980年代では、ソフトウェア開発で「広義の」は存在しませんでした。他の分野から敷衍して、

  • プロジェクト管理は大切だ

と口では言っていても、開発トップ以下、誰も本気にしていませんでした。

 

 

その後

その後、メソ的な管理が必要だとなり、それは大成功を収めます。

しかし、多分ですが、その大成功は、

  • 後知恵だったから

だと思います。それまでに既に開発されて来たプロジェクトを、後付けで管理し始めた頃は、成果がすごかったと思います。

 

 

さらにその後

しかし、(メソレベルである)プロジェクト管理を第一に、新規でソフトウェア開発をしようとすると、途端におかしくなったと思います。

  • 何も出来ていないので、狭義のソフトウェア開発に、(メソレベルである)プロジェクト管理を持ち込む結果となって、
  • それは害悪なので、成員全員の多大な苦痛と共に、無惨に失敗する

事になります。

  • 後知恵でなかったから

だと思います。

 

 

アジャイルとか

アジャイルとかは、

  • 狭義のソフトウェア開発に、大学で習う様な、メソレベルの知識を持ち込み、
    圧倒的なより良さをもたらし得ると妄想する事は、害毒なんだ

言う割り切りが出来ていない

  • そういう取り組みにも一定の価値があるかも知れない、

と言う懸念を考慮した、中途半端な提言かも知れません。

  • プロジェクト管理の様なメソレベルの取り組みは
  • 後付けが好ましい

と言い切るべきです。

 

 

DevOpsとか

DevOpsとかは、初め、Dev側の人間からすると、

  • 費用を払わず、
  • 無限定に、
  • Ops側の人間がDev側の人間をこき使うだけ

に見えました。

予算が出来た後に、いきなりDevOpsとか言われるとそうなると思います。

ただ、そう言う部分をクリアにして、

  • 費用を払い、
  • 設計段階から、
  • Opsの事を配慮する様に調整する

のでしたら、害毒にはならないと思います。

でも、末端の人間がそれを提唱すると、後者の様なやり方が出来ず、100%前者の様なやり方になると思います。
これは今までと逆のパターンだと思います。

  • メソレベルが必要な分野(狭義のソフトウェア開発では無い)に、
  • それを持ち込まず、負荷分散が出来ずに不当な労働強化をもたらす、

と言うパターンです。

まさに、「メソ情報の不存在 2」で書いた、

  • 社会を"改革"しようとする学者は"改革"でこれを多用し、必要な分野からメソ情報不要を唱え、不要な分野にメソ情報を唱える事で、認知を得ようとし、あたかも常套手段で必殺技

の通りです。

 

 

結論

これからも「『ソフトウェア開発』という用語が曖昧」であるが為に、プログラミングが嫌いになる人は存在し続ける事でしょう。