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年3月14日土曜日

関数型プログラミングとQiita界隈の騒動について

(追記)2015/4
関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間
を無事出版しました。

(関連記事)

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


自分の考えを公表するときには、それなりの責任が伴います。
ときには、考えが違う相手との摩擦を産み、論争に発展することもあるでしょう。
私のQiitaのアカウント kenokabe は、1ヶ月ほど前にQiita運営よりサスペンドされました。
その事について当事者として論評したいと思います。

なぜ今書くのか?

まず、
なぜ1ヶ月も本件について意見しなかったのか?
なぜ今になって意見するのか?というと、
1.他にやるべき知的にも社会的にも経済的にも、あらゆる観点で生産的な作業が、それ以前より山積みとなっており、このような文章を書くことに意識を向けること、時間を割くことが惜しかったから。Qiitaのもろもろの件に費やす時間をこれ以上必要としないのも、良い頃合いであるとも思ったし、もろもろの生産的な作業に静かに集中できる環境を維持したかったから。要するにこんなことにかまけている暇は全くなかった、ということです。
2.そもそも根本的にはくだらない事象(後述)なので、時間を割いて論評に値するのかどうか?作業や頃合の問題は別としても、一般的にも連中をこれ以上、相手にする価値があるのかどうか疑義があったから。
3.しかし、アンフェアな事象でもあるので、そこは「アンフェアである」と明示する責任は事情をもっともよく知る当事者としてはあるのだろう、手が空いたら今後のためにも記録に残す意義はあるだろうとも考えていた。
4.「悪い」ことは「悪い」と指摘してあげないと、「悪い」と理解さえできずに、よりによって当方が「100%悪い」、またよりによって「狂人だ」と信じて微塵も疑わず、ネットにそう書き込む異常な連中の存在を確認するので、「是正行為」は当事者の立場からやっておく必要がある。
5.一般論として、往々にして、世の歪んだ事象については面倒を覚悟してでも声を上げる必要がある。
6.実際に、本件について、本来不要なご心配をいただくメールをそれなりの多数いただいており、当方を支持し、応援いただき、同時に心配もいただいている方々のためにも説明しておきたい。彼らに申し訳ないな、とずっと気がかりだった。
7.今たまたま少し諸々の作業が一段落して、そろそろ書こうかなという気持ちにもなれた。というか、このまま何の反論もなく終わるはずもないだろう?当事者としてアンフェアな事象は説明し、記録に残し、彼らの言論の責任、あるいはやり方の是非は後世の判断に委ねるべきであるという当たり前の気持ちもふつふつと湧いてきたから。

当事者としての事象の俯瞰

