関数型プログラミングのイントロダクションを日本語訳した話
概要
TypeScript の関数型プログラミング用ライブラリ、fp-ts を使って関数型プログラミングの概念を紹介する repo YiCChi/functional-programming の日本語訳に contribution しました。
同 repo は英語版の enricopolanski/functional-programming の翻訳であり、これはさらに gcanti/functional-programming の英訳です。ややこしいね。
想定読者
関数型プログラミングというものを色々調べてみて、個々の概念とか用語とかはある程度学んでみたものの、体系的な知識がなくて困った、という人にはピッタリだと思います。
もちろんゼロベースで読んでも理解できるように構成はされてますが、学術的に厳密な記述がされた文章を読み慣れていない & 関数型プログラミングに関する基本的な概念の理解がない、という状態だと結構苦しいと思います。
なので、そういった方がまず足掛かりとしてあると嬉しい知識について書いてみます。
読むためにあると嬉しい知識群
出てくる概念で事前にちょっとぐらい調べくといいのは、
- プログラミング関連
- 副作用
- 参照透過性
- 代数的データ型
- 直和型
- 直積型
- 数学関連
- 集合論
- 関数
- 全順序
- 群論
- マグマ
- 閉性
- 半群
- 結合法則
- モノイド
- 単位元
- マグマ
- 圏論
- 関手
- モナド
- 集合論
もっとも、これらの知識を入れるために読むんだろ、と言われたらそれはそうなんですけどね……
そうは言っても、やはり前提知識無しに文章を読んだだけでこの知識ツリーみたいなのを脳内で一発で構築するのは難しいという方も多いのではないでしょうか。
のっぺりとした概念の羅列と認識するより、こうした階層というか、分類がされているだけでも理解までの速度が変わってくるのではないかなと思います。
一応、順序としても上から順に見ていくとわかりやすいように配置したつもりです。
また、十分に経験のあるプログラマの場合、その概念に名前ついてたんだ、とか、その概念って数学から来てたんだ、とかの気づきによって、単語の理解をショートカットできる場合もあります。
私自身 reduction による並列処理を先に知ってて、後から半群・モノイドを知って、ほーんとなった経緯があります。
ただし、これはあくまで数学教育をまともに受けたことのない、一文系出身プログラマとしての私の所感なので、多くのプログラマに共感して貰えるかと言うと、そうでもない気もします。わからん。