nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

Scala挫折しそう

ここ数年、毎年新しい言語をひとつは学ぶという習慣を続けています。2018年はC#コンパイラの出来がよいのか、雑に書いてもそこそこの性能が出るし、なによりLINQが書いていて気持ちいい。またLINQの存在を知ったあとで、JavaのStream APIをあらためて勉強しなおしてみると、こちらはこちらでなかなかよくできていることに気づくなど、たいへん勉強になりました。これからもC#で遊んでいこうと思います。

さて2018年も年の瀬。来年学ぶべき言語を考え始める時期でもあります。そこでここ1か月は予行演習として、前々から関心があったScalaに触れていたのですが、そうそうに挫折しそう、というか多分挫折すると思います(´・ω・`)

①挫折の最大原因がIntelliJ IDEA。ネットの記事や入門書によると、Scalaを書くにはIntelliJ IDEAが最適、というよりそれ以外の選択肢はほぼないらしい。ならばと使ってみたところ、自分のPCとの相性が悪いのか、自分の使い方が悪いのか、妙にもっさりしていて、コード補完がうまくきかなかったり、コンパイルエラーの検出ができなかったりと、ストレスがたまることが多い。ショートカットや見た目のフィーリングが妙に気に食わない、無償版とはいえ商用製品をただで使うのは気が引けるなども、IntelliJ IDEAから遠ざかる要因になっています。なおPluginを導入すればEclipseでもよいそうですが、自分の環境ではろくに動きませんでした(そのPluginがもともとあまり安定していないらしい)。

②あとは些末なところで、Scalaの文法が自分の好みに合わないというのも挫折の理由にあったりなかったり。

  • Listの添字アクセスが[]ではなく()
    • VBAと同じですが、VBAにトラウマがあるので、それを思い出してつらい(´;ω;`)ウゥゥ
    • []は別の用途で利用されるのだが、これはこれは違和感がぬぐえない。
  • やたらに記号を多用するスタイルで、書くのも読むのも慣れないと厳しそう。少なくともググラビリティは低い。
    • 無名関数ではプレースホルダが使えるのだが、その記号が_。ほかの言語だと変数名_は"無視"を意味することが多いので、違和感がある。
    • :+とか+++とか、ほかのプログラミング言語だとあまり見慣れない記号が妙に出現する。
    • 同じ記号に違う意味がありすぎて、覚えきれる自信がない。
  • def methodName() = {}=はいらなくない? =は束縛の意味なのかなあ?

ここに挙げたのは一部で、ほかにもいくつあるのですが、ただこうした違和感は学習期間が短いゆえの現象、要するに「慣れてないだけ」。とはいえ、ひとたび違和感を持ってしまうとそれをぬぐうのはなかなか難しいのも現実ではあります。

③まあこれは覚悟していたことではあるのですが、Scalaは学習コストが高く、はやくもわたしのIQではついていけなさそうな雰囲気を醸し出しています。1か月触れた程度ではあるのですが、それでもimplicitや型クラスなどなど、抽象度が高い概念がぽんぽん出現し、このペースで難しい概念が現れるとなると、ついていけるのかがとても心配になります。


Scalaからは戦略的撤退を決めるとして、ではどの言語を勉強すべきか。そもそもScalaを選んだ要因のひとつがJVM系言語に興味があったからでした。Scala以外のJVM系言語となると、Groovy/Kotolin/Clojureあたりかしらん。Groovyはグルー言語としての用途はよく聞くのですが、アプリケーション構築にどれだけ利用されているのかわからないので、パス。KotolinはAndroidに関心が薄いのと、前述したようにIntelliJ IDEAがだめ。となると消去法的にClojureが最有力候補になりますね……。ただLISP系ということぐらいしかわかっていないので、環境構築とか入門書とか、周辺の情報を集めることが先ですね。過去にSchemeに取り組んだことがあって、LISP系の文法には抵抗ないので、そこは無問題。ただ万が一はまってしまうと、通常世界にかえってこれなさそうな感じがする(LISPプログラマに対する偏見)。

JVMにこだわらずともPHPPerlでもいいですし、昨今の動向を考えるとフロントエンドに取り組むのもありのような気がします。個人的にはとりわけCSSに苦手意識があって、なんとなくフロントエンドからは逃げ回ってきたのですが、最近はそうもいっていられない雰囲気があり、迷うところではあります。また言語ではなく、何かしらのフレームワークを学ぶ選択肢も考えています。ちなみに学ぶとすればRuby on RailsかSpring Bootですね。ただフレームワークを学ぶとなると、何かしらのアプリケーションを作成することになるのですが、どう頭をひねってみても、特別作りたいものがない。よさげなハンズオンを探してみようかしら。

なかなか迷いは尽きないですね(´・ω・`)