Topics

・関数型プログラミングとオブジェクト指向のパラダイムとしての対立 国内の【自称】関数型コミュニティと海外の論調の違い

ガラパゴス・ネットスラング=「関数型ポエム」という呪詛、先入観的読書と、フェアなレビューの登場

Qiitaの騒動から派生して、東北大学の住井 英二郎@esumii氏、らくだの卯之助@camloeba氏その他が、犯罪者集団に合流して2ちゃんねるでの誹謗中傷チームの「8賢者」「ウィザード組」とかアホなことをやってる件について

JavaScriptではES6+とReact-JSXからES5へのトランスパイルが標準に / ATOMエディタで最速環境構築 厳選パッケージ 3 + 3 2015年夏バージョン

2016年のnode、ES6、React、Babel、Atomエディタ界隈の方向性

Dockerじゃないsystemd-nspawn+machinectlが非常に良い

99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その1】「計算機科学のほんとうの基礎」を理解していない。IQ145のJKと同じ事を語るMITの権威とSICPという聖典の権威を借りてマインドコントロールを解いてみよう

99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その2】関数型プログラミングのイミュータブルな世界観とイミュータブルな実世界を完全に統合

10年先を行く斬新な関数型(FRP)データベースについて説明する 99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その3】

[React (.js Facebook)解説 関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間 サポート記事【静的HTML編】React 解説【動的HTML-FRP編】

量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説01量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説02

『関数型プログラミングに目覚めた!』のレビュー(Day-1)について

LISPデータ構造の問題点の指摘と抜本的解法としての新プログラミング言語の策定/純粋関数型言語「SPINOZA」

著書『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』 [Day1]たち読み記事 無料公開中

『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』を大変多くの方々にお買い求めいただき、感謝します。本書の全目次を公開し、質問を受け付けます。

2015年7月6日月曜日

住井 英二郎@esumiiさんとか、らくだの卯之助@camloebaさんに聞きたいのだけど、そもそも貴方たちはOCamlでデスクトップアプリ書けるんですか? の続き

住井 英二郎@esumiiさんとか、らくだの卯之助@camloebaさんに聞きたいのだけど、そもそも貴方たちはOCamlでデスクトップアプリ書けるんですか? の続きです。

複数新規プロジェクト・ビジネスの立ち上げでかまっている暇と気持ちがなかったので、1ヶ月以上前の記事になりますかね。

どうやら、このブログの記事
『関数型プログラミングに目覚めた!』のレビュー(Day-1)についてで、その欺瞞性を大いに批判したQiita記事
『関数型プログラミングに目覚めた!』のレビュー(Day-1)
で、エアリプライみたいなことが行われているようです。

『関数型プログラミングに目覚めた!』のレビュー(Day-1)というのは、

@nonstarter
http://qiita.com/nonstarter
という素人かつ大学関係者を自称しながら、
言論人として文責をまったく負わずに済む、
素性のしれない匿名のQiita捨てアカウントによる、
書捨て記事であり、
「批判のための批判記事」です。

「レビュー」などと称していますが、対象となる書籍の良い部分は一切書いておらず、とにかく徹頭徹尾、揚げ足取り、歪曲捏造しているので、「批判のための批判記事」であることが露骨にあらわれてしまっていますが、本人はそのことに露ほども自覚がないのでしょう。

これから、記事をわけて、住井 英二郎@esumiiさんとか、らくだの卯之助@camloebaさんに聞きたいのだけど、そもそも貴方たちはOCamlでデスクトップアプリ書けるんですか?への「回答」の精査と、この
『関数型プログラミングに目覚めた!』のレビュー(Day-1)
シリーズによる本書への批判のための批判を精査していきます。

関数型プログラミングと私の著書の正確性についてきちんと議論(論争)します。
と投げかけましたが、この「批判のための批判記事」である、『関数型プログラミングに目覚めた!』のレビュー(Day-1)の記事シリーズとコメント欄で書きたいこと書き捨てているということでよろしいのでしょうかね?

じゃあ、基本、その辺、こちらで丁寧になぞっていきます。

プログラミングの世界的潮流と机上の空論としての関数型プログラミング① オブジェクト指向と関数型は対立していますか?「いいえ」と強弁する主張

各論に入る前に、まずこれまでの復習を兼ねてプログラミングの世界的潮流の俯瞰です。

そもそも、この一連の一部実名そして上記のような主に匿名書捨てを駆使した妙な連中ですが、私がオブジェクト指向と関数型プログラミングが対立するパラダイムであると書き始めた頃から騒ぎ立て始めました。

拙書にも書いていますし、これまでこのブログ記事でも何度もしつこいほど説明していますが、
オブジェクト指向と関数型プログラミングが対立するパラダイムである、というのは事実であり、正しい見解です。

ここは一番重要なところで看過するわけにはいきません。

この見解に反発したかった連中が短期的に騒ぎ立て、当方へ当てつけた日本国内限定の珍妙な言説、たとえば、

らくだの卯之助 @camloeba 2015-01-24 02:36:54

関数型言語とオブジェクト指向の研究は両者とも同じ数学的基盤に支えられて行われています。片方で主に知られている研究者がもう片方の学会で発表するのはごく普通の事です。こちらは「λマン」がオブジェクト指向の国際学会に登壇している様子です。
https://www.flickr.com/photos/drjason/280369547/in/set-72157594342576801

であるとか、

住井 英二郎@esumiiによる
「関数型言語」に関するFAQ形式の一般的説明#オブジェクト指向と関数型は対立していますか?

オブジェクト指向も関数型言語も、基礎理論はほとんど同じ分野の人たちが研究しています(紹介記事)。オブジェクトと第一級関数やデータ抽象の考え方(第2章・第3章)など、強い類似も少なくありません。Schemeの第一人者による「オブジェクト指向プログラミングに関する欧州会議」(ECOOP)における基調講演スライド(特に22ページ目)や、Haskellの主要設計者の一人による「オブジェクト指向プログラミング・システム・言語・アプリケーションに関する国際会議」(OOPSLA)における基調講演スライド(およびGoogle TechTalksにおける同内容の講演動画)でも議論されているので参照してみてください。

という主張は、「オブジェクト指向」は「理論」ではない(こんな基礎的なことはちょっと気の利いた技術者であれば誰でも承知している)ので、根本的に間違いです。
「数学的」には、すべてのプログラミングは存在として原理的に「数学的」であるので、その数学的基盤に共通性があるなんて、当たり前のことで、「考え方」「パラダイム」の差異を否定する際に有効な反論としては全く成立していません。

また、

メジャーなオブジェクト指向言語が命令型言語ベースのため、オブジェクト指向=命令型という誤解もよくありますが、データとそれに対する操作(メソッド)のまとまり(オブジェクト)を基本にシステムを構築するオブジェクト指向と、「副作用を用いない」関数型プログラミングとは、直交・独立な概念です。積極的に副作用を用いる命令型オブジェクト指向も、副作用を用いない純粋関数型オブジェクト指向もあります(Pierce著「型システム入門」第18章と第32章など)。要するに、オブジェクトの状態を破壊的に更新するか(命令型)、新しい状態を持つオブジェクトを作り直して返すか(関数型)というだけの違いです(後者はいわゆるイミュータブルなオブジェクトとして広まりつつあるようです)。

というのも、「机上の空論」ではない、巷のオブジェクト指向プログラミングとは、実態として実質のところ命令型プログラミングであることは周知のことであり、そもそも「オブジェクト指向」という言葉を作ったアラン・ケイが

「オブジェクト指向プログラミングの概念は完全に間違って理解されているのだ。オブジェクト指向プログラミングの正しい概念とはオブジェクトとクラスに関してではなく、すべてがメッセージングということなのだ。」

と発言していますが、
「メッセージング」とは、名が体をあらわしているとおり動的な命令であり命令型のパラダイムに位置します。

こういう状況で、いくら、「オブジェクト指向=命令型という誤解もよくある」と、誤解でないことを誤解であると強弁したり、そのために「概念として直交」であると一部のみを切り取って概念化するのは「机上の空論」です。

オブジェクト指向と関数型は対立していますか?
の答えがYESである、というのは、それこそ国際的潮流の一般的説明としてほうぼうに存在するのは紹介しました。
関数型プログラミングとオブジェクト指向のパラダイムとしての対立 国内の【自称】関数型コミュニティと海外の論調の違い

こういう世界的な見解、オブジェクト指向は関数型プログラミングと対立している、という事実、そして自分の見解や説明の間違いを自覚した彼らは、今後どんどんとトーンダウンしていくしかないと思います。
実際、以下のようなトーンダウンした記述が同記事に追記されました。

もちろん、どんな言語(というかどんな技術や概念)でもあるように、関数型言語のファンでオブジェクト指向が嫌いという人も一定数はいますし:-)それは思想・信条の自由です。上の記述はあくまで理論の話です。紹介記事の冒頭に書いたとおり、「単純な関数型言語に、複雑なオブジェクト指向はいらない」という考え方もあります(私個人の好みもそれに近く、OCamlのOはほとんど使っていません。参考リンク:「オブジェクトは OCaml の鬼子」)。

