関数プログラミング実践入門という本を書きました

是非手に取ってみて下さい.よろしくおねがいします.

AgdaとかHaskell Golfの本ではない.いいね?

どのような本?

これまで何らかの命令型言語に触れてきた人が「なにかと耳にするし,そろそろ関数プログラミングでも」と思いたったとき,その基本的な部分を押さえるための本です.関数型言語としてはHaskellをとりあげ,またHaskellを使っていくための説明を進めていきます.関数プログラミングからプログラミングに入る人はプログラミングに対する先入観が無いのでともかくとして,既に命令型言語の経験がある人の場合,関数プログラミングの考え方や関数型言語そのものにはなかなか慣れないものです.

関数プログラミング関数型言語周辺はどうも壁にぶつかり易く,その上何枚も何枚もあるようです.ひとりでの学習は辛いことがあるでしょう*1.この種の学習で一番高効率で手っ取り早いのは「知ってる人にたずねる」ことだと思います.しかし,どんなジャンルでもそうなのですが,最低限ある程度の素養は身に付けないと,誰が「知ってそうな人」なのかも判断できません*2.また,知ってそうな人から効率良く知識や考え方を受け取るためのコミュニケーションにも,共通基盤としての素養があるなしで大分状況が変わってきます.それっぽい勉強会に顔を出しても,そこでの会話内容が何を言っているのかあまりにも理解できないとそれだけでおうちにかえりたくなりますね.

関数プログラミングに関する書籍,特にHaskellに関する入門書は,良書が既に出版されています.そのような中で本書は,上記のような関数プログラミングHaskellに関する基本の習得に加え,他言語との比較とか設計法・考え方,実用するためのパッケージ管理といった点を重視する立ち位置で執筆しています.特定の問題設定に対しある言語でのアプローチとHaskellでのアプローチがどうなっているかを比較することで特徴*3を明確にしたり,特徴を別の言語に取り入れてみるとどうなるか見てみたり,関数プログラミングっぽい思考・設計方法を使って数独を解いたり,論理パズルを安全に解かせるためのインターフェースデザインを示してみたりします.

Haskellのサンプルコードは現時点最新のHaskell Platform 2014.2.0.0を想定して書かれていますが,基礎的な部分のみなので先々のバージョンアップで動かなくなるようなことも無いと思います.

一方,一部の関数プログラマが好むような高度な数学とか難しい運算*4とかは出てきません.が,そういう一定以上の知識を既に所有している人にとっても最後の2章分については得るところもあると思います.

経緯と執筆中のアレコレ

2013年の7月も終わりの頃,本書の企画と執筆依頼が来て.思わず二度見する.最初執筆依頼と目にしたときは,もしやHaskell Golfについて?と思ったが,関数プログラミングについての入門とのこと

顔合わせと詳しい話を聞くため編集さんとのミーティング.実はこの時点では受けるか半々くらいの気持ちだった.きっかけとしては,どうも孤独のHaskell - ぼくのぬまち 出張版shinhさんが取り上げたのを目にして声を掛けてくれたとのこと.この経路でなおGolfネタじゃないんだなぁとしみじみした.何を重視するどんな本にするかといった内容をおおまかに詰め,2013/8月から大体1年間になる執筆期間に突入

最初に章・節レベル構成を決めて各章にどのくらい期間を取るかマイルストーンを置く,結果として執筆は概ねオンスケジュールだったと思う

執筆中に,「プログラマのためのコードパズル ~JavaScriptで挑むコードゴルフとアルゴリズム」という書籍が技術評論社から出てて,Golfネタやってるんじゃんと脳内観客が全ツッコミ

新しい Haskell Platform がなかなかリリースされずにヤキモキする.結局1年以上リリースされず,2014/8月にやっと Haskell Platform 2014.2.0.0 が出たのでコード修正と動作確認.

執筆はbitbucketにリポジトリ作ってmarkdownにて行う.styファイルなどがあるならTeXがいいなと思ってたけど,このシリーズの組版や図の清書は出版社側の仕事らしくstyファイルなども特に無かった模様.これのせいというわけでもないけど,感覚がつかめず当初の予定より執筆分量をだいぶ間違えた.

2014/10月前半あたりで著者校正.DPT-S1大活躍.A4対応な画面の大きさと,宙には浮かないものの軽量な本体重量,電子ペーパーならではの電池持ち,移動中の赤入れがメッチャ捗る

感想

本当に小学生並な言い回しになっちゃうけど,やっぱり本が出るまでって大変なんだなぁというのが第一.編集さんにもだいぶ負担かけてしまったと思う*5

とにかく書籍が出るってこと自体が相当な社会的・文化的基盤に支えられてる行為で,特に専門書は関連書籍の多さが分野・コミュニティの強さや世間的な関心に直結してる.なんだかんだ言って数の力はシンプルかつ強大で,たとえば開発プロジェクトでどの言語を選択するかといった点にもある程度は影響する.数字が大きいことはそれだけでピックアップされる対象になる.そういう面があるから,ある分野が好きなだけではその人にとって幸せな世界はあまり作れない.やっぱりシーンを盛り上げるような各種ムーブやある種の政治力みたいなものも必要になってくる.将を欲っすればまず馬じゃないけど書を欲っすればそれによりウマーと思う人間を増やさないといけない.裾野が広ければこそ頂点もまた安定して高くなっていける余地が生まれる.

この点,気のせいかもしれないけれど,関数プログラミング界隈ってまだ他と比べて裾野が狭いまま頂点のほうは妙に高いとこにある気がする.コミュニティとしては細く削った鋭いエンピツのような歪な構成をしてるように見える.特にHaskell界隈は原理主義者っぽい人も多いし,わかんないこと調べるとすぐに論文に案内されるハーコーっぷりもキツいよね.ニュービーに優しいコンテンツじゃないと良い循環にならないし,実用のためのプラクティスを積んで共有して広めていかないと働き口も思うように増えない.

今更何を当然なことをと思われるかもしれないけれど,それでも感想としてこういうことを記しておきたいと思う.

*1:Agdaつらいんですけど.

*2:最近だとtwitterとかブログで疑問投げておけば解説に自信ニキが教えてくれたりもしますが

*3:優劣という意味ではなく

*4:そういうの求めてる人は同時期発売の「関数プログラミング 珠玉のアルゴリズムデザイン」が歯応えあっていいんじゃないかな?

*5:ありがとうございました