今日の昼食は、学生時代御世話になった研究室の先輩、後輩と外苑前で食べた。会社ものりにのってるらしくとても楽しそうだった。

で、そこで、プログラミング言語の話になったのだが、GoogleでJavaを使っていることにずいぶん驚いていた。たしかに、Googleといえば言語はPython、ファイルシステムはGoogle File System(GFS)、DBはBigTable、分散環境としてMapReduceというイメージがある。なので、「きっと速度が必要なところはCかC++で書いてるんだろうなー」と考えると思う。しかし、今日のニュースにもなった以下の記事にも書いているとおり、ミッションクリティカルな部分で採用している言語はJavaである。

このバランス感覚、さすが - GoogleのDIフレームワーク"Guice"を使ってみる

http://journal.mycom.co.jp/articles/2007/03/14/googleguice/



Guiceが依存性注入できるのはコンストラクタ、フィールド、メソッドなど。セッターメソッドにかぎらず、複数の引数をとるメソッドに対しても適用できる。そのほかの特徴としてカスタムスコープ、環状依存への対応、スタティックメンバーのインジェクション対応、Spring Frameworkとの統合、AOP Allianceメソッドインターセプションなどがある。 Guiceはすでに数カ月にわたり、Googleにおけるミッションクリティカルアプリケーションにおいて採用されている。Google最大のアプリケーションであるAdWordsもGuiceを利用したものだ。

たしかAmazonもミッションクリティカルな部分ではJavaを採用しており、ほぼPerl+Javaで組まれているはずだ。Javaがミッションクリティカルな部分で採用される理由は、実行速度とチームでの開発スピードのバランスが優れているからだと思う。また、スレッドを言語としてサポートしているのも、大規模システムを利用する場合心強い。ページの生成にはCで書かれたテンプレートエンジンを叩けばいいし、DBはBigTableのAPIを叩くだろうから、それを支える言語として最も重要なのはビジネスロジックを的確に実装できることになると思う。その開発スピードを支えるのが上に紹介したDIコンテナであり、こいつにJavaの開発スピードはかなり支えられてると思う。DIコンテナ自体の説明は、Web各所にあるので置いておくとして、それを自作できるのがGoogleの力ということか。

あと、次に「今サイトを構築するなら、どんな言語かねー」という話題になり、Ruby on Railsかなーって言っていたが、個人的にはああいうタイプの中身がよく見えないものを採用するよりならPython + MySQL + ClearSilverでいいんじゃないかなーと思うのだが、時代遅れくさいので言うのを止めました。