「上の記述はあくまで理論の話です。」ということですが、繰り返しになりますが、オブジェクト指向は「理論」ではありません。

「理論」ではないものを「あくまで理論の話」と片付けるのは、要するに「空論」、「机上の空論」であり実態を反映していない強弁である、と自ら認めているようなものです。

「直交・独立な概念」であるのならば、関数型プログラミングと組み合わせても問題ない、はずですが、実態として、「机上の空論」ではない実態としてのオブジェクト指向は、関数型プログラミングとは、命令型と関数型で当然のごとく水と油で競合、対立するので、当然の結果として「複雑」になって「いらない」ということになるわけです。

「机上の空論」としてではなく、あくまで実態として、「直交・独立な概念」であるのならば、「オブジェクトは OCaml の鬼子」と、「鬼子=競合」するわけがありませんよね?

1.私の「オブジェクト指向と関数型は対立している」という見解、
2.あるいは、関数型プログラミングとオブジェクト指向のパラダイムとしての対立 国内の【自称】関数型コミュニティと海外の論調の違いで示した、国際的に容易に追認可能な論調

は一致しており、これが当然、国際的にも通用する「一般的説明」となるわけですが、それと異なる、

オブジェクト指向と関数型は対立していますか?
「いいえ」

と強弁していた本人、
あるいはその辺りを中心とする連中の主張が間違いであるのは、その本人が、「理論」でないものを延々と「理論」扱いにして、実態を反映していない主張を繰り返していること、実質「混ぜるな危険」みたいなことを言い出して、自分は混ぜない使わない、最後には、「オブジェクトは OCaml の鬼子」と引用しだしたことをもって、この辺はどちらの主張が最終的に正しかったのか?決着を見たと思います。

あとは、どんどんトーンダウンするしかないのでしょうが、最終的には「そんなことを言ったっけ?」とはならないのがネットの議論であり、記録に残るわけです。

間違っていたのであるならば、明確に間違いであると認めるのが、言論人、学者、研究者の知的誠実な作法であって、「あくまで理論の話」などと論理整合性のない修正追記を重ねたところで、言説はまともになんてなりません。
 
次、

プログラミングの世界的潮流と机上の空論としての関数型プログラミング②「素人としては深入りを避けたいと思いますが、そうだとすればそもそもJavaScript選んじゃったのが関数プログラミングへの無理解を象徴的に示すものなのだということになるような気がします。」(苦笑)

0 コメント:

コメントを投稿

Popular Posts

Blog Archive