javaは苦痛

ScaloidのGitHubに書いてた。

Less painful Android development with Scala | Scaloid

Javaはしんどい

モダンな言語や動的言語に慣れるとJavaはしんどく感じる。この思いは「昔Javaを使ってたけどもう別の言語を使っている」という人々の大多数は同じように感じることだろう。

Javaは悪い言語ではない。多くのひとが述べているように、Javaはmalloc/freeやnew/deleteの地獄から救ってくれた言語で、また、オブジェクト指向というパラダイムの転換をもたらしてくれた偉大な言語であった。

ある人はJavaを「初恋の人」と表現している。また別のとある人はJavaについて「好きだけど年を取りすぎて引退する時期だ」と言及している。同じように私がJavaを何かに例えるならば、ゆりかごという言葉がしっくりくる。私はJavaに揺られながら、オブジェクト指向とUML、またはGCや仮想マシンといった要素技術を学んだ。その知識は時代が移り変わっても廃れることのない基礎として身についたと思う。

このブログでもたびたび述べているが、Javaはモダンな言語ではなくなった。ゆりかごの外にでて、数多の世界をみてもまた、ゆりかごの中に戻ろうとは思わない。いまだにラムダ式もクロージャも対応してないし、強制チェック例外を書かせられる。型推論もない(に等しい)し。ある集合をあるシーンで必要なデータに加工するのにいちいちforループを回すのは地獄でしかない。私は言語屋ではないのでそのような設計が良いのか悪いのかを論ずるほど知識や経験があるわけではないが、率直な感想としては「古臭くて面倒」以外は思わない。

node.jsやPlayを触った後に「SomeAction」「SomeActionImpl」などという大量のクラスを見るとうんざりしてくる。仕事で某の偉い人が「最新のGrassfishとJSFを使えばアジャイルで正しく拡張性と再利用性に富んだ設計が出来る」とか言ったときは素直にぶん殴ろうと思った。

Java8でラムダ式できたよー、とか言われてもそれがWeb開発の現場で使えるようになるのはいつの話になるのだろうか。今、Java以外で開発してるひとがわざわざJavaに戻ってくるメリットだけのメリットはあるのだろうか。

私は大規模なアプリを開発したことが無いので、信頼性がどうとかパフォーマンスがどうとかSI系システムに必要な機能がうんたらとかそういう小難しい話は知らない。ただ、Javaはしんどい。面倒くさい。それだけは確実に言える。私にとってはサクサク開発できるかどうか、それが第一に重要であって、その他のことはそれほど重要じゃない。困ったらその時に考えれば良いと思う。

フレームワークはそれに耐えれる汎用性が重要で、だからこそ、過度に裏方の処理を隠ぺいしてしまうようなフレームワークはダメだと思う。いやいや、それは方針であって抽象度が高くてもフレームワークを正しく理解して設計できれば同じことが実現できるじゃん、と主張するひともいるだろうが、私は「正しい理解」をするために必要な知識を覚えなければならないとしたら、Web標準に従っていて潰しの利くほうを選ぶ。

Andoridアプリの開発がしんどい

私は昔からAndroidアプリの開発をやってみたいと思っていたのだが、なかなか筆が進まない、もとい、タイプが進まないのはやはり開発言語がJavaであるというあたりが大きい。ビューがXMLであるというのもちょっとしんどい。もうちょっと簡単に書きたい。Hello worldを作ってみたきりあとは放置してしまっている。もうちょっと他に何か良い方法は無いのか。なぜGoogleともあろう企業がJavaとXMLによるコーディングのみしか提供しなかったのか。Go 1.4がAndroidをサポートというニュースをつい最近見たが、もう少し早くしてほしかった。欲を言えばGoだけでなくDartでも対応してほしいのだけど。

私はScalaに触れるまではC#が好きだったため、XamarinがC#によるAndroid開発環境を用意してくれているのはとても魅力的ではあった。が、これは無料で出来ることに制限がかかっている。だから超ドケチの私はこれで開発を始めるのもためらっていた。

が、Scalaで開発できるということを知り、かつ、Scalaを覚えた今はやる気が再熱しつつある。今は車比較サイトを作ってるのであまり時間がないが、それがひと段落したらモバイルアプリ版を作ってみるのも面白いかも…ということを考えている。