プログラミングElixir
プログラミングElixirを読んだ。この本は素晴しいツール、そのツールを通した考え方を得るための良い道案内になるだろう。
Elixir のことを最初に知ったのは、 RubyKaigi2013 で基調講演のレポート を担当した際、 レポート班チーム仲間の udzura さんの「José Valim の基調講演は、José Valim が作っている言語 Elixir のことを Shinjuku.ex というコミュニティを開催して知っているので、私が担当しようと思います」 といったような発言からだった。
そのときは Elixir を調べてみたのだけど、特に何も思わなかった。
そのあと plagger のようなパイプライン処理をするライブラリで、 かつ分散した処理は並列で処理してくれるようなものを書きたいなと考え、 並列処理ということで Go や Haskell などを調べた。 しかし、シンタックスやセマンティクスが自分にはしっくりこなかった。
「そういえば Ruby と似ている Elixir というのがあるな」と思い、Elixir のサイトに行ってみると、なかなかよさそうだった。
公式にあるチュートリアルをやってみると、 ErlangVM や OTP ライブラリ、パターンマッチング、メッセージパッシングといったものが自分にとって新鮮だったこと。 マクロのような仕組みが実用的な感じで綺麗にまとまっていそうだったことなどが手に馴染みそうだった。 早速英語版のProgramming Elixirを買ってやってみることにした。ただ英語が苦手なので文の意味をとるのが大変だった。
自分の知っていそうな領域では機械翻訳、辞書、既存のプログラミング経験からの類推の 3 種類を駆使しながら何とか読みすすめられた。 恐らく相当平易な英語で書かれており、構成も素晴しいせいなのだろう。
一方、自分のあまり知らない領域、並行プログラミング、OTP ライブラリ、マクロのあたりは 既存のプログラミング経験からの類推がうまく働かせられないので苦労した。
ErlangVM と OTP というツールと、その考え方は素晴しい。 これらは今までも誰でもアクセスできるところに置いてあったのだけど、僕はその凄さを全然知らなかった。
ErlangVM と OTP を動かして試すための言語が主に Erlang で、 Erlang の構文の見た目が僕の経験してきた言語とは少し異なったため、 気軽に試すにはハードルが高かったのだ。
蛇足になるが、Erlangの名誉のために書いておくと、実は慣れるとErlangも特段苦労せずに読める。 ロジックが特殊なわけではなく、単なる見た目の問題なので、見た目に慣れてしまえば平気なのだろう。 英語が得意でない人が、プログラミングで英語のメッセージを見て怯んだ経験はないだろうか。そして見慣れた今はどうだろうか? それに似ているかもしれない。
matz が Rubykaigi2013 のキーノート で
プログラマの思考はプログラミング言語に影響されます。つまり、プログラミング言語の適切な設計は、プログラマの思考をガイドすることにつながります。
と話していたとおり、ErlangVMとOTPというツールへの学びを通じて、僕の並列/分散処理についてや安定した処理についての考え方は変わった。
振り返ると、僕がそのツールへ到達して考え方が変わるための壁がいくつかあって、ひとつはErlangの構文、もうひとつは英語だった。
Erlangの構文の壁は、Elixirを使うことで回避することができた。 Elixirを説明している英語という壁は、苦労したがやっていく気持でなんとか乗り越えることができた。
今回「プログラミング Elixir」という本が発売されたことで、 ErlangVMとOTPという素晴しいツールと、その考え方へ、みんなはそれほど苦労せずに到達することができるようになった。
この本を読んで、ツールに慣れ親しむとみんなのプログラミングの考え方が少し変わるだろう。僕は変わった。
ぜひ買って読んでみてほしい。