Javaは嫌いって人もいるみたいだけど、実際どうなの?
これからJavaを学ぼうか迷う…
Javaについてネガティブな意見を耳にすると、実際どうなのか気になる人は多いですよね。また、これからJavaを学ぼうか悩んでいる人もいるはず。
そこで、本日は実務でJavaを使っているエンジニアの僕が個人的なJavaに対するネガティブな見解を述べていこうと思います。
もちろん、個人的見解なので万人がそうというわけではない点はご了承ください。
この記事はこんな人のために書きました。
- Javaが嫌いという意見が多いが、実際に使っているエンジニアの意見を聞いてみたい
- Javaは文字列の長さや環境構築に手間がかかる点から嫌われることがある
- 嫌われる点はあるものの、Javaは多くの開発で重宝されるプログラミング言語
文字列が長い
まず筆者がJavaを使う上でめんどくさいなと思うこととして挙げられるのは文字列が長いということですね。
標準モジュールや、様々なライブラリを使おうとした時に書く文字列が長くてめんどくさいという点があり、IDEが必須になります。モジュールの名前が長い上に中で呼び出すメソッド名も長いみたいなこともよくあります。
もちろんIDEを使うのでミスなどが起こる確率は低いですが、パッとコードを見た時に非常に見通しが悪かったり、やる気が削がれるという経験が筆者にはありますし、初心者の方がみたら「うわっ」となることは間違いないでしょう。
とはいえ、Javaは時代とともに継ぎ足し継ぎ足しされてきた過去があるのでこのように名前がどんどん長くなってしまったのは仕方ないという面もありますね。
equalsでないと値の比較ができない
次は、値の比較が=で行えないという点ですね。例えば、以下のような点ですね。
public class Main { public static void main(String[] args) { String test = "test"; String test2 = new String("test"); System.out.println(test == test2); } }
false
=では、ポインタを比較しているため、違うインスタンスということでfalseが出力されます。なので、中身の比較には、equalsを使う必要があります。
public class Main { public static void main(String[] args) { String test = "test"; String test2 = new String("test"); System.out.println(test.equals(test2)); } }
true
こういう仕様なのでこう書けば良いのはいいんですが、普通にめんどくさいですよね。=で比較できる方が直感的で良いです。
IDEが必須である
これは、上述したとおり各文字列が異様に長いこともあり生で書くと常に、タイポとの戦いや、コピペの沼にハマることになるのでJavaはIDEが必須言語と呼ばれています。IDEは便利なので筆者もよく使いますが、必須ということはどこでもその環境を用意する必要があるということなんですよね。
IDEを毎回入れるのはめんどくさいですし、IDEばかり使っていると生で全く書けなくなることもあり、それを問題視するかどうかはエンジニア次第ですが筆者は多少の問題があるとは思っています。
初心者のうちは何が違うかわからないけどなんとなくIDEの教えに従ったらうまくいったみたいなことが多発し、そこを理解しようとする作業をスキップしがちだからですね。
また、ひと昔前はJavaの開発やAndroidの開発ではEclipseというものが主流だった時期があり、これを利用したことによってJavaは嫌いだ!という風になったエンジニアもいると思います。
しかし今はJavaの開発ではIntelliJが主流でとても優秀なのでIDEの使いにくさでマイナスになることはあまりないと思います。筆者もIntelliJの有償版を愛用していますが、無料版でもJavaやKotlinなどはサポートされているのでJavaのIDEといえば、今はIntelliJ一択ですね。
環境構築の手間がかかる
Javaの環境構築には手間がかかります。詳しい解説は省きますが初心者の心を折るには十分ですね。
環境構築については以下に記事を貼っておきます。以下記事ではEclipseの説明がありますが、古い記事ですのでIDEで開発環境を整える場合にはIntelliJを使うべきのでそちらの記事も貼っておきますね。
JVMが遅い
JavaはJVM上で動作します。このJVMの実行が遅いという点もありますね。
こちらが最適化できてない問題もあるかもしれませんが、人によってはJavaは静的な言語だがJVMで実行されるのでもはやインタプリタみたいな声を聞くこともありますね。
これは余談ですが、Javaとの完全互換性を謳っているKotlinにはKotlin/Nativeというものがありこれは直接アセンブラにコンパイルできます。
言語を語るときは当時の時代的背景を理解しよう
ここまで、Javaに関するネガティブな意見を紹介してきました。
しかし、言語仕様について何か思うことがある際は、その時の時代的背景も一緒に理解する癖をつけることは大切です。イケてない仕様があってもその時代ではそういう仕様が流行っていたとか、求められていたという背景があったりします。
そこまで意識を向けるのは大変ですが、全ての事象には理由があるのでその理由を理解できるようになると寛容になりますし、さらに言語への理解が深まります。
まとめ
今回は、Javaのネガティブな意見をまとめて紹介しました。
Javaはオブジェクト指向を学ぶにはとても良いと思いますし、決してJava自体に欠陥があるといった話ではありません。
また、現在Javaで動いているシステムはとても多い上、新規プロダクトにJavaを採用することもこれからまだあると思うので、Javaを書くことが求められるシチュエーションというのはまだまだあると思います。
なので現在毛嫌いしている方やこれから学ぶ必要がある方も必要であればしっかり書けるようにしておきましょう!