別に私は、このエントリにおいて、本件について自己正当化するつもりはありませんし、する必要もないと思っています。というのは、すでに起こったことは起こったことだし、事情をよく知る人にとっては、それぞれの自身の立場によって判断することでしょう。
本件については、複数の要素が組み合わさっています。
どんぐりの背比べですが、あえて程度の高い順に列挙すると
0.Qiita運営の判断
1.技術論で、「当方の考え」と「自分(彼ら)の考え」の対立
2.技術論における、当方の「思想や哲学」への言及についての反発
3.知的領域における「なわばり意識」による当方への反発
4.自分のほうが、当方よりも自分(彼ら)のほうが賢いという自己顕示欲の発露
5.3,4に伴って、当方の足をとにかく引っ張りたいがための知的領域での揚げ足取り行為。
6.1から5のいずれにも該当しない、「関数型プログラミング」はおろか、プログラミングのことなどろくにしらない、技術論とはまったく無関係の、単なる当方に粘着する連中によるネットストーキング行為、ヘイト行為、嫌がらせ、手段を選ばない幼稚で卑劣な行為
ここで、問題が複雑なのは、1の純粋に技術論での当方と対立している人物は、やり方としては、6の極めて低レベルな行為を為す当事者である場合であったり、もしくは積極的に6の行為に加担し、6に専従する当事者は、1の当事者の存在をもって、自らの卑劣な論外の行為を正当化している、ということです。
つまり、1から6はどれも大差ない。ネットで、純粋に1と2だけのフェアな議論が為されることなど現状あまりない、ということです。
ただ、本件をきちんと説明するには、厳密には、
0から6までの事象をきっちりと分けて考えて論じないとフェアではない、
逆に言うと、現状0から6までを一緒くたにしているので、
連中はわけもわからず「俺たちは正しい」と思っている、信じて疑わない、という大いなる欺瞞がまかり通っているということになります。
一方で、そのような欺瞞には、まったく与しないという冷静な考え、立場の人達がいます。
まず、当事者としての私、そして私にわざわざ過分な心配と応援のメールを寄せていただく方々、そして現在、「関数型プログラミング」の書籍の出版に向けて共に作業を進める出版社の方々(本件のことは当方がご説明する前からご存知で同様に過分なお言葉をいただきました)、その他、黙って推移を見つめているこれまで温かい応援の声を頂いた方々です。
前者と後者にはその行動について徹底的な差異があります。
前者は要するに当方の足を引っ張ることが一義的な目的であるので、その目的を達成するためには、ネガティブキャンペーンを張る必要があるわけです。
もしくは、普段からそういう相手の足を引っ張りたい連中がわーっと寄り集まって、そういうネットでヘイト行為を展開しています。
非常に愚かで残念なことですが、現状ネットではネガティブな声だけが延々と増長する歪な言論空間を構成しています。あらゆるネガティブキャンペーンの声は大きいのです。
人種・民族差別を含むヘイトスピーチでも現実社会ではあんなものを支持している人はごく少数ですが、ネットの中に限定すると大きな声として機能して増幅するのと一緒です。そこではまるで、それが世論だと連中は錯覚している。本気でそう信じて疑っていない。そういう連中がこの世の中にはあらゆる分野で常に一定数存在するということです。
ほとんどの大多数の善良な市民はそのような声や情報には惑わされず、立場を左右されません。
しかし、そういうネガティブな声のほうが真実だ、と信じて疑わない連中も安易にそういうのに合流することは珍しくはありません。
「ちょっとまともに見える人」の性根が実はろくでもないもので、本質はネガティブキャンペーン、ヘイト行為に与することに抵抗ない、一皮剥けば同じ穴のムジナである、というのはこれまでに少なからず見てきました。1の純粋に技術論での当方と対立している人物は、やり方としては、6の極めて低レベルな行為を為す当事者である場合であったり、もしくは積極的に6の行為に加担し、6に専従する当事者は、1の当事者の存在をもって、自らの卑劣な論外の行為を正当化している、というのは、そういうことです。
一方、後者の大多数の善良な市民は、要するにこういうろくでもない事象については、「なるだけ関わらない」選択をします。つまりわざわざ「まっとうな正義感」を表明しながら前者について批判、反論などを表立ってはしないものです。前者の異常性を認知するがゆえに、自身のまっとうな考えや「正義感」など表明するに値しないと判断します。当事者である私でさえ、1ヶ月間も「ろくでもないな」「相手にするのは面倒だ」と思うくらいですから、それは十分に理解できることです。その代わり、彼らは直接私にメールなどを頂きます。彼らのお考えについて具体性をもたせるために、典型的なメールについて、送信者の了解と同意を頂いた上でひとつだけ引用させていただきます。
岡部様
はじめまして!
東京都在住フリーランスプログラマーの【実名】と申します
突然のメールお許し下さい
貴殿の「量子コンピューター、、」「IQ145で美少女、、」読ませていただきました
驚くべき才能に出会えたことに大変興奮しております
正月に発見し凄い人がいるものだと思いつつ正直少し動揺しました
何故なら知らない知識を沢山学ばせていただいたと同時に野良ですがプログラマーの私の知的蓄積が揺さぶられたからです
動揺を内面で消化出来た一月末、改めて読み返そうとQiitaを見ると文書が無い!残念レベルではなかったので状況を調べてみると追放されたとか?! 幸いGithubにていくつか文書を見つけられたので全部コピペ保存しました
この世間の反応、非常に残念です!
貴殿を批判する文書もいくつか見ましたが論理的に納得いく反論は一つとしてありませんでした
貴殿も書いていらっしゃるように自身の思考の基盤を攻撃されたように感じるのでしょうか?明確に指摘している本人にその指摘通りの誹謗中傷、恥ずかしくないのでしょうかね
しかし「出る杭を打つ」日本、ここはご自身のビジョンと照らし合わせご慎重に対応頂きたいです
混迷が予想される現代、貴殿の様な稀有な才能を潰すわけにはいかないのです
私の敬愛する「物理数学の直観的方法」の著者、長沼伸一郎先生は「日本では時代の変革期には勝海舟の様な理系的合理主義の人材が国を動かしてきた」と理系の国政への登用の必要性を指摘されています
貴殿を必要とする場は国を超え世界に及ぶと思います
私自身の個人的な目標は長沼先生と貴殿にお会いして恥ずかしくないレベルの見識を身につけ、お近づきになることです!
何はともあれ今後とも貴殿のご活躍、心より期待し心より応援しております!また貴殿が今後も文書を公開されることを一個人として大いに期待します もちろん今年出版される予定とあった本、購入させて頂きます 関数プログラミングの解説の明解さ素晴らしかったです!
いきなりの長文大変失礼致しました では、お体に気をつけて頑張ってください!
言うまでもないことですが、上記この方から当方へいただいたお言葉は過分であり過剰評価です。私は何も、自分はこんなに凄い評価をされていると自慢したいわけでもなんでもありません。
私がここで言いたいのは、私が書いた拙い文章によって、この方のみならず、少なからずの読者に知的興奮を与える事ができたという紛れも無い事実です。そして、本件について、残念に思っている方々がおられるという事実です。
そして彼らは、紛れも無く、
貴殿を批判する文書もいくつか見ましたが論理的に納得いく反論は一つとしてありませんでした
と、巷の批判文書、私の論について(書いた連中が論理的だと思い込んでいるのと裏腹に)論理的に納得などしておられず、
貴殿も書いていらっしゃるように自身の思考の基盤を攻撃されたように感じるのでしょうか?
上記の1から4で列挙したような「邪な動機」による、
明確に指摘している本人にその指摘通りの誹謗中傷、恥ずかしくないのでしょうかね
しかし「出る杭を打つ」日本、ここはご自身のビジョンと照らし合わせご慎重に対応頂きたいです
上記の4-6の恥ずべき、幼稚な自己顕示、嫌がらせ、誹謗中傷や揚げ足取り、ネガティブキャンペーンであると理解しておられ、当方の対応を心配していただいている、ということです。
そして繰り返しますが、このような声は、私が当事者として明らかにしない限り、公にはなりません。連中が質が悪いと思われているからです。相手にすべきではないと。
このような声が公にならないから、そのような声は世に存在しない、ひとつも擁護の声がないので、自分たちの行い、主張は正しいと本気で思い込んだ結果、問題は深刻だ、岡部が完全に悪い、病院に行け、と本気でこういうブログに書き込む異常な行動をする者もいます。
りりかるろじかる @lyrical_logical という人などですね。
lyrical_logical さんが投稿
「量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説 0…」にコメントを書き込みました。
病院に行ってください
Qiitaでも、lyrical_logical は、
@kenokabe
esumii 先生のような有能な人間のリソースをこれ以上奪われるのは好ましいことではないためコメントします。速やかに然るべき医療機関に行き治療を受けて下さい。
あなたの発信していることも、あなた自身も、健全ではありません。
“広く一般に有害なので、正す道理がある!みたいに私を叩いているわけです。”
被害妄想です。治療を受けてください。なお、有害なのは事実です。
以上なような極端に異常な言動を取るのは例外、と言えれば良いのですが、本気でそう思い込んでる連中は複数存在し、結構そういう界隈で「内輪で満足できる合意」が成立しているのかもしれません。まあ、サイレントマジョリティの是正が機能しない現状の歪なネット空間の片隅で、そのような「内輪で満足できる合意」があろうと、ほんとうの世論にいかほどの影響があると思っているのかわかりませんが、おそらく連中にとっては、そういう界隈での「内輪で満足できる合意」=絶対的世論、と信じているのでしょう。
彼らがそう思い込むに至るまで、事象をかんたんな時系列で説明します。

