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年5月1日金曜日

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

お礼申し上げます

いよいよゴールデンウィークに突入ですね。私はあんまり関係ないですが。

『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』を大変多くの方々にお買い求めいただき、改めてお礼申し上げます。

中には少ないお小遣いを切り崩して購入していただいた方もおられるかもしれません。
本当にありがとうございます。

以前、無料公開、立ち読み部分を読んでいただいて、命令型プログラミングでは行き詰まって苦労しているが、関数型プログラミングなら仕切りなおして勉強できそうだ、というコメントをいただいたこともあります。その方は元気にしておられるでしょうか?
本書の巻末の謝辞でも申し上げているとおり、そのような方々の真摯な声こそが本書の出版を後押ししました。

質問系SNSのご要望について

本を読んでわかりにくかったところを質問できる、質問系SNSを始めて欲しいという要望をメールでいただきました。そのような質問系SNSですが、私にしても、理想的には、ざっくばらんに楽しい雰囲気で、いろんな方が自由に発言できる、なるだけオープンな場を設けたいとは思います。
思いますが、残念ながら「治安」「セキュリティ」「安全保障」の問題があります。現状を鑑みて、不特定多数の参加者が集う場のコントロールの管理権が私にない以上、問題が大きいと判断しています。

期間限定で、本書の内容について、質問や相談をメールで受け付け、著者が直接、回答を返信します

実は、出版後、治安の懸念が大きい中、なるだけ、ひっそりと著者と直接やりとりをしたい、という要望、というか、実際メールをいただいてそのような感触を受けることも多くなりました。ひしひしと(笑)治安が悪くてすみません。

現在、結構な数のメールを読者の皆さんからいただいております。読者でない方々も多いです。
多分、なにかの間違いで、Googleのトピックスか何かに例の記事が露出してしまい、
一日で2万アクセスもあったことも原因のひとつかもしれません。
熱心な学生、技術者、それなりに著名な方々もお見受けいたします。
どうもありがとうございます。
メールの内容は非常に真摯な内容が多く、著者として、こう言ってはなんですが胸を打たれることが多い昨今です。本当に出版してよかったと実感する日々です。

きっとこのブログもこっそり読んでいるが、もっと色々書いて欲しいと思っている読者も多いでしょう。
ひとつのサポート記事というか、Reactの説明の補足は、

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

としてUPしています。まだ、静的HTML編だけですが、結構、英語でも日本語でも、少なくとも私は見つけられなかった、入門に必要な要素を書いていると思います。完全にオリジナルです。
まあ本書をご覧のとおり、私の場合、良くも悪くもオンリーワンなので、他とかぶることはあんまりありません。ということは他にはなかなか見つけられない解説内容である、ってことです。私は私の解説方法でやれば皆わかりやすいのに、と思いながら書いているわけですが。
そして、こういう地道な作業はSNSでもまったく話題にもならないし、全然評価もされないんですけどね。とにかく、多分、Reactの情報を探している人は、読んだら役立つのは保証します。

真摯に勉強したいと熱望する読者の方々にもっと目を向けて、微力でしょうが、また、いつまで継続できるかは不明ですが、少なくとも今からある一定の期間、本書の内容について質問や相談をメールで受け付けたいと今回、明示的に告知したいと思います。

本書は、なるだけわかりやすく書いた、つもりではいますが、私のひとりよがりで、なかなか上手く伝わらかなかったこともあろうかと思います。特に後半は混乱してしまった方が多くおられるのは想像できます。全力を出しすぎたかもしれませんが、まったく反省はしていません。しかし、結果的に混乱を与えた部分については、直接サポートできればしたいと考えています。

本来は、Amazonの書籍情報にも掲載したかった情報ですが、膨大で字数制限を軽くオーバーしてしまったという単純な理由で、掲載を見送った、本書巻末にも収録している本書の構成/全目次を出版社編集部の了解のもとにこの記事の最後に公開します。

それを参照の上、コピペなどをし、ご質問をいただく際には、例えば、

Day2
合成関数を生成する関数 composeの再発明

Day3
JavaScriptで『関数』のみならず、『まとまり』にも『必要な時に必要な分だけ計算する方法』を適用してやる
フィボナッチ数列という無限数列をつくる 黄金比の数列

というように、章+節を指定していただければ、返信する際にとても助かります。

助かりますが、必須ではなく、単純にページ番号でも別に構いません。
上記のように複数でももちろん構いません。
その上で、疑問に思ったことなど、自由に相談、質問してみてください。

「その上で」でなくても、実は構いません。
これが知りたいからそのテーマの記事をかけ!という要望でも構いません。
善処はします。一応。

