お世話になります。
現在、javaを使うかscalaを使うか悩んでおります。
私はjavaを少し使ったことが有り、scalaは全く使ったことがありません。
javaも仕事で色々やってきた人には全然かないません。その程度のレベルですので、両者を比較することが困難です。
ちなみに学習にかかる時間は気にしていません。
コーディングや、メンテなどを踏まえた開発効率はscalaの方が優れているらしいのと、javaのプログラムも使えるとのことで、scalaを使おうかと思っておりました。
また、scalaもjavaも大企業による開発の実績があるので、優れた言語だと思っております。
しかし、「YammerがScalaからJavaへ移行中」(※参考文献1)という記事を見ました。
記事を要約すると、「Scalaでプログラムを書くとjavaより短い文で書ける為、効率的なのでjavaから移行したが、問題が出始め、scalaをやめ、javaに開発言語を戻した。」とのことです。
そこで、scalaの利点は大きいですが、使って良いのか迷い始めました。
#########scalaは後方互換が弱いらしい#########
scalaはメジャーバージョンアップでソースレベル互換やバイナリ五感がなかったりというのが普通らしいという記事を見ました。
例えば、
「Scalaのメジャーリリースは後方互換性がないので、Scalaの開発者は新しいライブラリを使い、車輪の再発明を促進しやすい。」(※参考文献1)
や、
「さて、互換性がないのは、メジャーバージョンアップです。バイナリ互換がないので、異なるバージョン(例えば2.9と2.10)は混ぜて使うことができません。また、ソースコード互換があっても、かならずコンパイル自体をやり直さないといけません。」(※参考文献2)
という記事です。
scalaはjava等と比較して、少ない行数で同じことが出来るから開発効率が良いと言われているようですが、メンテ等も開発効率の一つだと思いますので、後方互換が弱いとメンテに時間をもっていかれそうな気がしました。
#########scalaは短い行数ですむと言われるが#########
あと、scalaだと短くすむという記事をいくつか見ましたが、下記の様な記事も見つけました。
「
例えば
aofufaifuaoiifaofadfanvvziejbfkqpwuirh
という文字列の中にfが何回登場するか、という処理を考えます。
C言語であれば、char型配列に文字列を代入して、forで回してカウンターをインクリメントする方法が考えられます。
5行は必要ですね・・・。
しかし!Scalaだと1行です。
(for(i <- (0 to str.length-1)) yield str(i)).filter(_ == 'f').size
」(参考文献3)
私は職場で退社したPerlプログラマーの膨大なプログラムを、そのプログラマーの退職後に引き継いだことが有りました。しかし、何でも1行に押し込めようとしている訳が分からないプログラムで、何人もの人が解読を頑張りしましたが、解読できませんでした。
また、私自身Perlで書いていたときは、よく1行に押し込めていましたが、時間がかかっても分かりやすいプログラムを書くのが一番だと思っております。
まだ、scalaを学んでないからコードが分かりづらいのは当たり前ですが、なんでも1行に押し込めるのは良いことではないような気もしました。
多数の企業がいろんな言語からscalaに以降しているのも事実だと思います
Twitterではscalaを使っているようですが、後方互換が弱く、メンテが必要だとしても、twitterレベルだと少しプログラムが軽いだけでもサーバ代等があり得ない程削減できるので、そういった理由もあるのかと思います。
成功している会社もあれば失敗している会社もあるという難しいのが現状だと思います。
その点javaは色々ネット上で叩かれたりもしていますが、実績はトップクラスである言語かと思いますし、先人たちが色々考えてきたため冒険するような言語ではないと思います。
プログラミング言語はある程度時間が経ってからのほうが、大幅な変更がないと思いますので、その点javaで予想外の大幅変更などは少ないのかな、と思います。
「YammerがScalaからJavaへ移行中」(参考文献1)の様に開発に採用し、かなり時間が経ってから問題が出てくるということもあると思うので、勉強してもすぐには問題に遭遇しないかと思います。
だからこそ今、経験のある方の意見をお聞きしたいです。
宜しくお願い致します。
また、誹謗中傷等、攻撃的なコメントはご遠慮ください。
参考文献1:https://www.infoq.com/jp/news/2011/12/yammer-scala
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/13 12:39