かんたんな時系列

私が、Qiitaに最初に投稿したのは、やはり「関数型プログラミング」のトピックでした。
あとあと、「関数型プログラミングに目覚めた!IQ145で美少女JKの先輩から受けた特訓 5日間」に繋がる、叩き台のような記事でしたが、基本、関数型プログラミングの「考え方」というのは、「手続き型・命令型」とは異なるので、心理的反発が強いです。
また私の説明の仕方もこなれておらず、うまく伝わらなかったようです。
フローを脱却するという文脈で、【脱アルゴリズム】と冠したのですが、
この「アルゴリズム」というワーディングで、反発する連中が多かったようです。
もちろん、「アルゴリズム」というバズワードなんて「関数型プログラミング」の本論とは何の関係もないわけで、本論を読めばそれが「フロー」のことだとわかるのですが、なんかよくわからないですが、一旦、ワーディングでもなんでも気に入らないと決めたら、本論とか関係なくなるみたいなんですね。とにかく「関数型プログラミング」の「考え方」「脱フロー」のことなんてまったく理解されずに、心理的反発と、私へのアンチだけが残りました。これはもちろん、後続の「関数型プログラミングに目覚めた!IQ145で美少女JKの先輩から受けた特訓 5日間」を執筆するにあたって役立つ経験でした。「くだらないことだけど、ワーディングとやり方を変えてやろう、パッケージングも変えてやろう」という教訓になりました。もっともワーディングやパッケージングを変えたとところで、一旦「気に入らない」「受け入れない」と決めた連中は延々反発するわけですが、そんな思い込みだけで意思決定して生きてる連中とは、そもそも、もう理性的な議論は成立しないということなので、どうしようもないです。
そのうち、ある出版社の編集者の方より、メールで「関数型プログラミング」についての執筆の打診をいただきました。自分の書いた文章について業界のプロに評価されていると感じましたし、世の「分かる人には分かる」「伝わっている人には伝わっている」という証左であると嬉しかったです。たいへん意義とやりがいを感じる仕事でしたし、無償でなく有償で洗練されたアウトプットを展開できる素晴らしい機会をいただいた、と快諾しました。この方は実際、素晴らしい編集者でおられるし、良きパートナーです。
この頃には、ある種のSNSとしてQiitaを活用できる、記事の露出度も高いと感触を掴んでいたので、私は積極的にブレインストーミングを兼ねて、アウトプットしていくつもりでいました。もちろん最終的にはアウトプットした内容やそこで得られた反応や教訓を著書に活かして統合する心づもりでした。
私は、【脱アルゴリズム】で、なんで連中が反発してアンチになったのか?だいたい分析を終えていたので、その教訓を活かし、なんで現状がダメなのか?のBefore、そして、どうやって解決しどういう効果が得られるのか?のAfterのBeforeAfterのアプローチを採用する方針を編集へ伝えていました。その過程で、編集部よりペア・プログラミングというアイデアが出てきて、目次を構築する必要性から、私は素案を書きあげました。それが、Qiitaでも公開した、「関数型プログラミングに目覚めた!IQ145で美少女JKの先輩から受けた特訓 5日間」というラノベ風の記事でした。
これは、前述のとおり、ワーディングやパッケージングを変えたので、読者の反応は良かったです。SNS的にもアンチの影も薄くなり、本が出たら買うという感じの良好なコメントが多く見受けられ、このフィードバックにより出版に向けて弾みがつきました。改めて、この一連の評価をしていただいた方々には感謝申し上げます。
私は、別に、「量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説 」という記事も上げており、この記事も概ね高評価でした。
その結果、Qiitaで私が書いた記事が4本もトップ20に入ると露出が異様に高まっていました。特に関数型プログラミングの記事については、一種のロングセラーの性格が色濃かったです。私の記事の影響は如実にGoogle検索にも反映され、関数型プログラミングで検索すると、私の記事が連続で1P目のかなり上位に連続で表示されていました。
これは、あくまで正当なフィードバックと露出である、と私は信じています。特に、「関数型プログラミングに目覚めた!IQ145で美少女JKの先輩から受けた特訓 5日間」については、延々と、本が出たら買うの書き込み、それからコメント欄でいただく賞賛の言葉など、
大多数には賞賛であることは揺るぎありません。
しかし、私のアプローチはかなり型破りです。
量子コンピュータ解説には、DWAVE社の新しい方式に反発している既存のアカデミックな勢力によるおよそ科学者の態度とはいえない保守的なやっかみについて批判し、同様に巷の量子コンピュータ解説が役立たずであることを批判しました。
関数型プログラミングの一部の記事にも、たとえば「参照透過性」や「副作用」の説明にろくなものが存在しないこと、説明の仕方が極めて杜撰で、難解な説明をありがたがるような読者にも責任の一旦がある、裸の王様の状況があることなどを書いていました。
あと、Haskellとか、圏論の分野についても言及したんですね。圏論は代数がオリジンなのに、誰も語らないって書きながら代数の初歩の解説を投稿しました。極めて生産的で建設的なやり方ですが、快く思わない連中もいたでしょう。しかし、あくまで健全な言論の範疇です。
この辺、「訳知り顔」の連中は気に入らなかったんですね。自分のテリトリーに侵食されたとでも思ったのでしょう。
堕落駱駝 @camloeba 2015-01-24 02:36:54
@h_sakurai あの方の記事に関数型言語を良く知らない人が流れ込んで、あそこから得体の知れない何かを得ているのを複数観測しました。私はそれを出来るだけ止めたい。これはマズいという記事は消えて頂くかそれとも順位が下がってもらいたいが、そのために火事場するのは逆効果です
「これはマズいという記事は消えて頂くかそれとも順位が下がってもらいたい」
はい、要するに言論での対抗や議論ではなくて、足をひっぱって、一種の焚書のような真似で対処しようとする、極めて愚かな真似をしようとしたんですね。良識ある現代人ならばだれでも愚かであるとわかることです。
私の記事がここまでストック数が大きくなるほど支持されたのは、私の記事の力であり、支持していただいた人々がいるからです。Google検索の2位、3位になるのも、それはまっとうな力学だと思います。
それが気に入らない、また内容が気に入らない、私の言論がそんなに間違っていると信じるのであれば、彼ら気に入らない人々が対抗言論を展開するのが現代の言論のルールです。
もう中世の時代ではないのだし、ここは日本なのです。
また、同じ時期、おそらく大学の教師でしょうが、「この分野に関わりたいなら」だとか「いい加減、有害だ」などというコメントが捨てアカウントで寄せられました。こんな感じ。
基本的にこの人物が最初私に指摘したのは私の「翻訳ミス」に基づく主張についてです。
その「翻訳ミス」は確かに当方のミスですが、根本の主張については、単なる見解の相違です。しかし彼はここぞとばかりに、鬼の首を取ったような感じです。
私はあなたの指導教官ではないし、教える義務もありませんので、これ以上の努力はいたしません。最低限の指摘はすでに終了しています。
幸いなことに世の中には、すぐれた書籍があふれております。いい世の中です。ぜひ、一読することをおすすめしたします。
この分野に関わりたいのであれば、避けては通れないコンピュータサイエンスの基本ばかりです。
[1] “Structure and Interpretation of Computer Programs” http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-1.html#titlepage
[2] “Introduction to the Theory of Computation” http://www.amazon.co.jp/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X
[3] “Types and Programming Languages” http://www.amazon.co.jp/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091
以上を参考文献として上げる理由を以下に述べておきます。
[1] - Kenokabe さんは、評価(eval) と 関数呼び出し(apply) の基本的区別がついていないようです。私がこれまで出会ってきた学生ならば、これらの区別は100人中100人が学習によりできるようになります。Kenokabe さんの中における「評価」と、100人中100人が共通の語彙として相互理解している「評価」がどのように異なるか、ぜひ、SICP を読むことをおすすめします。
[2] - Kenokabe さんは、コンピュータプログラミングにおいて「計算」するということがどういうことかその原理を理解していないようです。この本は、「計算」するとはどういうことか?時間と空間との関係についてもきちんと数学的な証明をもって述べています。ぜひ一読を。
[3] - λ計算についての深い知識はここでの議論ではそれほど必要ないかと思われますがやはり身につけておいたほうが今後は他人とのコミュニケーションがスムーズになると思われます。
以上、この人物は、
私はあなたの指導教官ではないし、教える義務もありません
や、
私がこれまで出会ってきた学生ならば、これらの区別は100人中100人が学習によりできるようになります。
から推測すると、「情報工学系の、大学の教師」です。
ある「情報工学系の、大学の教師」が卑劣にも捨てアカウントで不躾に、
上から目線で、あれ読め、これ読めとなんか書いてきた。
「この分野に関わりたいのであれば」って一体、何様のつもりかわからないですが、要するに「縄張り意識」による心理的反発であることを多くの人は読み取れるんじゃないでしょうか?
私自身の返信コメントはメールに記録が残っていないので、正確な文面は引用できませんが、まず、この匿名の捨てアカウントの人物による不躾で上から目線の縄張り意識を感じざるをえない慇懃無礼な態度に不快感を表明しました。
次に、
[1] “Structure and Interpretation of Computer Programs” http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-1.html#titlepage
は、読んだ、ということと、
[1] - Kenokabe さんは、評価(eval) と 関数呼び出し(apply) の基本的区別がついていないようです。私がこれまで出会ってきた学生ならば、これらの区別は100人中100人が学習によりできるようになります。Kenokabe さんの中における「評価」と、100人中100人が共通の語彙として相互理解している「評価」がどのように異なるか、ぜひ、SICP を読むことをおすすめします。
という指摘について、
【評価(eval) と 関数呼び出し(apply) の基本的区別、についてですが、
両者は原理的に全く同じものです。】
と私の見解を述べました。
すると、次のコメントで彼は、
SICPについては、すでに読んでいるということで、その点に関しては大変失礼いたしました。
eval-and-apply
出展: https://mitpress.mit.edu/sicp/full-text/sicp/book/node77.html
これらを読んだ結果、
【評価(eval) と 関数呼び出し(apply) の基本的区別、についてですが、
両者は原理的に全く同じものです。】
そのような判断をしたのであれば、「私がこれまで出会ってきた識者ならば、これらの区別は 101 中100人が学習によりできるようになります」と私はこれからは言わなければいけないようです。
どちらの認識が正しいかということは問題にしておりません。とてもユニークな解釈をする方だなと思って感心しております。
つまり、私は「彼の生徒」あるいは「彼が出会った識者」としては「異端」であると皮肉を言われました。
私はその彼の皮肉に対して、以下のようにコメントを返したと思います。
その、【太極図】のような図は、そのシンボルのそもそもの意味論として、
陰と陽ははっきりと真ん中で分けられる物ではなく、
「陽極まれば陰となる」「陰極まれば陽となる」という言葉のように、
陽は行き着くと陰になり、陰は行き着くと陽になる、渾然一体としたもので、
明瞭な区別がつかない事象を表現している。つまり、
【評価(eval) と 関数呼び出し(apply) の基本的区別、についてですが、
両者は原理的に全く同じものです。】という私の見解は、その図があわらす事象そのものであり、SICPのその図をみて、101人目の私の解釈のほうが正しく、彼と、彼の言う生徒や識者の100人は、全員ウスノロかアンポンタン(なんて書いたかは失念)なのだろう、と皮肉で返しました。
[2] - Kenokabe さんは、コンピュータプログラミングにおいて「計算」するということがどういうことかその原理を理解していないようです。この本は、「計算」するとはどういうことか?時間と空間との関係についてもきちんと数学的な証明をもって述べています。ぜひ一読を。
については、「計算」という人間の行為については、【この本】でどういう切り口で論じようと、それが独善的に唯一の解釈として正しいということは、【この本】を引用して、その論証が正しいと表明したところで、私の解釈と意見が間違っているという論証になっているわけもない、と返答したと思います。
また先立つ彼のコメント
以下のAとBを混同してますよ。
A). 言語のコンパイラやインタプリタ上での eval や apply の実装における、パラメータの評価戦略。自分でコンパイラやインタプリタを作成した経験があるなら容易に実感できるはず。
B). 言語の上でユーザーが工夫して 遅延評価システム を作成して(function でラップするだけ)、無限構造を宣言的に取り扱うこと。たいていの言語で可能。 C, C++, JavaScript等でも。
プログラミング言語の定義上で使用するのは、A の意味での評価戦略です。kenokabe さんは B しか見ていません。B はユーザーがある意味、勝手に 行うことです。両者は区別しないといけません。A と B を混同しているのが、すべての誤解の原因に見えます。
B の意味で、関数型を志向するのは、もちろん可能です。B で無限構造を宣言的に取り扱うことももちろん可能です。
においても、AとBのレイヤの本質的な違いなんてあるのか?
「B はユーザーがある意味、勝手に 行うことです。両者は区別しないといけません。」
というのは、全く同意できない、と返答しました。
彼が勝手にそういう区分けをするのは彼の自由だが、それは私がなにか「誤解」していることにはならない。
結局のところ、私はこの「情報工学系の、大学の教師」が卑劣にも捨てアカウントで不躾に、上から目線で、あれ読め、これ読めとなんか書いてきた態度については、批判的であり、かつ、主張の作法としては、一貫して「この本にはこう書いてある」と自分の考えを本の言葉をもって引用するばかりで、自分の私見を押し付けるだけで、私の主張が論理的に破綻している、と看破するにはお粗末なものでしたし、
今回の記事はさすがに世間に間違ったことがつたわりかねない有害な記事
さすがに一線を超えてしまった
純粋に理論的な間違いを正したいという思いからのコメント
「遅延評価=>純粋関数型言語」と理解しているようですが、完全な誤解です。
という主張には同意できないし、「有害」とまで断じられるのは独善的すぎると解答したと思います。
そして、同時期に、私の記事の「有害さ」について文句をいう、「情報工学系の、大学の教師」がおられました。
https://twitter.com/esumii/status/558530062576652289
Eijiro Sumii @esumii 2015-01-23 16:41:58
@Qiita 「関数型言語系情報に関して、Qiita は、もはや情報共有サービスではありません。読んでも害しかない低質なワードサラダに占領されつつあります。
上記のように、私は前述の、卑劣にも捨てアカウントで不躾に、上から目線で、あれ読め、これ読めとなんか書いてきた「情報工学系の、大学の教師」の考えが間違っている、と思っていますが、百歩譲って、せいぜい解釈が異なる、見解が異なるだけであり、それを「読んでも害しかない低質なワードサラダ」と評されるフェアネスなどない、と信じるし、実際ろくな反論はこれまで一度もみたことがありません。
ちなみに、このEijiro Sumii @esumii という私の一連の記事について「読んでも害しかない低質なワードサラダ」と侮辱する「情報工学系の、大学の教師」と、前述の、卑劣にも捨てアカウントで不躾に、上から目線で、あれ読め、これ読めとなんか書いてきた「情報工学系の、大学の教師」が同一人物なのかは、私は一定の印象を持っていますが、読者はどう思われるでしょうか?
追記すると、その後私はこの、Eijiro Sumii @esumii とQiita上で直接やりとりしたのですが、あれ読め、これ読め、だから自分の主張が正しい、私の考えは間違っているという論理がよくわからない上から目線のやり口と、自分の侮辱や皮肉は棚にあげて、私のコメントが罵倒だと論評する風体には一貫性を感じざるを得ませんでした。
そして、念のためですが、Eijiro Sumii @esumii 氏には、この私の印象について、ご反論があるならば、
kenokabe@gmail.com 
までご返信いただければ、ここでその見解をフェアに併記させていただく用意があります。
また実際私は、Eijiro Sumii @esumii 氏に、Qiitaに、あなたの反論記事をあげてくれたら、あなたが露出して気に入らない私の記事の冒頭にあなたの記事をリンクすると確約する、それでフェアだろう?記事を抹消するように働きかけることは言論人として恥ずべき行為だ、
と言いましたが、まったく聞く耳をもたなかったようです。
私の言論がルールに外れるものだかららしいですが、私の言論がルールから外れる、というのであれば、あなたの言論も同じ程度だろう?ということです。
まあ、結果的に彼らの思惑通り、私のQiita記事が消されたわけで、
Qiitaは、まっとうな言論ルールから考えると、やはり恥ずべき行為を強行した人々の策略に阿ったと評価しています。
これが愚かな顛末であることは、まあ繰り返しですが、良識ある現代人ならばわかることですが、こういう今喜んでる連中に、良識ある現代人は反論しません。上述のとおり面倒だからです。
Eijiro Sumii @esumii 氏は、その後、「私見」をQiita記事としてUPされました。