一応、本書をちゃんと買って読んでいただいている読者の方々に、
その内容に沿った質問をいただいたほうが話が早いというだけであって、
ボトムラインは自由です。固苦しいことはなにもありません。
もちろん、私は今、常識かつ良識ある市民を前提にお話しているわけですが。お忘れなく。
それを前提として、別にペットの話をしていただいても、多分普通に返信すると思います。

いただいたメールにはすべて目を通して、(明らかに不適切なもの以外は)
なるだけ早く、著者が直接メールで回答、返信いたします。
また、タイミングを見計らって、そのすべてか、もしくは重複した質問をまとめて整理するなどして、質問と回答のみを、このブログで公開して、広くシェアする予定でいます。
その際、技術的なQ&Aには関係ない要素、いただいた個人情報には十分配慮し、メールアドレス、お名前などは、公開することはありません。

念の為ですが、
kenokabe@gmail.com
までおねがいします。

本書の目次(構成)

Day1 それは「関数型プログラミング」という新しい世界の幕開けだった

ラブ・ストーリーは突然に
0から9までの数をすべて足すコードを書け
フローは複雑でバグの元凶
フローは不要
フローを書かず論理をそのままコードに書き写せ
『神の眼』のスキル レベル0
『神の眼』を得るための唯一の方法
関数 / function という論理操作
関数は論理の最小単位の部品として最上の扱いを受ける
問題の論理には結果など含まれていない
手順を分割するな、論理を分割せよ
『まとまり』は美しい単一の論理構造
『まとまり』をまるごと処理ができる関数
他の関数を取り扱う能力をもつ関数
高階関数の柔軟性
論理の最小単位としての関数のちから
これからの数日間

Day2 『論理世界』と『物質世界』の狭間を見据える 『神の眼』レベル1

カメレオンガール
『関数型プログラミング』のおさらいをする
0から9までの数をすべて足すコードを書け
0から999までの数をすべて足すコードを書け
『神の眼』のスキル レベル0の限界に到達
『神の眼』を得るための唯一の方法 もういちど
電卓(Calculator)という電子計算機=コンピュータ
計算の手順を並べるコード 命令型プログラミングのコード
命令型プログラミングのコードは『マシン操作手順書』であり『フローは不要』のフローそのもの
計算の命令ではなく論理を並べるコード
『フローのない論理の宣言書』である宣言型のコード『宣言型プログラミング』
関数型プログラミングをやっていけば自動的に宣言型プログラミングになっていく
『神の眼』のコードは宣言型のコード
論理と計算の関係への疑問 ソクラテスの『無知の知』
『論理』と『計算』は別物 『論理』は人間とは関係なくただそこにある存在、それを人間が明らかにする行為が『計算』
『計算』とは『論理』の物質化、ハードウェアモード
『論理世界』と『物質世界』を見据える 『神の眼』
『物質世界』密着型の命令型プログラミングという原始的パラダイム
『論理世界』密着型の宣言型プログラミング
命令型のコードでしか動かせないはずのハードウェアが、なぜ宣言型のコードで動くのか?
『車輪の再発明』をするな
プログラミング言語の進化
JavaScriptが関数型プログラミング言語である理由と再評価された経緯
プログラミングの未来
技術的特異点 『シンギュラリティ』
紅茶の時間
今から『車輪の再発明』をしよう Back to ハードウェアモード
0から9までの数をすべて足すコードを書け reduceの再発明
偶数10個を求めよ mapの再発明
関数を合成してみる
合成関数を生成する関数 composeの再発明
『まとまり』生成関数 rangeの再発明
0から9までの数をすべて足すコードを書け
0から999までの数をすべて足すコードを書け
『神の眼』のスキル レベル1 
『まとまり』という論理構造をまるごと操作する関数ライブラリは、『神の眼』が見透す、宣言型のコードを書くために必須の関数@ハードウェアモード大全集
大事なことなのでレベル1の内容をまとめておく
『明日』という輝く未来

Day3 論理を世界の中心に据える世界観 世界のすべてを見透す 『神の眼』レベル2

