Scalaを学ぶと何が嬉しいかを考えてみる
まえがき
「Scalaを学んで何が嬉しいか」ていうのは、人によって様々な答えがあると思いますが、最近ようやく自分なりの答えが出た気がするので書いてみます。
Scala採用企業で働くのに手っ取り早い
多くの人の言語を学ぶ動機は、就職や転職に役立つというものだと思います。この点においては、当然、JavaやRuby、Python、PHPといったメジャーな言語には劣るものの、こと東京であればScalaを採用している会社は少なくなく、むしろScala人材が不足している状況です。もちろん、そういう案件では、ただ、Scala言語でプログラムが書けるだけでは駄目で、JVMについての知識なども必要になりますが、特に都内ならそういう企業に就職するためにScalaを学ぶというのもありかと思います。
ちなみに、Scala採用企業マップ(これで全部ではないです)をshinharadさんが作成されていますので、参考までに。
特に、ふつーの人でも知っていそうな企業でいうと
あたりでしょうか。念のため書いておきますと、これらの企業で全面的にScalaを採用しているとは限らない(一部チームで利用の事例もある)ので、詳細については個別に聞いてみるのが無難だと思いま)。
プログラミング言語に強くなる
この観点は最近見出したものなのですが、Scalaはアカデミック発(当初は、スイル連邦工科大学ローザンヌ校のMartin Odersky教授の研究室で開発。現在はLightbend社がメインで開発)ということもあってか、日々いろいろな実験がされています。特に、マクロを使ったライブラリが多いのがScala界隈で特徴的なところかと思いますが、マクロというのはとどのつまり、プログラムからプログラムへの変換を行うプログラムなので、Scala界隈で色々触っていると、自然とScalaに限らず「プログラミング言語一般」に思いを馳せるようになる……のではないか、と思っています。Lispを学ぶといいよ論と似ているかもしれません
強力な型システムを使ったプログラミング体験ができる
私見ですが、現在実用で利用されているプログラミング言語の中では、Scalaの型システムによって実現できる制約はかなり強いので、それを生かした設計も(場合によっては)学ぶことができると思います。特に、DDD界隈で一部Scala推しがあるのは、このあたりなんではと思っていたりします。
DSLを作りやすい
これは、最近の言語だと多かれ少なかれ意識している点かと思いますが、特にScalaはマクロを利用したDSL的ライブラリが豊富なように思います。そのあたりのテクニックは、他の言語にも輸出可能なものがあるだろうと思うので、どういうDSLがあるのかという観点でScalaを学んでみるのも良いことだと感じます。
Kotlinもすぐ習得できる
最近は、AndroidアプリではKotlnを使った開発が一般的になって来ましたし、サーバーサイドKotlinの事例もちらほら見かけるようになってきました。KotlinはScalaの文法をかなり継承しているので(キーワードとか除けば、文法はかなり近い)、Scalaを学んでおけばKotlinは割と簡単に学べるというのもある意味メリットかもしれません。
楽しい
これに関しては個人の主観なのですが、Scalaは、一見した印象と反対に、できるだけ直交した比較的少数の機能を組み合わせることで色々なことが実現できるので、創意工夫の余地はかなりあると思います。そのことが、書き方が分裂して、コードの品質を統一しづらいという意見につながるのかもしれませんが、ともあれ試してみて損はないと思います。
というわけで、主観ばりばりですが、いくつか思いつく点を書いてみました。いくつかの点については、Haskellを学ぶのでもいいという話はありそうですが、特にJavaな人にとってはHaskellよりハードル低いんではないかなあと思っています。