「関数型言語」に関するFAQ形式の一般的説明、と強弁されている記事

http://qiita.com/esumii/items/ec589d138e72e22ea97e
一般的説明、って別にわたしはこれを「一般的説明」だと思わないですし、
「私見」は「私見」と表明しておくべきであり、
「私見」を「一般的説明」などと「一般化」しないで欲しい、
それが「識者」「知的誠実さ」というものだろうと残念に思うわけですが、
以下、論評です。
まず
初心者の方の素朴な疑問・質問や、「ここがよくわからない」「こういうことも書いてほしい」みたいなコメントも歓迎します。
と初心者を、初心者も、対象にしておられるようですが、まあ実際これで意味がわかる、考え方がわかる「初心者」なんてどこにも存在しないでしょう。

じゃあ関数型プログラミングって何?

副作用をできるだけ(あるいは全く)用いないプログラミングスタイルのことです。副作用をまったく用いない関数型プログラムないし関数型言語を純粋(pure)、そうでないものを非純粋(impure)と言います。

じゃあ副作用って何!?

「式の値を計算して求める」(評価(evaluation)と言います)以外の動作のことです。例えば1+2という式には(普通は)副作用はありませんが、print(1+2)という式には「画面に3を表示する」という副作用があります(文法は適当です)。
副作用がない式は、必然的に、評価する(=値を計算する)と常に同じ結果になります。これを参照透明性(referential transparency)と言います。
以上の文章で、唯一「具体的」なのは、
例えば1+2という式には(普通は)副作用はありませんが、print(1+2)という式には「画面に3を表示する」という副作用があります(文法は適当です)。
「普通は」ってなんだよ?とまず思うだろうし、
(こういうのは、不正確さを指摘されることを恐れるあまり、予防線をはった結果、意味のわからない解説をする悪例です)
「副作用」は、結局のところ、「画面に3を表示する」ということのみで説明されている。
はい、「画面に表示する」ことが関数型プログラミングの副作用なんだって。
これで意味分かる人がいるでしょうか?
こんなものは、「副作用」の概念説明としてはまったく成立していないし、
こんなもので、わかる「初心者」なんているわけがない。
そして、「関数型プログラミング」はすべて、この「副作用」を起点として概念説明されている。まあこれで「関数型プログラミング」の概念習得できる初心者がいるとしたら驚きですし、少なくとも、私は、この「画面に表示する」ことが関数型プログラミングの副作用であるという概念説明を起点として「関数型プログラミング」のことを誰かに伝える自信なんてこれっぽっちもありません。まったく概念の本質ではないデタラメな方法だからですからね。
最初から、「初心者」にとって何かの知識を得るためには、まったく期待できない文章であることが判断できます。
実際この記事は、最初の週にQiita人気ランキングに登場しただけで、次の週から勢いを失ってしまいました。現在のストック数も、500弱と、まったくふるいません。
要するに「初心者」はじめ広いQiitaユーザには評価されなかったということですね。
ご本人もやる気をなくしたのか、随時更新するとか書いてたいたのにもう飽きてしまったようです。