イパネマの娘
三種の神器
JavaScriptのサーバサイド技術 Node.js (io.js)
io.js
『神の眼』レベル1のおさらい
命令型のコードは『フロー』で駆動する『フロー駆動』
宣言型のコードは『イベント』で駆動する『イベント駆動』
『イベント』とは時間軸上の、ある時間における出来事(イベント)
時間のフロー(流れ)が宣言型のコードを駆動する イベント駆動は、時間フロー駆動
0から9まで1ずつ増える数をすべて表示せよ
『インクリメント』は『計算』であって『論理』ではない
宣言型のコードは問題の論理のみを扱い、計算結果は扱わない 問題の論理には結果など含まれていない
論理を破壊する代入『破壊的代入』
命令型プログラミングのコードの上下左右に、同じ変数が異なる時間をもって異なる値で存在している混乱
宣言型プログラミングは参照透過である
破壊的代入する命令は、関数にする
命令前後の時間で値を変化させていくのではなく、同時に値の複数バージョンをもつ『まとまり』の論理構造を宣言し、まとめて操作する
計算や入出力の命令というハードウェアモードのマシン操作は論理の物質化だが、関数でラッピングしてふたたび論理化せよ
関数による『副作用』とは?
『副作用』NGなのは、関数がもはや自由自在にとりまわせる独立した部品ではなくなると同時に外界を変化させ参照透過でなくすから
『参照透過』と一緒に覚えておきたいワード『イミュータブル』
『神の眼』が見透す、限りなく透明でクリアな世界 宣言型のコードはイミュータブルで見透しが良い参照透過な論理の世界
論理≠計算『必要な時に必要な分だけ計算する方法』
論理=計算『手当たり次第の計算方法』
JavaScriptの計算方法=『手当たり次第の計算方法』+『必要な時に必要な分だけ計算する方法』
JavaScript は根本では、『論理』と『計算』が一緒くたになった『手当たり次第の計算方法』
もしもJavaScriptが『必要な時に必要な分だけ計算する方法』で全部やる言語であったならば?『論理』と『計算』の完全なる分離
十分な休息と栄養が必要
今日のこれまでの復習
0から9までの数をすべて足すコードを書け
『手当たり次第の計算方法』は『必要な時に必要な分だけ計算する方法』より考え方に大きな制限がある
『神の眼』のスキル レベル1の限界に到達
『物質世界』は『論理世界』の影のような存在にすぎない
ソクラテスの弟子プラトンによる『イデア論』
ピタゴラス学派『論理』が万物の根源であり世界の中心である 『イデア』
『ない』と『無限』というイデアは特殊
『物質世界』密着型の命令型プログラミングの『手当たり次第の計算方法』では、コードにすべての『イデア』は表現できない
『論理世界』密着型の宣言型プログラミングの『必要な時に必要な分だけ計算する方法』では、コードにすべての『イデア』が表現できる
JavaScriptで『関数』のみならず、『まとまり』にも『必要な時に必要な分だけ計算する方法』を適用してやる
Facebook発の関数ライブラリ Immutable.js
AtomエディタとNode.jsでやってみる
自然数という無限数列をつくる
フィボナッチ数列という無限数列をつくる 黄金比の数列
『必要な時に必要な分だけ計算する方法』で使うメモ化
自分で自分自身を抱え込む関数 再帰関数
再帰関数をメモ化する
『神の眼』のスキル レベル2
7月のプラネタリウム
ピタゴラス学派の『地動説』
アリストテレスの『天動説』
ガリレオ・ガリレイは、アリストテレスの『天動説』をひっくり返そうとした
『美しい未来』への招待

Day4 神はあまねく存在する 『神の眼』レベル3【最終レベル】

