😊

コードモンキーが圏論を勉強して何が嬉しいのか

2023/11/08に公開

関数型プログラミングの勉強をしているとモナドという概念が度々登場する。
圏論という数学分野の概念らしく、何回か勉強してみるものの、やはりよく分からない。

値のコンテナのようなもので、メソッドチェーンを利用した柔軟な関数合成ができて、jQueryとかPromiseみたいな感じで云々。
圏論なんて知らなくても、jQueryもPromiseも使いこなせるわけで、これはなんだ、インテリのお遊びか?
勉強して何ができるようになるのかすら分からない。
なんだけど、この厨二な響きがなんかカッコいい。

圏論を学ぶ意義についてAmazonや図書館やYouTubeを漁った内容をまとめてみる。

書籍

圏論の歩き方

座談会形式で圏論について語る柔らかめの本。
数学的な説明は割と蛋白で、これだけじゃ理解が難しい。
圏論のさまざまな分野での応用について書かれていて、もちろん計算機科学についても紹介されている。

https://amzn.to/3QNRnJn

何かの応用のために圏論を使っているような, いわば圏論のユーザーな訳ですよね. 何故使うのかな?
(中略)
異なる分野を関連づけるために使う抽象化の言語, というのが一番大きいんじゃないかなあ.

研究者目線の話で、職業プログラマーとしてはメリットに感じないなぁ。

システムの振る舞いの記述が, システムの種類や, どのプログラミング言語・モデリング言語を使うか, という個別事情によらない形でできます.

プログラムを数学的に表現しやすくなるということか。

プログラム意味論

関数型プログラミングを勉強していると、「表示的意味論」という単語に出くわすことがある。
表示的意味論って何だろうというのをちゃんと知りたくて買った本。そして積読になっている本。

圏論についてはあまり紙面が割かれておらず必要最低限のみ。

https://amzn.to/47Gadbl

プログラムの意味論の数学的構造をより統一的に理解する上で, カテゴリ理論が役に立つ.

とりあえず、表示的意味論と関連がありそうなことは分かった。

圏論

教科書。練習問題なども付いていて、きちんと学習するには便利そう。
内容としては圏論の数学的な説明に留まり、応用については書かれていない。

https://amzn.to/47pJ77R

JavaScript徹底攻略 関数

JavaScriptでの実装例まで載っていて、プログラマーには分かりやすい内容になっている。
ここで挙げた中ではこれが一番頭に入ってきた。

https://booth.pm/ja/items/4435258

圏論は,関数のようなもの一般を扱うための道具である。数学においてその応用は関数のみならず,まさに抽象化された「関数のような性質」をもつあらゆるものに及んでいる。

しかし,圏論は JavaScript プログラマにとって,何か具体的な価値を求めるのは難しいように思える。 世の中には,こういうことを考えている人もいるんだ,程度に思うのがよいだろう。

YouTube

世界一やさしい圏論勉強会

わかりやすい。
何回か見直せば分かった気になれそう。

質問者と登壇者の対話のレベルがいろんな意味で高い。

https://www.youtube.com/watch?v=PCU8QWXykCc

プログラマのためのモナド入門 稲見 泰宏 | プログラマのためのモナド入門

展開が早くて、途中から「ファッ!? 」ってなる。
「圏論というのは外へ外へと考えて、外に矢印を持ってくる」という考え方が、はっとさせられた。

https://www.youtube.com/watch?v=fhuAlDPgi2Q

結論

結局、すぐに実務に活用できるツールが手に入るということではないように思える。
モナドの仕組みを理解することで、設計の基礎力が身に付いたり、より厳密な実装が可能となる、といったところか。

やっぱり積読は、まだ積んどく。

Discussion