
10年掛かって多分、世界トップ水準のプログラミング本が書けたと思う
理由は、同じ内容のものがあったら読みたかったが存在しなかったから。
10年前からだいたい2年置きくらいに出してる自分のドキュメント(本)を振り返ると、やはり相当アラが目立つ。
我ながらさすがに10年も続けると進歩もするなと感じる、その一方で、逆に今の知見は、たかだか今回自分が書き上げた本程度で得られるものであり、なぜ10年もかかったのか?とも不思議に思わざるをえない。
もちろん知見の至らなさが根本原因なのだが、その知見の至らなさを補う過程の10年間の進歩の源泉は自分自身の研究がほとんどだと思う。
ネットに転がっているプログラミング記事では、少なくとも関数型プログラミングで理解のブレイクスルーが起きた!と感銘を受けた記憶がひとつもない。
これはおそらく、巷のそういう記事を書いている著者自身が本当はよくわかってないのだろうと思う。よくわかってないなりに、参照透過性だの副作用だのわかったようでわかっていない用語を振り回して、それに依存して誤魔化している。
わかってない概念をわかってない用語で説明する。これが関数型プログラミング界隈で普通に行われていることだ。最近はだいぶマシになったなと感じるのだが、英語版のWikipediaでもこれは酷かったし、日本語版は輪をかけて酷かった。
ネット記事だけでなく、いろいろO'Reilly'sの本やらをサブスク利用して読んでもみたが、全く納得のいかないものばかりだった。
今思い出したが、いちばんわけがわからなかったのは、コレ
「この本のおかげでHaskellは入門しやすくなった」みたいにネットでやたら持ち上げられていた。ホントかよ?と。原書は無料で公開されていたのですぐ読んだけどわけわからず、めずらしく和訳の電子書籍を買っても読んでみたが、まったく勉強にならなかった。
これでHaskellがわかるようになったとか、書けるようになったとか本当なのか?信じられない。
はじめて読んだ当時でも、そこそこHaskellのコードは書いていたのだが、それでもこの本はよくわからなかったし、こう書きながら今、その原書をざっと眺めているが、あらためて眺めても、やはりただコードが漫然と並んでいるようにしか見えない。
必要なのは図でありグラフだ。図とグラフを描いて掲載するのは面倒くさい。皆コードがあるからわかるでしょ?的なノリが通用すると思ってる著者ばかりだが、このノリで納得して、よくわかりました!と褒めてくれる読者、初学者って何%くらい存在するのだろうか?
これはまるで過去の自分の仕事を見るようで痛感する。図を描くのが大変なので渋っていた。わかってるのは自分の頭の中だけで、いくらそれを反映したコードを貼り付けようと、読者が見るのはその貼り付けられた結果のコードの文字列だけで、そこから書き手の頭の中にあったであろう概念図を再構築するのはまず無理だろう。
別にすでに習熟しており、特定のテーマのコードでこういうコードが書けます、別のアプローチではこう書けました、というのであればそれはもちろん通用するが、新しい概念を説明するときにコードで、というのは結構わけのわからない作法で、これがプログラミング世界で蔓延している。
今回自分は図を描きまくった。良いドローツールを見つけてモチベーションもあがり、作業しやすかったからだが、それでもめちゃくちゃ手間と時間がかかった。しかし、その仕事が一番、芯を食った誠実な仕事だと確信していた。
たとえばこういう図を作成した

これはFunctorとMonadの成り立ちを理解するために必須となる図ではあるが、こういう図はこの10年間見たことがない。絶賛されている「すごいHaskell楽しく学ぼう」は、数学的概念とまるで関係ないどうでもいいイラストばかりで、図はほぼ皆無であると言って差し支えないレベルだ。Monadがわかるとか言われていたが、本当なのか??
たとえばこういう図を作成した

こういうのが10年前からあれば、どれだけすんなりと理解できただろうか?と思うが、少なくとも自分は見たことがない。
コードや数式がダーーっと列挙しているのは見る。ただそれが図に描き起こされていない。理由は面倒だからだろう。
「箱で考えるFunctor、ApplicativeそしてMonad」という、なにか多言語で翻訳されているような有名なドキュメントもある。
今見ても、結構つらいものがある。思うのだけど、数学概念を、ゴミ箱みたいなものとかバキュームとか箱から手で取り出すとか、過度な具体化をしたらわかりやすくなる、とか、そういうことじゃないとは思うが、そういうことをされたら「わかったつもりになれる」人らはおそらく多いのだろうと思う。
「すごいHaskell楽しく学ぼう」もあれは、まったく理解の助けにならない無関係なイラストがやたら多いのが高評価の理由なんじゃないだろうか。概念、コードとまるで関係ないイラストでもあればなんかわかったような気になれる。
なぜ普通に図を描いてくれないのだろう?
少なくとも、関数型プログラミングの解説界隈は惨憺たる状況で、それは10年前よりさほど変化していないか、せいぜい多少はマシになっているかも?レベルだ。
かような考察をもって、今回の自分の仕事は彼らがやらかしていることよりはかなりマシだ、と思えるので、表題のような大風呂敷を自信をもって広げた次第である。
あと、久しぶりにNote投稿したけど、Editorがかなりマシになっているね。
そういえば、自分は、今回の執筆をMarkdownで書いてGitHubにあげようと思ったわけだが、その1つに、GitHubがようやく数式対応、Mathjaxが使えるようになったことが大きい。
既存のMarkdownエディタはどれも辛かったので、リスクを承知でVSCodeのエクステンションを自分で開発した。
これも公開できるレベルになるまでは随分と手間暇もかかったが、作業期間が半年くらいで、今から2ヶ月前にリリースした。
現状、まったく周知されていないが、モノは良いので伝われば何かのきっかけで広まる可能性はある。