それだと入出力や状態(state)すら表せないのでは?

同様に、状態(の変化)についても、古い状態を引数として受け取り、新しい状態を戻り値として返す関数により表すことができます。
たいへんお粗末な説明です。
じゃあその「新しい状態」の「戻り値」っていうのは、時間変化していく状態変数になるんだろう?これはどうするんだ?
とかいろんなツッコミが初心者の方々からされるでしょうが、そもそもこの人は「関数型プログラミングの考え方」にはまるで興味もなく、無頓着すぎるようで、「関数型プログラミングでよく使われる用語を別の言葉で言い換える」網羅作業を延々としているだけなので、初心者が知りたいことは何ひとつ教えてもらえないでしょう。期待しても無駄です。

ここでいう関数(function)とは?

厳密な定義は数学的理論が必要ですが、簡単に言うと「引数を受け取り、戻り値を計算して返す手続き」です。関数の「戻り値の計算」を表す式の部分を本体(body)と言います。例えばf(x) = x+10という関数fだったらx+10が本体です。
式と同様、関数にも、本体に副作用が全くない純粋な関数と、副作用がある非純粋な関数があります。純粋な関数は、参照透明です。つまり、同じ引数を与えれば、常に同じ結果を返します。この点は数学の関数とよく似ていますが、関数型言語もプログラミング言語ですので、手続きとして書けない関数(計算不能関数)は書くことができません。
計算や入出力、状態の変化などを関数や関数適用(呼び出し)で表すので「関数型プログラミング」や「関数型言語」と呼ばれるのだと私は理解しています。
「厳密な定義は数学的理論が必要ですが、」
はい、また出ました。
(こういうのは、不正確さを指摘されることを恐れるあまり、予防線をはった結果、意味のわからない解説をする悪例です)
簡単に言うと「引数を受け取り、戻り値を計算して返す手続き」です。
簡単に言って間違いです。
「関数」という存在は、特に関数型プログラミングにおいては、
あくまで「論理」であり、「計算」という別事象は含有している「手続き」ではありません。
「関数」という「論理」を「手続き」として計算するか否かは、まったく別事象です。
例えばf(x) = x+10
という「関数」はあくまで「論理」のままであり、
これを「計算」すると、はじめて戻り値を計算して返す「手続き」となります。

