プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

『Go言語コードラボ』と『Erlang/OTPトレーニング 2013.10』両方に行ってきたので感想でも書いてみる

表題の通りで、『Go言語コードラボ』『Erlang/OTPトレーニング 2013.10』に参加してきました。どちらか一方に参加している人は多いと思いますが、両方参加した人は私が把握している限りでは私とグニャラくんこと末永匡さん(@)の二人しかいなかったので、両方参加したからこそ書ける記事を書いてみるのもいいかなと思って書いてます。

裏事情としては『Erlang/OTPトレーニング 2013.10』の参加記事を書くのが遅れたので、遅れた参加記事を書くいいわけがちょうど出来たということもありますね。

『Go言語コードラボ』に参加してみて

まずは直近に参加した方から。どんな内容のイベントだったというのは事前に書かれた公式の記事を見ると分かると思います。

Go 言語コードラボを開催します

このコードラボでは、ピアツーピアで参加者同士が通信するチャット ネットワークを構築します。Go 言語の並列性プリミティブや標準ライブラリをハンズオンで体験していただきます。

という話しだったので、今までチャット的なものを作ったことないし、どう作ったら良いのか分からない私にとってもピッタリだと思ったので、募集が始まってすぐに応募してみました。

当日使われた資料はこんな感じです。

で、参加した感想はどうだったかというと 「参加してみてメッチャ良かった!」という小学生並みの感想ですが、本当にとても良かったです。

当日にもTwitterで呟きましたし他の人も書いているのを見ましたが、資料として用意されたスケルトンコードが良く出来ていたのが印象的で、part1からpart8まで段階が用意されていたんですが、これがまた絶妙な難易度&上手い穴埋め方式で作られていました。

TODOと書いてあるコメント部分に従ってコードを書いていけば正解に辿り着き、実行結果を試すやり方も最初に提示してあるのですぐに結果が試せるという形式だったので、「今自分が何をやっていて」「自分が手を付けたところがどう影響して動いているのか」ということが段階を踏んで理解を出来る構成だったのが個人的にかなりのポイントでした。

分からなくなったら答えがそのまま書いてあるコードが同じリポジトリに用意してあるので、「こうやればよかったのかー」と自分で理解も出来ましたし、当日は分かりやすい英語とスライドでポイントの説明があったため、何とか自分の力でもついていくことが出来て良かったです。

part7の課題が終わってマスターノードに繋いだ後、part7で作ったものを動かしてみたら自分がタイプした文字が前にあるスクリーン上に映し出されて遊べるようになったときには学んでいるというよりかはもはや遊んでいるといった方が正しかったような気がします。

Go言語の特徴であるgoroutineとchannelは参加するまでよく分かってなかったので、今回のイベントは私にとって渡りに船でした。まだ理解が十分ではないので今後復習して理解をしっかりしたものにしたいですね。

Erlang/OTPトレーニング 2013.10』に参加してみて

時系列的には『Go言語コードラボ』よりも前に開かれたイベントで、こちらは『Go言語コードラボ』と違い、有料のイベントでした。

結論から言ってしまえば、お金を払った価値があるイベントで参加して良かったです。

どういった内容のイベントだったかというのは他の参加者の方の記事を読んでもらった方が分かりやすいと思うのでリンクを貼っておきます。

『Go言語コードラボ』とは違って、Erlang/OTPトレーニングに参加したときはErlang自体を全く触ったことも無ければ文法も全く知らない正真正銘Erlang初心者の状態で参加したので、非常にためになる話しだったのにも関わらず消化不良になってしまったのが個人的な反省点でした。

ただ、Erlangの書籍を読んだだけでは分からないであろう、仕事でバリバリ使っているからこそ説明できるErlangの全体的な概念の話しはとても分かりやすかったですし、フォールトトレラントなシステムをどうやって作っていくかといった道筋を実際のコードを使って段階的に示し、最終的にErlang/OTPのgen_serverに繋がるといった構成は『Go言語コードラボ』と同じく素晴らしかったです。

当日使われた資料もこうやって公開されているので、復習しようと思ったら復習できるのも良いですね。

この分かりやすさは流石普段Erlangのセミナーを担当される講師をされているだけあって素晴らしいなあと思いました。

事前に文法くらいは軽く確認しておけば良かったな、と終わってから非常に後悔するくらいに中身の詰まったイベントでした。

両方のイベントに参加してみて

普段Pythonをメインに触っていて、今までparallelismとかconcurrencyとか意識するプログラミングをしたことが無かったので、goroutineやchannelといった仕組みをネイティブに持っていて割合簡単にconcurrent*1なプログラミングが出来るGoの強みを体験できましたし、Erlang自体に含まれた耐障害性の強み*2を垣間見れたのは非常に良い経験になりました。

参加して思ったのは、ただ動くものを作るのでは無く「スケールするシステムを作るにはどうしたら良いのか?」といったことを解消する必要が仕事で出てきている、あるいは出てきそうな人が率先して参加していたのかな?という感想を持ちました。そんなに他の人に実情を聞いたわけではないので勝手な憶測ですが、ErlangやGoといった言語のイベントに人があれだけ集まっているのを実際に見てみるとそう感じてしまうなあ、というところです。

特にErlangの方は今回初めて弄ったので、「Erlangのプロセスは自身が死んだらアラートを出して他のプロセスに知らせる」とか「障害を検知したら、リンクされている他のプロセスが死んだプロセスを再起動(という言い方でいいのでしょうか?)させる」といった仕組みには驚きましたし、こういった特性は今後色んな場面で使われそうだなあ、という風に思いました。

最後になりましたが、『Go言語コードラボ』も『Erlang/OTPトレーニング』もどちらも素晴らしいイベントでした。開催関係者の皆様、ありがとうございました。

*1:日本語訳が「並列」なのか「並行」なのか分からなくなったので原語で逃げました!!

*2:Erlang/OTPのものなのかもしれませんが。