Javaをすすめる10の理由

 PHPユーザの方であろうか? PHPのシェア減少を気にして検索をかけてきてくださってる方もいるようである。そこで、というわけでもないが、この間はJavaをけなしてみたが、今回はJavaを改めてお奨めしたい。これはJava以外の陣営を取り込みたいというよりも、迷っている人の判断材料にしてほしいためにまとめたものである。
 以下に10の理由を挙げる。それぞれの冒頭に「アドヴァンテージ」と書いてあるのは、何に対して有利な理由かを表わしている。

ただである

アドヴァンテージVisual Studio、ベンダー製Cコンパイラ、他
 Javaコンパイラや実行環境は無料で利用できる。ソースコードテキストエディタだけで作成可能だ。これは、Visual Basic等に対するアドバンテージである。たしかに大規模プロジェクトではコンパイラや実行環境が有料か無料かは些細な問題である。だが、ほとんどの現場において、技術的リーダーはたゆまぬ自学自習を続ける勉強家であり、その多くは自腹を切ってまで勉強をしているのである。そんな技術的リーダーにとってコンパイラや実行環境が無料であることは大変ありがたいことである。つまり、コンパイラや実行環境が無料である言語のユーザーには、勉強家の技術的リーダーになりうる人材が多いと言えるだろう。本来、会社が出すべき研修費をそういったリーダーの個人的努力甘えて出していない体質ならば、なおのことJavaを推進すべきである。

強力なIDEもただである

アドヴァンテージVisual Studioベンダー製CコンパイラPHPPerl、他
 EclipseJavaのシェアを押し上げるのに少なからず貢献したのではないかということは多くの人がうなづけることであろう。それまでのJavaの開発環境といえば重いという常識を覆しただけでなく、「GUI時代のEmacs」などと形容され、開発環境という枠組みをも越える高機能なツールプラットフォームであるEclipseは多くのJavaデベロッパに支持されている。しかもこのEclipseは無償である。Eclipseには標準でJDTというJava開発環境がバンドルされているが、これは他のどの言語のフリーの開発環境よりも完成度が高いのではないだろうか。たとえば、PHPならば商用製品であるZend Studioに匹敵するほどのIDEツールを私は知らない(あるのならばぜひ教えていただきたい)。
 これはあくまで私個人的な意見であるが、IDEは初心者のためのツールではない。IDEはそれぞれの言語のプリミティブな状態での特徴を理解した上で、使ってこそパワーを発揮する(誤解なく使える)ものであろう。つまり、IDEは中、上級者向けのツールなのである。強力なIDEが無償であるということは、前述の勉強家の技術者リーダーのスキルをさらに押し上げるのに一役買うのに疑う余地はないだろう。

強力なインスペクタもただである

アドヴァンテージ他の多くの言語
 実は前出の2つのすすめる理由はそれほど重視していない。確かに重要なのだが、イマドキ無償のコンパイラや実行環境は腐るほどある。かのMicrosoftであってもC#コンパイラを無償で提供している。また、IDEについても、C#にはSharpDvelopという非常に強力なものがあるし、PHPにもZend Studioほどではないにしても必要十分な機能のあるフリーのIDEが存在する。
 しかし、このインスペクタ(分析ツール)に関しては無償なものはなかなかないのではないだろうか? どこがボトルネックになっているかを調査したり、ソースコード中のバグパターンを検出したり、メトリクス分析をしたりといったさまざまなツールがJavaのものなら無償で手に入るのである。よしんば他の言語のものも無償で手に入るとしても、Javaにはさらに大きなアドヴァンテージがある。それは、それらの無償のツールがEclipseで統一的に利用可能だということだ。つまり、小さなプロジェクトであっても、非常に洗練されたプログラムを提供することが可能なのである。

オープンである

アドヴァンテージVisual StudioPHP
 残念ながらSun Microsystemsが提供している「公式の」Javaコンパイラと実行環境は、オープンソースではない。しかしながら、Javaの仕様は複数の業界リーダを中心としたリクエストのもとで策定されている。Microsoft社製品はあきらめるにしても、オープンソースであるPHPがよく不意に(恐らくは開発もとのZend社の独断的判断のもと)仕様が変更されることに辟易しているユーザにとってはこれは特に注目すべきアドヴァンテージなのではないだろうか。

プラットフォームを選ばない

アドヴァンテージVisual StudioC/C++
 Windows上であっても、MacOS上であっても、Linux上であっても、UNIX上であっても同じようなプログラミングが可能なのがJavaである。業務では、ほとんど高級なUNIXしか扱わないという勉強家の技術的リーダーにとってもこれはたいへんなアドヴァンテージだろう。勉強のために自宅に高級なUNIXなどを所有するのはあまり現実的ではないからである。また、勉強家の技術的リーダーでないにしても、Javaなら各自のPCで開発してから、運用機やそれに近いテスト機に移して動かしてみてもほとんど問題なく動かせることができる。少なくともC/C++よりはずっと問題が少ない。php.iniで激しく挙動がかわるPHPのようなわずらわしさもほとんどない。

割と洗練されたオブジェクト指向である

アドヴァンテージC++PerlPHP
 Javaの言語仕様がオブジェクト指向言語として最高だとは言えないだろう。しかしながら、現在一般的に認知されていると言えるぐらいのシェアをもつ言語の中ではJavaの言語使用は洗練されているほうである。たとえば、C++の言語仕様が悪名高いのは周知のことである。また、Perl(バージョン5系)のオブジェクト指向実装はトリッキーである。PHPにしてもずいぶん立ち遅れている(バージョン5でだいぶましになったが)。

変数は宣言して使い、静的に型を解決する

アドヴァンテージPerlPHP等のスクリプト言語
 スクリプト言語によく見られる変数の自動生成や動的型解決が必ずしも悪とは言えない。ごく短いプログラムを手軽に作るには変数の自動生成や動的型解決のほうが良いとは思うが、それなりのWebアプリケーションを組むならば変数は宣言して使い、型は静的に解決したほうが無用なバグの温床にならずに済んで有利である。特にPHPは、参照された瞬間に変数が生成されるので、たとえば$flagという変数を$fragとtypoしてしまっても、動いてしまう(スクリプタがエラーを出さない)のである。しかも、$flagがよっぽどのことがないかぎり、nullのままになっているなどのシステムではなかなかこのバグに気づくことができないのである。

文字列リテラルが文字列型(Stringクラス型)である

アドヴァンテージC++
 C++にはSTLという標準ライブラリがあり、その中のstringクラスはCでの文字列処理にわずらわしさを感じていたCプログラマにとっては福音であった。しかし、C++では文字列リテラルは結局Cと同じcharポインタ型であっため、そこにひずみが生じることがよくある。それに対してJavaでは文字列リテラルはStringクラス型であり、文字列に統一的な操作が可能である。

ガベージコレクタがある

アドヴァンテージC/C++
 C/C++プログラマにとってもっとも頭の痛い問題である「メモリリーク」。Javaは、メモリ管理に必要なコーディングとそのテストにかかる工数を大幅に削減してくれる。

標準ライブラリが豊富である

アドヴァンテージC/C++
 C++になるとSTLによりかなりライブラリが充実したように見えるが、Javaはその比ではない。たしかにC/C++では長い年月を経ることによって実にさまざまなサードパーティ製のライブラリが生まれている。しかし、複数人にで開発をするにあたりどのライブラリを使うかを統一させるのもホネである。標準ライブラリが豊富であることは、制作物に統一感をもたせ、メンテナンス性の向上に寄与するのである。