関数型プログラミング・関数型言語の何がうれしいの?

参考リンク:「なぜ関数プログラミングは重要か」 古典です。
ただし、関数(型)プログラミングや高階関数だけでなく、遅延評価(後述)も強く推している点は、当然ながら間違ったことが書かれているわけではないのですが、今や必ずしも一般的ではないと個人的には思います。
今や必ずしも一般的ではないと個人的には思います。
何だろうコレって?
この人は、個人的には思う、という「個人的見解」であるとまた自分の論のセーフティネットを張って逃げながら、
「一般的」であるとか、「一般的でない」とか、
と一般論を、この記事の全体を論じている。
たしか、この記事の表題って、
「関数型言語」に関するFAQ形式の一般的説明
でしたよね??
私見なら私見である、「個人的見解」なら「個人的見解」であると明示すべし。
「一般的説明」などといい加減なことをぶち上げるべきではないし、それは知的誠実な態度ではないと思う。
ましては、そういう「個人的見解」をもって、人の論説を「有害」などと断じるべきでないのではないですか?
もちろん、あなたが「有害」と侮辱する私の「個人的見解」は、
その、「なぜ関数プログラミングは重要か」 古典と同じで、
遅延評価(後述)も強く推している、わけですが、
あなたは個人的見解をもって、
相手が「古典」という権威ならば→今や必ずしも一般的ではないと好き勝手に【一般化】、
相手が「私」という権威を認めないならば→上から目線で好き勝手に【有害認定】。
何なんでしょうかコレって?

