2009年7月8日水曜日

Scalaを選んでみた理由

河野さん (shinji_kono) on Twitter wrote:
> Scala Tutorial って機能の自慢みたいな感じで、大規模プログラミングでの、Scala の利点が良くわからない。Java から、Scala に、Refactoring するとかあるのかな。

加藤(kzhk) on Twitter wrote:
> @shinji_kono 現在うちのプロジェクトで,分散環境でVMを操る2万行規模のJavaコード(自前のクラウドコンピューティング基盤)をScalaで書き直そうとしています.プロジェクトメンバー皆でScalaの学習中.

中田さん(@hidemotoNakada )on Twitter wrote:
> @kzhk 楽しそうですねー.でも,本当にScalaでいいのでしょうか.などと (^_^).Scalaのパターンマッチ用のクラスはなんか気持ち悪いなあ...

仕様がかちっと決まっていて,大勢で開発のような場合はJavaもいいかもしれませんが,試行錯誤を繰り返す研究開発現場では,Javaの行数の多さ(もっと言えば,生産性の低さ)は以前から問題だと思っていました.方式を変えようと思っても(号令をかけても),簡単には書き換えられない.

Ruby, Pythonの生産性の高さは良いですが,静的検査がない.一人か,ハイレベルプログラマ少数が書く場合はよいかもしれませんが,ある程度の人数で分担して書く場合はちょっと不安.分散ソフトを書く際のActorsの生産性の高さは,以前にErlangでテスト済み.Erlangはよいのだが,Javaと親和性なく,当研究室環境で純関数型に付いていけない人は少なくないかも.関数型プログラミング経験がない人には習熟に時間がかかりそう.それから,実際に使ってみるとエラーメッセージが不親切.

Scalaをしばらく試してみたところ,結構良さそう.Martin Oderskyの言語設計能力にはかなり感銘を受ける.過去のJavaコード資産がすべて使え,Ruby相当の生産性と習得時間,静的検査あり.Actors (Remote Acotors)機能あり,テキストも揃いつつある(下記参照).元々,個人的に関数型言語は好きだが,クラウドコンピューティング時代は関数型言語が重要性の増すとの直感在り(更新よりも追記,微視的よりも巨視的プログラミング(MapReduce等)).

以上のような考察から,経験を積むことも兼ねて.Scalaでトライしてみることにしました.

テキスト:


Programming in Scala: A Comprehensive Step-by-step GuideProgramming in Scala: A Comprehensive Step-by-step Guide
Martin Odersky

Artima Inc 2008-11-26
売り上げランキング : 1661

Amazonで詳しく見る
by G-Tools

開発者自らが書いており,言語設計およびプログラミングの哲学まで語られている.ページ数が多く(本文685ページ),読むのに時間が掛かるが,よい勉強になる.



Beginning ScalaBeginning Scala
David Pollak

Apress 2009-05-27
売り上げランキング : 3829

Amazonで詳しく見る
by G-Tools


プログラミング経験は豊富だが,あまり関数型プログラミングの経験はなかったベテランプログラマによる書.例題が豊富で,手軽な分量(290ページ).高速に読め,実用的.

P.S.
チームで中規模以上のソフトウェア作りをするとき,生産性の低い人はJavaで書いてはいけない.問題が生じたときに書き直せないから(書き直す気力と時間がない).Ruby, Python, Lispで書いてもいけない.規範ないコード,特定の場合でしか動かないコードを書いてしまうから.では,初級プログラマはどうしたらよいのか? 頑張って,腕をあげよう.そのためには,書きまくり,よいプログラムを読みまくり,コードの書き方を学ぶのだ.楽器演奏の習得に似ている.自分で楽器を弾きながら,うまい人がどう弾いているのか,学ぶのだ.自分の演奏を聴いてもらい,コメントをもらうのだ.私の経験だと,プログラミングがある程度できるようになっても,一つの新たな言語を使いこなせるようになるのに,一年を要する.