Java/JavaEE、Ruby/Rails、PHP/Akelosで実プロジェクトを負荷試験・運用まで含めて経験してきて、自分の中では「JavaとLLではパフォーマンスは1桁違う」という認識です。これが話の大前提。
経験上、LL(特にRuby on Rails)での開発は確かにストレスが少なくて楽しいのですが、動的言語で客先に納品するというのは、なんか、なんか気持ち悪い、というかなんか、不誠実な感じがします。
(自社サービスではなく納品する立場、というのも大前提)
開発が楽しいからという理由でLL使っても、コンピューターがひと手間もふた手間も多くかけて処理を実行するわけで、お客さんに時限爆弾を抱えさせるような気がしてならない。
実際PHPで作ったサービスでは、1000ユーザー超えたあたりからだいぶ良い感じに爆発しています。
弊社がターゲットにしているお客さんは、サーバ増強とか簡単ではなく、できる限り1~2台のマシンリソースで、なるべく多くのトランザクションを捌かなければなりません。
そこでJavaVMが必要になるのですが、Ruby/Railsを経験してしまった以上、Javaのget/setの世界には戻れなくなってしまった。。。
というプログラマとしてのエゴはやっぱりあります。
じゃあGroovyやJRubyかというと、動的言語としてひと手間多いという点は変わらないので、やはりなんか、お客さんに申し訳ない。
このような背景なので、Scalaを知ったときは「コレだっ」と思いました。「LL並の表現力で、静的にコンパイルできて、JVMで動く」ことが大事。
Scalaはいろんな仕様があって勉強するの大変ですが、Scalaの威力を端的に示すコードは、
↑この程度のものではないでしょうか。
これが書けるからScalaを使っていると言っても過言ではないっ。
Javaで同じことやろうと思ったら・・・と考えると、
もうJavaには戻れません。
有名な記事に、「CodeZine:私がScalaを選んだ理由」があります。
改めて読んでみると言ってることは同じかもしれないですが、大規模・エンタープライズだからScala、という話ではないと思っています。
(規模で言語を選ぶという話はナンセンスだと最近感じている。)
自分としては、お金がかけられないプロジェクトだからこそScala。
開発も運用もコンパクトに、という認識です。
※あとでLiftにした理由も書く