2016年6月27日月曜日

職業プログラマが圏論をスルーすべき理由

このエントリーをはてなブックマークに追加
Clip to Evernote
Pocket

情報系の大学の学部を出た人々が増えたせいか、HaskellやScalaなどの関数型プログラミング言語が流行ってきて、最近はクライスリ圏、モナド、モナドと呟く人々をネット上でよく見かけるようになった。圏論プログラミングなるモノが流行っていると勘違いしだす人もいるようだ。しかし、これらの言語に触れた人は少なくないと思うが、圏論について学んだ職業プログラマーは少ないと思う。これから学ぶべきなのか気になっている人もいると思うが、実際問題使い道が無いので、スルーした方が無難だ。

圏論は数学の中でも広く教えているとは言えない部類のもので、20世紀も中盤以降に研究が進んできたものだ。圏論の土台部分はシンプルなもので、目的に応じて概念を追加して応用されており、例えばHaskellのモナドはクライスリ圏の中の概念であるクライスリトリプルに対応している。だからクライスリ圏に習熟していれば、数学的にモナドによるプログラミングを解析するのに重宝する。プログラミング言語の意味論を使って、論理的な厳密性を評価するのに都合が良い。並列システムの研究などにも使いやすいようだ。

もっとも職業プログラマがクライスリ圏を学ぶべきかと言うと、そうとも言えない。三つは問題が出てくる。

  1. モナドを中心にしたプログラミング言語、つまりHaskellを業務で使う可能性は低い。TIOBE Index for June 2016を見るとHaskellは39位であり、The RedMonk Programming Language Rankingsでも15位である。非関数型プログラミング言語にはモナドなど出てこないので、使いようが無い。RxやSpracheなどの圏論を意識しているらしいパーサーコンビネーターを使う機会も限られるであろう。マクロをつけろって言われたらECMAScriptを使うのが楽だ。
  2. Haskellや一部のパーサーコンビネーターを使う機会があったとして、クライスリトリプルを理解してからモナドを学ぶ事にメリットがあるとは限らない。プログラミングと数学に対応関係があることが分かったとして、数学をツールとして使わなければ有り難味が出ない。理解度が深まると言う話もあるが、学習量が桁違いに増えるので効率が高まるとは限らない。そもそもモナドの使い方自体が難解と言うわけでもない。
  3. 圏論自体がそう学びやすいものではなく、「圏論の歩き方」が出てきて雰囲気は掴みやすくなったが、まだ手ごろな日本語テキストさえ無い状態。大学の講義などが充実してきたので、検索すれば配布資料に遭遇しやすくはなったが、やはり英文テキストを読み込む必要がある。なぜか無料で配られているCategory Theory for Computing Scienceがあるので、英語に抵抗が無ければ時間以外の学習コストは低いとは言えるが。なお、515ページある。

カルテジアン閉圏でも同様で、型付ラムダ計算の意味論を理解しなくても、ラムダ計算の扱いに困る事はほとんど無いと思われる。ラムダ式自体は、汎用的なプログラミング言語で多く採用されるようになってきているが*1

勧めてくる人もいると思うが、どの教材をどこまで学習すれば、どういう御利益があるのかは、よくよく聞いた方が良いと思う。Haskellもそう盛り上がっているわけではないが、一定数の検索はある状態が続いている。しかし、クライスリ圏もしくは Kleisli categoryで検索の人気度を調べたら「検索ボリュームが十分でないためグラフを表示できません」と出てくる。かなり遠い周辺知識だと捉える方が良いであろう。

そのうち流行ってくるのかも知れないが、そのときはそのときに学習を始めた方が、教材なども多くて楽が出来ると思う。

*1それでもC#のselectManyやLispやRのapply程度では不要であろう。圏論を知っていないと書けないコードが示せるのであれば、示して欲しい。

0 コメント:

コメントを投稿