高階関数(higher-order function)って何?

おんなじ。別の説明不足、あるいはまったく説明されていない用語で言い換えているだけ。
唯一、「関数を部品として組み合わせることが容易になります。」というのに期待させるが、その様態がいかように部品として扱われているのか?
この人は説明しているつもりになっているのだろうが、部品の部品たる所以が、具体性がまったく見えない。当然こんな説明でわかる初心者がいるはずもなし。

遅延評価(lazy evaluation)って何?

私の見解と異なる彼の私見の一般化。
当然、
なぜ関数プログラミングは重要か」 古典の見解とも異なる。

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

いいえ、両方とも基礎理論はほとんど同じ人たちが研究していますし、純粋関数型オブジェクトの理論もあります(第32章)。むしろ、オブジェクトと第一級関数やデータ抽象の考え方(第2章・第3章)など、類似も少なくありません。フェライゼンというScheme等の著名研究者による「オブジェクト指向プログラミングに関する欧州会議」(ECOOP)における基調講演(特に22ページ目)や、ワドラーというHaskell等の著名研究者による「オブジェクト指向プログラミング・システム・言語・アプリケーションに関する国際会議」(OOPSLA)における基調講演等々もあります。
ひどい。
研究者(リンクをたどればご自分を含めておられる)による研究や、「著名研究者」の基調公演の存在をもって、対立していないということになっている。
これはただの権威主義の説明の仕方で、理路の説明ではない。
リンク先には理路もあるのかもしれないが、自分がおもねる言説を引用するだけで、正しいと言いたいのは、だからこれおが権威主義。
権威でも不都合で、正しいと思わないのは、今や必ずしも一般的ではないと個人的には思います。で一般化できるのだから自由自在。
権威の引用でなく理路を語れ。

関数型言語は哲学や宗教と関係がありますか?

ありません。いやひょっとしたらいつか何らかの関係が見出されるかもしれませんが、これまでのところ、まっとうな言説は寡聞にして知りません。
参考リンク:ソーカル事件
(詳しい方へ:ライプニッツのモナドが…とか、カリーハワード対応する数理論理学の起源は哲学だから…とかは、ここでは「関係がある」に含めません。哲学科出身の計算機科学研究者の先生方もいらっしゃいますが、ネット等の一部で見られるようなトンデモ議論は伺ったことがありません。Cf. すべてのものには関係があるが、近いものは遠いものより関係がある)
「考え方」を重視して論じた、私への当て付け。
「ネット等の一部で見られるようなトンデモ議論」とまた侮辱。
何度も繰り返すが、この人は私見を無理やり一般化して正しいと強弁しているだけで、なんら有効な反論はできていないのに、一方的に「トンデモ議論」と断定して侮辱し続けている。
あなたが「言葉の説明」の網羅に執着して、なんら「考え方」について無頓着なのは自由なのだが、それをもって、「トンデモ議論」などと侮辱すべきではない。
参考リンク:ソーカル事件、ってこの人意味わかっているのかな?
私が、哲学と宗教について例示したのは、ソーカル事件の欺瞞とは無関係な方法だし、私はソーカル事件のような権威を悪用する言葉の列挙ではなく、考え方の類似性を示した。
あと、この辺については、著書で詳しく書いたので、第4章を「読め」、と言いたいです。
そんな言い草で自分の主張が正当化出来るのならば、こんな楽なことはないですね。

同類の方など

