Scalaはなぜ難しいと言われるのか?

Scalaをどうやって学ぶのがいいのか?ということはScalaを使い始めた数年前からずっと考えています。よく「Scalaは難しい」と言われますが、

  • どこが難しいのか?
  • なぜ難しいのか?

ということを、これまで書籍や雑誌記事、ハンズオンなど入門用のコンテンツを作ってきた経験を踏まえて整理してみました。

まず、Scalaが難しいといわれる理由のひとつに学ばなくてはならないものが多すぎるという点があげられます。Scalaオブジェクト指向言語ですが、関数型言語の特徴的な機能を取り入れているため、きちんと理解するには両方の言語のイディオムを学ぶ必要があるためです。

ただ、Scala自体は必ずしも関数型言語の知識がなくても使えるように設計されています。最初はBetter Javaとして一般的な手続き型オブジェクト指向言語の延長として使い始めることができ、Scalaの特徴的な機能に触れていくことで少しずつ関数型言語のイディオムを学んでいくことができるようになっているのです。そう考えるとScalaを使い始めるうえで必要な知識というのは本来は限定的なはずです。

ただし、ここで立ちふさがるのが実際にScalaでアプリケーションを開発するうえで必要になるライブラリやフレームワークです。

たとえばScalaの代表的なWebフレームワークであるPlay2ではクッキーを扱うだけでもモナディックなコードが必要になりますし、JSONでやりとりするWeb APIを作るには型クラスが必要になります。Scalaのエコシステムが、Hello Worldの延長で実用的なアプリケーションを作ることができないようになっているのです。個人的にここが初心者がScalaを学ぶうえでの一番の障壁になっているのではないかと感じています。

こういった障壁を避けつつ、ある程度のレベルまで到達できるような学習ルートがあるとよりScalaを学びやすくなるのではないでしょうか。