Jenkins目当てで購入したWEB+DB PRESS Vol.67でしたが、「関数プログラミング」という入門記事もありました。これが読んでみたら面白かった。
「筆者はLispは関数型プログラミング言語には含めていない」といったことが書いてあったりしますが、このあたりは定義の問題なので良いとして、内容が面白かったです。関数型プログラミング言語のどんなところがありがたいのか、ということについて、わかりやすく書いてありました。
読んでいて思い出したのですが、関数型プログラミング言語のプログラム開発においては、「プログラムの仕様は式で表現する」ということになります。関数型プログラミング言語の敷居が高い理由は、「仕様を式で表現することができるようになるには意外と難しい」ということだと自分は考えています。いくつかの例を見て真似ることができると、できるようになっていくのだと思いますが、そういう良い例を紹介する書籍が少ないというのがScalaやHaskellがブレイクしない理由なのかもしれません。本書では、いくつかの実例プログラムを通して、どうやってプログラム仕様を式で表現するのか、について理解できるようになっているので、いままでよくわからなかった人でも短時間で関数型プログラミング言語の面白さに気づけるかもしれません。
CSVのパーサコンビネータも例題としてありますが、プログラムの仕様は式で表現するということを理解できていれば、BNF記法による式で表現できるパーサと関数型プログラミング言語とは相性が良さそうだ、ということは想像がつくはずです。式で再帰的に構成を定義できるリストやツリーといったデータ構造についても、関数型プログラミング言語とは相性が良いということもわかるでしょう。読んでみて、初心者への導入には、そういったところから紹介していくのが良いのかもしれないと考えました。
適用する処理の書きやすさや、拡張性の確保には関数型プログラミング言語は強力です。一方、わかりやすいデータ構造を表現するにはオブジェクト指向の方が有利です。両方を適材適所で扱えるようにするには、Scalaのようなハイブリッドな言語が良いのですが、ハイブリッドなプログラミング言語は要求されるスキルも高くなるので、どうしてもとっつきにくくなります。これを解決して敷居を低くするためには、「関数プログラミング」の記事のように、あるエッセンスを抜き出して、関数型プログラミング言語の価値について深く説明をするというのは、ひとつの方法だと思いました。
興味を持った人は読んでみてください。