あけました

あけました。今年は喪中なのでおめでとうとは言わずに普通です。本年もよろしくお願いします。

年末は30まで仕事の予定だったんだけど、なんかいろいろめんどくさくなって30を有給で休みにして9連休にした。やることはいろいろありすぎるんだけど、だいたいみんな急ぎだと言うし、まぁ30日出ただけで解決するわけでもなく誤差かなと。そんなことぐらいで死にはしないだろう。

Real World Haskell

Real World Haskell: Code You Can Believe In

Real World Haskell: Code You Can Believe In

RealWorldHaskell読みました。上のリンクは洋書のKindle版です。日本語のKindle版はまだないのだけど、紙のオライリー本はこちら→Real World Haskell―実戦で学ぶ関数型言語プログラミング

ちなみにオンライン版はFreeで以下に公開されています。
Real World Haskell

Kindle本の良さは、だいたい勉強の本は通勤の電車の中で読むのだけど、紙のオライリー本は重いし、オンライン版は地下鉄で読めない。オンライン版は前もってダウンロードしておけなくもないけど、わからん単語をその場で辞書引けるKindleまじ快適でオススメ。

本書の内容はHaskellってイマイチ流行らないのは実用に使えないよねーとかいう誤解を解くために、Haskellでもこんな実用的なプログラムが書けるぜーというのを例示してます。はじめは簡単な文法の説明から始まりますが、9章あたりから急にサンプルプログラムの難易度が上がって心がくじけそうになりますが気合いで読んだ。JSONパーサー作ったり、SQLでDBアクセスしてみたり、Podcastのダウンロードアプリを書いてみたり、Cのライブラリコールできたら何でもできるやんとやってみたり、シスログ転送するソケットプログラムを書いてみたり、スレッド使った並列プログラミングをしてみたりなどなど。とにかく話題が多岐にわたりHaskellだって本気出すとこんなことできるんだぜーというかんじの本です。また、遅延評価が引き起こす性能問題にコンパイラのプロファイラ使って原因を特定する方法など実際的な話題も扱っています。

まぁCのライブラリコールできたら本質的に何でもできるがなという気はするけど、ただHaskellシステムプログラミングしてるコードとか超汚いし何も無理してHaskellで書かなくてもよいんでね?というかんじはした。プログラミング言語には得手不得手があるのだから、抽象的でエレガントなコードが書ける領域で使うべきなんじゃないかと思う。ヒューリスティックな探索問題とか組み合わせが莫大に発散してしまうような推論とか。イメージとしてはAIとかゲームエンジンとかクオンツな自動売買とか?

というわけでRealWorldHaskell自体はHaskell本気出せば低水準なプログラムも書けるんだぜーという応用範囲の広さを理解する上で読んだ意味はあったけど、次の学習の方向性としては、YesodとかWebフレームワークみたいなナウい実用的な方向に行くよりも、もっと言語仕様を理解してHaskellらしさを学ぶべきかなーという風に思いました。

入門書の次の勉強方法

すごいH本([asin:B009RO80XY:title])とリアルH本(asin:4873114233:title)読んで、他にも有名どころの入門書はあるけど、入門書は似たり寄ったりそろそろよいかなーという頃合い。次は何を勉強しようかなーと思ってネット上をいろいろググってみたのだけど、Haskellっぽさを学ぶためにとりあえず以下をやろうかなと思います。

Haskellっぽいコードの書き方を学ぶために以下の練習問題の回答を写経する。
H-99: Ninety-Nine Haskell Problems - HaskellWiki
Euler problems - HaskellWiki
他の言語でもあるアルゴリズムの問題をHaskellならこう書くって回答例が公開されてるのでよいかなーっと。普通は自分で考えて解くのがもちろん正しいのだけど、受験勉強と同じで、とりあえず問題のパターンと回答を丸暗記する方が高速に学習できるので回答を写経する。受験の数学とか暗記教科だし、ひらめきとか突然降ってこないし、十分な基礎知識の上にしかひらめきは生まれないと思ってる。

あと言語をきちっと体系的に学ぶために言語仕様とGHCのマニュアル読む。
Haskell 2010 Language Report
Welcome to the GHC User’s Guide — Glasgow Haskell Compiler 8.6.2 User's Guide
ネット上の情報ってググってヒットするのがだいたい極端に簡単すぎるサンプルだったりしてがっかりなのだけど、逆にStackOverFlowとかマニアックな議論をしているメーリスのスレッドだったり両極端であんまり参考にならず。Haskellの入門書はいろいろ難しい概念を説明するために工夫した結果なのか、なぜか構文の説明をせず、体系的に文法がよくわからん。きちんとした知識を付けるにはこういうオフィシャルなドキュメントの方が体系的にまとまっててよいかなぁという気がします。読みにくいかもだけど。

言語仕様の日本語訳は以下で見つけたが、冒頭の1章と2章の途中ぐらいまでしか訳されておらず、未完のよう。力尽きた?
Haskell 2010 言語報告書
若干古いHaskell 98改訂版の日本語訳は以下にあった。
Haskell 98 言語とライブラリ 改訂レポート
GHCのマニュアルの日本語訳は若干バージョンが古いですが、以下に見つけた。
栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.8.2

あとHaskell極めるには圏論とか数学の理論的な方面も避けて通れなさそうなのだけど、それはこの次かなぁ。
とりあえず上だけでもボリューム多いですが、ぼちぼちいこうかと思います。