dotkuwaの日記: 関数型プログラミングの独自性 8
1.副作用(それが有ると、実行するたびに結果が変わってしまう
のでテストが困難になる)の無い部分を抜き出し、
関数としましょう!
↑ 手続き型プログラミングでも当たり前の様にされていた事です。
www
↑ ブロックという考えがなかった頃、gotoレスでプログラムを
組むためには、必ず関数を書かなければならない
(ループの中身は1行で無ければならない)ので、
関数として抜き出す事を事実上、強制としていた言語も有った。
↑ このパターン(規範?)のみを「関数型プログラミング」と
すれば良かったのかも知れませんが、実際の歴史では、なぜか
それ以上の独自性を求める事になった。
↑ ただし、副作用の"有る部分のみ"を抜き出そうとしたのが、
オブジェクトの始まりで
(openやread,writeやclose事にメソッドが必要で、
それを1つにまとめるクラスも必要だし、状態変数として
のインスタンス変数も必要)、
そちらの方向性に対しては、関数型は無力。
2.副作用を無くしましょう!
↑ 確かに手続き型プログラミングではされていませんでした。
しかし、出来る見込みが有りません。
↑ 数学的な選択公理の元では、どんな値も0時間で入手が可能で、
実行するたびに結果が変わらない様に値を得ることも、
ノーコストですが、CS的な選択公理ではそうは行かない。
↑ というか、そもそもCSの第一の存在意義は、コンピュータ上で
選択公理を実現する事で、さらに言うなら、そのコストを推し量る
事ではないか!!
↑ コンピュータ上でも頑張れば副作用を減らせるが、それで、
1万円で出来ていた事が1兆円になってしまっては、CS的には
敗北で有り、トレードオフの問題ではないか?
3.モダンとされる有用なプログラミングのアイディアのいくつかを
関数型プログラミングならではの物としましょう!
↑ アイディアを独占することは出来ませんでした。手続き型の
プログラミングでも、それらモダンなアイディアは取り入れられて
います。
↑ 同じ機能が備わっているなら、関数型かどうかなどどうでも
良く、逆に「より良いレッテルが貼られている」にも関わらず
「何の違いも無い」→「詐欺だ」という、逆風にしかならない。
4.モダンを超えたアイディアを関数型プログラミングならではの
物としましょう!
↑ プログラミング言語として高階関数を実現しましょう!
(自然言語による曖昧な哲学的な表現で、かろうじて高階に
関する表現が出来ていますが、動くプログラムでは何を
やっても1階のままです。
高階的表現が必要なら、そちらを指向するのが王道です。)
↑ プログラミング言語として副作用を封じ込め、見えなく
しましょう!
(かえってテストしにくくなります。)
↑ 特定の言語を「関数型」と認定し、モダンで有ると喧伝しま
しょう!
(プログラミング言語の発展の過程で「関数型」→「手続き型」
の様に多様化していったのに、先祖返りをすれば済むという
訳でもないでしょう。)
↑ 特定の言語で、nullを廃し、より良くしましょう。
(プログラミング言語の発展の過程で「null無し」→「null有り」
の様に多様化していったのに、先祖返りをすれば済むという
訳でもないでしょう。)
↑ 陽関数を極度に持ち上げ、陰関数は無視しましょう!
(かえってテストがしにくくなります。)
↑ 内部の状態は極力捨てましょう。そうすれば副作用は隠れます。
(かえってテストがしにくくなりますし、運用方からすると
大迷惑です。)
5.訳の分からない、一見「宗教的」とも言えるドグマを信じて
いれば、「何をするか分からない」と周りに思わせる事が出来、
報酬はもらった上で、プログラミングの実務はしなくて良くなる!
↑ 5年、10年程度はそうかも知れませんが、それを超えて成果が
0なら、流石に行き場を失います。
↑ 別の専門性を磨いておく事をお勧めします。
6.特定の人間を攻撃しましょう。そうやってそれらの人間を排除
すれば、「全ての良い事」は関数型プログラミングの物です!
↑ 完全に排除すべきでした。そうで無いなら未来は有りません。
方向性が違う (スコア:0)
もともと関数型言語/プログラミングってあなたの大好きなコンピュータサイエンスを研究するためのものでしょ。
その成果を実用的な言語に取り込むのは当たり前だし実行環境が理想的なものを前提とするのも当たり前。
物理科学の教育で(ただし摩擦や空気抵抗は考えないものとする)という但し書きがないから答えは出せないと回答するタイプですか?
それとも現実世界はパラメータが多すぎてシミュレーションは役に立たないとするタイプ?
Re:方向性が違う (スコア:1)
20年前位、どこ出身かは定かでは無いですが、関数型がモダンで、VBとかはまったく話にならない
との主張を引っさげて、やってきて、自分がこれからリーダーだという所で、実際やっている手をはたいて
だめだと言いまくった人間が来たのです。
上司に言いましたが、「ビジネスはファクトが大事で、おまえはぺいぺいで、あちらは学術的に裏付けが有る
(実際は嘘)ので、どうにもならない。ファクトがそろうまで我慢するより無い。」
と言われ、ファクトがそろうまで待ちました。
結局それらの関数型の人間は逃げました。
しかし逃げただけで、なにもペイバックは受けていません。
もちろん、関数型というのが、教育分野だったり、研究分野だったりでその領域に合致するものなのかも
知れないとは思いますが、合わない分野にしゃしゃりでてきた人間の、少なくとも名誉は減らしたいと
思うのは、自然だと思います。
教育的、学術的 (スコア:1)
教育的、学術的というのは、
・既存の教科や分野になぞらえて、プログラミングを考える
訳ですが、
アプリケーションの分野では、
・そのアプリの分野になぞらえて、プログラミングを考える
ので、
合う合わないが変わって当然なので、ある分野でよい結果を
出したなぞらえが、他では、エセ科学に劣るとなっても
おかしくないです。
方向の行く末 (スコア:1)
結局、関数型、宣言型というのは、
・技術的には追加が無く
・フレームワークを全世界固定し、「分かりやすさ」「入って行きやすさ」を求めた
が、
実行環境の「理想的な」という「何か」を提示出来なかった
すなわち、
・フレームワークの全世界固定は出来なかった、摩擦や空気抵抗のような、
全世界共通のパラメータがなかった(大杉とは誰も言っていない)
というだけで、
費用を取ってより良さを、自分たちは提供出来ると、コミットしておきながら
逃げるだけなのは、卑怯ではないでしょうか?
Re:方向の行く末 (スコア:1)
全世界には、有限だが非常に大量の、同じでなく似てもいない
パラメータがあり、
システムごとに、その中から数個ないし数十個選ぶ。
もう、関数型言っていた人からは、名誉を減ずる以外ないのは
これが理由。
ぜひ、お答えください (スコア:1)
根本的な話なのですが、お答えいただきたいのですが、
関数型プログラミングというのは、
・コンピュータサイエンスの分野で学術的に議論されたもの
なのでしょうか? それとも、
・ある学術的組織の1アプリとして有用性があったもの
なのでしょうか?
もし、後者なら、
・ある分野で一人前になったプログラマーが、「自分は
どこでもやっていける」とイキって、他分野に押しかけて
偉そうにするだけ
と変わらず、学術的とはほど遠い、それを「学術的」と
いうのは、ぶっちゃけ詐欺なのではないでしょうか?
プログラマーで、その様なことが出来るのなら、プログラマー
は全員億り人ですが、そうはならないのが事実です。
モナドとか、本当にコンピュータサイエンスの分野での
議論がされたものなのでしょうか? それとも、
ある学術的組織の1アプリとして有用性があっただけに
過ぎないものではないのでしょうか?
ぜひ、お答えください。
勝利宣言 (スコア:1)
お答えが無いようなので、勝利宣言とさせていただきます。
自分の成功体験(数学での)の再現性を推し量れない人間は
老害だ、という文言を見た事が有ります。(カッコ内自分)
あなた方は、生きながらにその境地に達したのだと思います。
もちろん学術的には全くの失敗も成果となるのかも知れません
が、それをいきなり、それとは異なる評価体系の営利企業に
乗り込み、まるで学用患者の様に、普通にやっていた
人間を扱うのは全く別の話です。
法律には時効が有り、どうにもならないと思いますが、
歴史には有りません。
せめてもの対抗策とするのは、蟷螂にも劣るのかも知れません
が、それだけは続けたいと思います。
勝利宣言の背景 (スコア:1)
自分は前に、
・関数型プログラミングの(素人に対する)説明の仕方
について、
・誤解を与えるものだ
としました。
また、
>実用的なプログラムで、似たプログラムを書く場合、コピペは
>必須です。バグ対応がより困難になるのは、単に、
>そう言う要求が有ったからです。
>似た、ただし共通部分を切り出す程似ていない様な
>プログラムを要求されてしまったから、畢竟、より困難になった
>だけで、
ともしました。
これは、
・素人は無欲で、「本質的な複雑性」を望んでいるが、
専門家と言われている、プログラマーや設計者などは、
「偶有的な複雑性」に逃げがち。
・関数型プログラミングを支持し、既存のものをバカにしていた
のは、それが「本質的な複雑性」をなんとかしてくれるのでは
という期待によるもの。
・しかし、関数型プログラミングも、それまでのものと同様に
「偶有的な複雑性」しか対応しない。たとえ~~::::<<??>>!!記法(一例)が
出来たとしても「本質的な複雑性」の解決とは無関係
(すべての強い型付き言語は無関係)
・この点の説明が一貫して無い
という意味だと整理できます。
素人がなぜ熱狂したのかを理解すべきです。