5月の成果と6月の目標


5月の成果

これは予定通りに行われました

ビデオスライド。 

前回のnosqleu向けに加え、ruby向けのコードやトピックを増やしてみました。あと少しKyoto Cabinetもいじってみたので、その紹介も付け加えてみました。反応としては以外と最後のDistributed Key-Value Store であるkumofsやromaに皆の興味があったように思えます。

  • C, C++の勉強

日本に一時帰国する機会があったのでいくつか買った本の中の一点。

C++プログラミング入門
グレゴリー サティア ダウグ ブラウン
オライリー・ジャパン
売り上げランキング: 86787

私はCを実務で使ったことはなく、入門用の書籍を1〜2冊読んだだけの段階でこの本を読んだのですが、「C++でできることをCだと擬似的にはこうする」みたいな記述があったので、逆にCの勉強にもなりました。あと200ページ程度と他の本に比べ量が少ないので、週末を利用して一気に読み終えることは可能です。実際に私も先週末だけで全15章のうち13章まで読むことができました。

ただ逆に欠点としては各章のサンプルが細切れで、それだけだとコンパイル不可です。よって最終章の「プログラム例」のところが出てくるまではプログラムの全貌がつかみきれない気がします。特に12章、13章の「多態性」についてはいろんなやり方があって非常に複雑なので実際にコードを書かないと理解しきれないと思いました(よって最終章まで読み切っていない私はまだ理解があやふやです)。

多くのソフトウェア関係の古典にあたる本はコードがC++でかかれており、取っ付きにくかったのですが、この本を読むことでそれらの本に苦手意識をもたず取り組めるのは成果だと思います。ただRuby使いとしては「Rubyを使えばこんな難しいことしなくてももっと手軽にOOできるんだけどな」という思いを再認識しました。

とりあえずMapReduceとGFS(Google File System)の原文には目を通したのですが、いまいち分かりずらかったので、この本を読むことにしました。

この本ではそもそもMapReduceなどを使う背景となったグーグルの検索エンジンのしくみから説明し、その後検索のシステムを構築するために必要な仕組み(Google File System, Big Table, Chubby, MapReduce, Sawzall )を順序立てて説明、そして最後にはそれらを運営するためのデータセンターの運用コストや開発体制にまで及んだ説明がされていました。

各仕組み間の関係がこれを読むことですっきり頭に入るのは良かったのですが(これがそもそもの購入動機)、運用コストの計算の所は著者の独自の視点に基づいて電気料を計算までしていて、「本当にスケーラブルなシステムをつくるにはかなりシステムの低レベルなところまで考え抜かないといけないのだ」ということがよくわかりました。3時間程度で読み切ることは可能ですが、各トピックごとにまた読み直したいと思わせる良書です。


それ以外にもこんなことしました。

  • Scalaの勉強を始めた。

CやC++を勉強していた時にStatic Typingがたくさん出てきて、いまいちありがたみが分からなかったのですが、その時に「Scala の開発者がロンドンで講演する」ということだったので、せっかくなので少し勉強してみることにしました。


参考になったのは以下のサイトです。

http://blog.livedoor.jp/dankogai/archives/51275491.html
http://wota.jp/ac/?date=20100426

私が基本的に注目しているのは以下の点です

  1. 静的でも「型」苦しくない (型があったときがうれしい場面もあるけど、それにいっつも苦しめられるのはいや)
  2. インタプリタ言語かつコンパイラ言語 (irb的なものもあるので、ちょこっと文法を試すのがやはり楽)
  3. アクターモデルのサポート (これがあるといいけど、これだけのためにErlang勉強するのはちょっと避けたい)
  4. 型のパラメーター化(なにやら自分独自の型が作れるらしい)
  5. OOかつFunctional
  • DDD (Domain Driven Design) Exchange に参加

これもやはりたまたまだったのですが、"Domain Driven Design"本で有名なEric Evansが直接講演する「Domain Driven Design Exchange」というイベントのチケットが直前に手に入ったので参加してきました。

Domain-Driven Design: Tackling Complexity in the Heart of Software
Eric Evans
Addison-Wesley Professional
売り上げランキング: 9952
おすすめ度の平均: 4.5
4 ドメイン駆動設計で、役に立つソフトウェアを作ろう
5 ドメインモデル構築方法の決定版
4 For Software Projects

たぶんビデオはここにアップされると思います。

AgileやXPなどをやっているとついつい「木をみて森をみず」みたいなプロダクト設計になっているのではないかなと疑問に思い、それがDDDによってどうやって克服できるか興味があって望みました。原文はものすごいボリュームですが、100ページ以下にようやくされたものが無料でダウンロード可能です。

基本的なコンセプトは「デザインパターン」本と似ているのですが、デザインパターン本がコードにパターンを与えるのに比べDDDはアーキテクチャにパターンを与えることで、システムの全体像を可視化するといった所でしょうか。

そういった認識で参加したのですが、中心のトピックはCQRS(Command and Query Responsibility Segregation)
とかEvent Sourcingとか聞いたこともないもののオンパレードだったのでいきなり面食らいました。

CQRSは「更新系と参照系のクエリ」を分けることでのスケール化、Event Sourcing は全てのイベントを非同期で考えることによるスケール化なのですが、普通はそういうのはもっとコードレベルで考えるところなのですが、いかにそれをシステムアーキテクチャレベルで考えるかに焦点が置かれていました。最近はやりの「並列化」「クラウド化」「NoSQLによるCAP定理」を反映したイベント構成だということを最後のQ&AでEric から教えてもらい、ようやくなっとく行きました。


こうして見ると自分が興味をもって勉強していること(NoSQL, DDD, Functional Programming)等が何らかのところでつながっているなと思いました。


6月の目標

今月はワールドカップゲームを見るので忙しいだろうから、あまり大きな目標を立てず、いままでやってきたことをコツコツと続けていきたいです。具体的には以下の2点

  • nosqlsummer

先月から話していたnosqlsummerがいよいよ今月から始めるので、それの運営がうまく行くようにしたいです。少なくとも毎回トピックにあげられている論文はちゃんと読んでからMeetingに望むようにしたいです。ちなみに第一回はPNUTS

  • 新しく習った言語のどれか一つを使ってライブラリを書く

先月は「C++を勉強したり、Scalaに興味を持ったり、Google Goも勉強してみたいな」とあいかわらずやりたいこと症候群にかかっています。どれを重点的に勉強するにせよ、本やリファレンスを読んだだけだとあまり身に付かないので、なるべく自分でコードを書くようにしたいです。特にScalaの方は今月からScala Coding Dojoも始まるみたいなので、これをチャンスにコードを書き始めるつもりです。