2010年8月18日水曜日

JavaエンジニアはScala Liftの習得に時間を投資したほうがいい

TwitterやForsquareなどで活用されて何かと話題な言語Scala/Liftだけど、実際に学習し、コードを書いてみるとJavaに継ぐ次世代開発言語といえるほどの利用価値があることを実感できる。
エンタープライズ領域のオンラインアプリケーションではJavaが一番使われてるけど、生産性を高めたいならScalaとフレームワークのLiftの習得に時間を投資したほうがいい。

Scala プログラミング入門

LINK


メリット1:シンプルな記述
変数の記述
Java
String value = "Hello World";
Scala
var value = "Hello World"

▼文字列の出力
Java
System.out.println("Hello World");
Scala
println("Hello World");

▼クラスの定義
Java
public class Boot{
}
Scala
class Boot

▼多重ループ
Java
for ( int counter1=1; counter1<=10; counter1++ ) {
  for( int counter2=1; counter2<=10; counter2++ ) {
    System.out.println( counter1 * counter2 );
  }
}
Scala
for { counter1 <- 1 to 10
       counter2 <- 1 to 10 }
  println( counter1 * counter2 )

▼パターンマッチ(本書から引用)。自然界に潜む黄金比フィボナッチ数列の計算。
Java
public int fibonacci ( int in ) {
  switch (in) {
    case 0:
      return 0;
    case 1:
      return 1;
    default:
      return fibonacci(in -1) + fibonacci(in - 2);
  }
}
Scala
object Fib {
  def fibonacci(in: Int): Int = in match {
    case 0 => 0
    case 1 => 1
    case n => fibonacci(n-1) + fibonacci(n-2)
  }
}

ざっくりとJavaと比較してみても、シンプルな記述で同じ実装ができることがわかる。
コードのシンプルさというのはとても重要。
システムの開発・運用・保守は「読む」「書く」の2つのビヘイビアが仕事の大半を占める。
コードの記述量を3割減らせれば読む時間も3割減らすことができるから、開発者と運用者が異なるチームでも双方の時間が節約できる。

メリット2:Javaのライブラリを使える
これまでに開発、テストされたJavaのライブラリは数え切れないほど存在する。
ScalaではJavaライブラリをそのまま使えるので、一からライブラリをつくるような車輪の再発明をしなくて済む。
「あるものは使い、ないものは作る」これ基本。

メリット3:並列処理の実装が容易
並列プログラミングを実装しようとすると注意しなければならないことがでてくる。
・ロックを多用し過ぎないようにロックを十分に使うといった相反することのバランスを取る。
・デッドロックを避けなければならない
・スレッド数を増やしすぎない
実装の度に注意点を確認していたらそのアプリケーションが出来上がるのは数年後になっているかもしれない。
可能だとしてもそんなに手間と時間のかかる実装をするのは市場のスピードに取り残されることになるし現実的ではない。
その問題を解決できるのがアクターという機能だ。
厳密には並列処理ではなく直列に実行されるスレッドセーフな代替機能だけど、Javaで実装する並列処理を考えればこのアクターは十分な効果をもたらしてくれる。

メリット4:ウェブアプリ開発に必要な機能がほぼ揃っている
ウェブアプリケーションの開発には、「O/Rマッパー」「アプリケーションサーバー」「データベース」「ACL」「SiteMap」「ユーザー管理」などの基本的なものから、比較的新しい技術では「AJAX」「Comet」など多くのミドルウェアやライブラリを揃える必要がある。
Liftにはこれらがフルスタックで用意されているのですぐに開発を始めることが出来る。

メリット5:パフォーマンスがJavaと同等
Python、Ruby、Perl、PHPなどのスクリプトでは頻繁にパフォーマンスを比較するベンチマークがとられているが、Scalaはスクリプトのような記述が可能でありながら、Javaバイトコードにコンパイルするため静的な処理であればパフォーマンスがJavaと同等だ。
つまり上述したどのスクリプトよりも実行速度が速い。

プログラミングを楽しむというのも大切だけど、最も重要なのは”市場における成功”というのが僕の考え方なので、非効率なツールはバッサリと捨てて、競争優位性のあるツールをどんどん取り入れていくべきだと思う。

0 件のコメント:

コメントを投稿