函数プログラミング再入門にあたって

どうして再入門なの?

これまではどちらかというと自分の業務の一部である事務作業の一環として、PythonやCL(CommonLisp)でExcelファイルやCSVファイルをいじってきたけれど、4月から無職になり、たぶん今後は事務をするような業務に就くことはできないだろうと思われるので、自分の特性に合ったやり方で、仕事に関係なく成果物を作っていった方がいいと思ったからだ。

それに何か学ぶということや、何か育てる(ソフトウェアは育てるモノだと思ってる)って、いつまでもウジウジしないで、前向きになれるきっかけになるからね。それが関心のあることならなおさら。

特性と函数プログラミング

私自身、妙な特性がある。それは一見関係ない事柄やモノの共通点を見いだすことや、それらを関連付けることで問題解決したりすることが子どもの頃からとても好きだったし、得意だった。過去、実務に役に立つこともあったし、そうでないように思われることもあったけれど。 また単純な業務でのどうすれば効率あがるのかとかを考えて、工夫して、やってみる過程を愉しむ変わり者です。 前述したうちの「共通点を見いだすこと」や「関連付け」って、実は「抽象化」のことだって、最近になって知った。己自身ではこの特性をうまく端的に説明できなかったので、今更ながら目からうろこだ。

函数プログラミングはその抽象化が一番の肝だと思う。 ほんとの函数プログラミングの強みは「それは何であるのか?」とか「これとそれはこういう関係だよ」とかを上手く表現できる点にあると思うし、データを作りやすい。これはPythonなどで気にするような「何をどうしてこうするのか?」とは大きく違うところだ。 もちろん函数プログラミングとはいえ、手続き的な部分だってあるのは知ってるけれどね。 それに私はけっこうおっちょこちょいだ。型システムがしっかりして厳密な方がありがたい。また幸いにもREPL環境がある処理系が多いため、ボトムアップに組み立てていけるのが強みだ。

だからこそ、函数プログラミングにのめり込んでみようと思ったのだ。

ほどいいテキストが増えてきた

「変数は変更できない」とか「ループではなく再帰」とか「モナド」とか「高階」とか...。 難しい数学的概念もあるけれど、それはそれだ。数学的概念は研究者にまかせておけばいい。 私がしたい・やりたいのは「何を上手く作れるか?」、「楽に作れる」こと。

函数プログラミング言語の代表といえば、Haskellだけど、以前はある程度「用語についていける」とか、小難しい数学的素養がないと読めなかったり、「他言語経験者」をターゲットにしてる書籍が多かったように思う。有名な「 すごいHaskellたのしく学ぼう! 」はわかりやすくはあるが、ペースが速く例題的なものも多くはないから、プログラミング初学者や函数プログラミングが初めての人にはそれほど向いているように思えない。

最近、英文だけど初学者向け・再入門向けのよいテキストをいくつか見つけたのでご紹介しておく。

HaskellBook [Haskell Programming - Home] 細かく手とり足とり丁寧にGHCi使って説明している。例題や考えてみよう的な例がたくさんある。 まだ未完の模様。

Happy Learn Haskell Tutorial [Happy Learn Haskell Tutorial] 函数をパズルのピースのように捉えて図解して説明している。概念的にもわかりやすいが未完。

Haskell Cookbook 基本的なことはもちろん、Stackの使い方や中級程度のことまで。「あれ?これって?」って思う時にも使える。

さて時間がある今のうちに...。