ブレーメンの音楽隊
『神の眼』レベル2のおさらい
バウムクーヘンと『地動説』と『天動説』
ピタゴラス学派の『地動説』
アリストテレスの『天動説』
『考え方』『ものの見方』を重視した偉人、アラン・ケイとスティーブ・ジョブズ
『ユーザ』を重要視し『グラフィカルユーザインターフェース』を発明した、パーソナルコンピューティングの父 アラン・ケイ 
『Think different』 稀代のビジョナリー スティーブ・ジョブズ
『Think different』『ものの見方を変える事はIQ80ポイントに匹敵する。』
デスクトップ上のアイコンは『オブジェクト』という『物質』であり『計算機』
アラン・ケイによるオブジェクト指向『論理は物質の手足である』メッセージング
アラン・ケイの宇宙観 『自由意志』が宇宙に命令する
超合理的に疑い続けた結果、『精神世界』を発見したデカルト 『精神』『物質』『論理』の三元論
『精神』『物質』『論理』の3つを『論理』へ一元化し『自由意志』を否定したスピノザの決定論的宇宙 神はあまねく存在する『汎神論』 
自由意志と決定論的宇宙『神はサイコロを振らない』 アインシュタイン
スピノザの『汎神論』と仏教の『空の思想』
『神の眼』のスキルの『神』は『スピノザの神』
『必要な時に必要な分だけ計算する方法』で『状態を保持しない』『参照透過』な『論理が物質を支配する』『論理中心主義』の関数型プログラミング
『あらかじめ計算して物質化したまま状態を保持する方法』で『論理は物質の手足である』『物質中心主義』のオブジェクト指向
オブジェクト指向の三元論であるMVC
アラン・ケイという権威とオブジェクト指向、MVCモデルというドグマ(教条)
『神の眼』のスキル レベル2の限界に到達 最終レベル・パラダイムシフトへ
部活動は一旦休憩にしてランチ
『フロー』の分離『スレッド』
マルチスレッドと問題点
関数型プログラミング、宣言のコードはシングルスレッド
シングルスレッドのイベント駆動のサーバサイド技術 Node.js (io.js)
Node.jsサーバの『車輪の再発明』
非同期処理とは、宣言型のイベント駆動
同期処理とは、命令型のフロー駆動
関数型クラウドコンピューティング AmazonWebService Lambda 次世代クラウドコンピューティングの新しい潮流
関数型プログラミングとUI(ユーザインターフェイス)
『論理世界』に『物質世界』のUIが追随するアプリは身近にある! 表計算アプリ
『物質世界』全部まるごとひとつの『まとまり』にしてバージョンナンバーをつけたら?それは『時刻』になる
表計算アプリのA1…..B1…..は、すべて同じ『時刻』という世界のバージョンナンバーを共有しているイミュータブルなデータ
あなたもわたしも世界の一部だから『時刻』という世界のバージョンナンバーを共有している
コードを観る眼の世界観
『あなたの意識』も『時間フロー』で一緒に時間軸上で遷移していくから、時計が動いて見える
『今』という『意識』とセットの時間軸上のイミュータブルなデータ 世界のすべてはイミュータブル
時間軸上の『まとまり』についてまとめて操作する関数のほんとうの正体
『神の眼』の視点で俯瞰する、静止した『物質世界』と『精神世界』
『論理中心主義』の世界観で表計算アプリを書く
表計算アプリ index.html
表計算アプリ index.js
『神の眼』のスキル 全能レベル 関数型リアクティブ・プログラミング(FRP)
ティーポットが空
必要な時に必要な分だけ計算される『まとまり』や『部品』のことを『コンポーネント』と呼ぶ
オブジェクト=あらかじめ計算して物質化した『状態』を保持し、外部に命令するミュータブルな計算機 命令型
コンポーネント=必要な時に必要な分だけ計算されるイミュータブルな論理構造 宣言型
FRPのUI設計は、『オブジェクト』で命令するのではなく、『コンポーネント』で論理的に宣言し、合成して組み上げる
Webページのドキュメントを記述するHTMLのツリー構造
DOMというWeb世界標準のAPI これまでWebは、命令型の『オブジェクト』をUIの標準モデルとしてきた 
UI『オブジェクト』モデルの『コンポーネント』化する技術、仮想DOM(Virtual DOM)
次世代Web世界標準 Facebook-React
Why React? なんでそんなことをFacebookが試みたのか?
Facebookの技術者はMVCというオブジェクト三元論のモデルを否定し、DOMという『物質』を、コンポーネントという『論理』の影に追いやり、『論理』への一元化を試みた
5分くらいは考えろ Give It Five Minutes
Reactの方針を公式サイトで確認する
jQueryはもう使わない
Hello John A Simple Component
Reactでは、HTML/XMLタグがJavaScriptコードに混在する
複数のコンポーネントを合成(compose)して使う
時間軸上でイミュータブルなReactのタイマー
render
componentDidMount
tickのsetState 時間軸上のイミュータブルなバージョン操作
getInitialState
componentWillUnmount
FRPはGUIだけではない
『物質世界』で時間遷移する『まとまり』のバージョンナンバーは『時刻』である
Reactは、時間軸上に偏在する『コンポーネント』のあらゆるバージョンの内たったひとつのBeforeAfterの論理関係のみを宣言している
『過去』『現在』『未来』、時間軸上の『全部』のバージョンを扱う
timecomponent タイムコンポーネントで時間軸上の全部のバージョンを扱う
timecomponent タイムコンポーネントでFRP
timecomponent タイムコンポーネントで過去にアクセスし、1秒前の過去をリアルタイム再生する
timecomponent タイムコンポーネントの合成 イベントの合成 マウスドラッグのイベント
『神の眼』のスキル
メキシカン
明日は学校

Day5 『今』が大事

Sunchyme(サンシャイム)
関数型プログラミングとオブジェクト指向プログラミングの関係性
関数型プログラミングに『マルチパラダイム』みたいなものは存在しない
関数型プログラミングでオブジェクトを作る仕組み クロージャ
FRPの関数ライブラリ
Atom Shellでデスクトップアプリ
海へ行こう

0 コメント:

コメントを投稿

Popular Posts