堕落駱駝 @camloeba
関数型言語とオブジェクト指向の研究は両者とも同じ数学的基盤に支えられて行われています。片方で主に知られている研究者がもう片方の学会で発表するのはごく普通の事です。こちらは「λマン」がオブジェクト指向の国際学会に登壇している様子です。
https://www.flickr.com/photos/drjason/280369547/in/set-72157594342576801
堕落駱駝 @camloeba 2015-01-24 02:36:54
@h_sakurai あの方の記事に関数型言語を良く知らない人が流れ込んで、あそこから得体の知れない何かを得ているのを複数観測しました。私はそれを出来るだけ止めたい。これはマズいという記事は消えて頂くかそれとも順位が下がってもらいたいが、そのために火事場するのは逆効果です
基本的に、私に批判的な連中に共通しているのは、
a) 「関数型言語を良く知らない人が流れ込んで、あそこから得体の知れない何かを得ているのを複数観測しました。」 などと、私が書いた記事を評価していただいた学習者の知性を馬鹿にし、侮辱している。意見が気に入らない私を馬鹿にしたいから、その言説を評価するものは、よく知らないからだ、と取ってつけたような理由をもって、初心者、入門者、学習者の知性を侮辱することで辻褄をあわせている。
b) そのくせ、初学者相手にろくな説明を提供しない。しているつもりだが、独りよがり。
c) 結局、「あんたらが思ってるより、わたしらがやってる関数型プログラミングや圏論、モナドっていうのは難解なんよ?」とハードルを上げる印象付け。自分や自分が属するグループの知性の誇示。
たとえばこんなの↓
手続き型じゃない言語を齧っても別にバチは当たらないんじゃないの?というポエム
http://qiita.com/satomip/items/f37fcdf74d0288d5d006
例えば、たかしくんがお母さんからお金をもらい、いくつか買い物をしてお釣りをもらってきたとします。この時、おはじきやコインを取り出して並べながら解くのが手続き的な解法であり、方程式を立てて求めるのが数理論理的な解法と言えます。おはじきを並べても人に伝えるのは難しいですから、おはじきの並べ方や動かし方をうまく言語化して研ぎ澄ましてきた、というのが手続き的な言語の歴史でした。
一応「初心者」に向けて、説明したいというスタンスの表明、そのつもりだったが、
その基盤である数理論理的な部分を知らなければ、その本質を理解しているとは言えない、かもしれません。例えば集合論、整数論、群や体や順序、命題論理やラムダ計算。数理論理的な言語は、こういった理論的なサムシングと実務とを実に簡単に橋渡ししてくれます。そして、それは単なるディレッタントの楽しみではなく、極めて実用的なツールであり、そこら辺の説明はそれぞれの言語の宣教者が嬉々として行ってくれるでしょう。それらは万能ではありませんが、貴方のやりたいことは大方できるはずです。
だから、別にその言語は悪い言語じゃないですし、そのパラダイムは悪いものではありません。ただ、こっちを覗いてみてもバチは当たらないんじゃないか、と思います。
「貴方」ってどういう読者を想定してこの文章を書いているのか不明。
こういった理論的なサムシングと実務とを実に簡単に橋渡ししてくれます。そして、それは単なるディレッタントの楽しみではなく、極めて実用的なツールであり、そこら辺の説明はそれぞれの言語の宣教者が嬉々として行ってくれるでしょう。
誰にむけてこの文章書いているの?という印象。
これただ単に自分が賢いと誇示したいだけで、こんなものを読んで、いったい誰が、「うん、そうか悪くない、ひとつ始めてみるか!」と思うんだろう?と率直に感じるものです。

Qiita運営の対応について

Qiitaにいただいているご意見について
。Qiitaに関してご心配や一部の対応についてご心証を悪くされている方もいらっしゃいましたので、以下についてご報告させていただきます。
一部ユーザーさまのユーザー資格の取消について
とあるのは、私のアカウントへの処置について複数人からクレイムが行ったということでしょう。ご意見頂いただいた方々、どうもありがとうございました。
結論から申し上げると、実質、本当にQiitaは対処しきれなかったのだと思います。
営利企業のサービスなので、根本的に別に私は異論もない。
それを踏まえて、正確に補足すると、
本件については当該のユーザーさまとご連絡のやりとりをさせていただいておりましたが、事態の改善が見られない事象を自他の投稿のコメント欄にて複数回視認したため、結果的に弊社サービス利用規約に基づきユーザー資格の取消という重い判断をさせていただきました。
という部分について、一部正確で、一部不正確というかアンフェア。
おそらく、アカウントサスペンド機能をサイトに新たに実装して、とりあえず誰かに使ってみたかったのだろう、という感触は普通に持っています。
それを一応指摘させていただい上で、やはり対処しきれなかったのだろうな、という印象。
そもそもね、どっちが悪いか?というと、自由な言論を展開しているところに、
上記のように捨て垢で中傷コメントしてきたり、ネガキャン記事を書いたり、あるいは論外だけれども、ただのネットストーキングの嫌がらせコメントを延々と繰り返すアカウントへのIPブロックなど抜本的な処置を取らなかった。
私は延々とこの処置をお願いしてきたが、そういう要望をするユーザもろとも面倒になった、という流れ。
有害記事を露出させている、と文句も出たのだろうが、所詮、先行評価やら遅延評価における議論の見解の相違にすぎないのに、自分のより好み、あるいはただの私見を、好き勝手に一般的に正しいと強弁し、
くだらない縄張り意識丸出しで、思想云々を独自研究だのトンデモだの侮辱し、
大げさに相手側の主張を有害だと決め付け、言論封殺するような愚かな真似に阿った。
その結果、本当にろくでもない連中を喜ばせた、という自覚は一応お持ちになったほうが良いと思います。
あと、最後に、Hatenaブックマークでコメントして、本当にくだらないただの誹謗中傷の常習犯に★マークをつけまくっている連中、これは繰り返すけれども「世論」ではないし、こういう連中も、ほんとうにろくでもないと思うし、ほんとうの「世論」からは「相手にすべきでない」存在と思われている自覚はあるのかな?と疑問形で終わる。

関数型言語のウソとホント

http://qiita.com/hiruberuto/items/26a813ab2b188ca39019
というFAQ記事は、ボトムラインとして、「新しい言葉を別の新しい言葉で説明してとりあえず網羅」という何の約にも立たない愚かなやり方に徹するではなく、きちんと平易な言葉で概念を立ち上げています。
純粋関数型、遅延評価について私の考え方とは異なり、この筆者の主張に異論がある部分も存在しますが、関数型プログラミングとオブジェクト指向の対立についてなど、
「関数型言語」に関するFAQ形式の一般的説明、と強弁されている記事よりも、
300倍(適当)読み応えもあり、初学者の役に立ち、身になるでしょう。
ストック数もこちらのほうが多く、評価は上々です。今後も伸び続けると思われます。
以上です。

(関連記事)

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

Popular Posts