打ち首こくまろ

限界オタクの最終処分場

Javaがレガシーになる日(多分来ない)

プログラミングは好きなんだけど、「明日からJavaで開発してくれ」って言われたら本当にげんなりすると思う。「君は明日からExcel設計書マンになってくれ」と同レベルのげんなり。

大学の研究室ではJavaを使っていた。学部ではC言語を使っていて、実習ではTerapad(!)を使ってC言語コンパイラを書かされ、ほぼ発狂寸前にまで追い詰められた経験がある。今だったらEmacsプラグイン入れたりとか、モジュールごとにファイルを分離したりとかするんだろうけど、授業では全くそんなこと教わらなかったし、1ファイル2000行超のプログラムをただのテキストエディタで書いちゃうほどアホだった。

それに比べたらJava+Eclipaseなんてのはウンコと5000兆円ほどの差があって、ポインタも意識しなくていい、コーディンク途中でも候補をサジェストしてくれるIDE環境はほんと便利や、Java最高や! ってなった。

ところが、そこから他の言語を勉強するにつけ、それはダンボール住まいのホームレスがカプセルホテルを豪邸だと勘違いすることと同じようなものだと知った。世の中にはPythonとかRubyとかGoとか、Javaより5000兆倍優れた言語が一杯あることを知った。

Javaでは外部ライブラリは自分でダウンロードしないといけないめんどくさい。例えばPythonだったらpip install hogeでパッケージがインストールされるし、バージョンアップも簡単。Go言語はもっと進んでいて、import文に宣言するだけで例えばGithub上のライブラリをそのまま呼び出すことができる。簡単。

あと、Javaではビルド手順が煩雑で、ビルドする手順をantなりgradleなりで書かないといけない。得てして長大で複雑なスクリプトになりがちなんだが、Go言語ならgo buildとコマンド叩くだけで一撃。

というか、Javaそのものが複雑すぎる。何を書くにしても長大で、複雑で、厳めしいコードを書かざるをえない。Eclipse等のIDEを使わないとやってられないのだが、Eclipseも非常に重いし、使わない機能のアイコンが画面のそこらじゅうに散らばっててイライラする。地獄のような権威主義の権化のように思えてくる。

それに比べてPythonやGo言語ときたら、なんて描きやすくて親しみやすいんだ。Pythonスクリプト言語のためちょっとした処理なら手軽に書いて気軽に実行できる。もちろん、大きなプログラムをPythonで作ることは十分に可能だ。そして、同じ処理を書くにしても記述量が少なくてすみ、可読性も高く生産性も高い。Goはよりシンプルな言語だが、それでも表現力は極めて高い。

もうJavaなんて過去の遺産で、それよりも、PythonとかGoとかのモダンな言語の方が明らかに生産性が高いし、プログラマの幸福度も上がる。これは自明だ。COBOLのようにJava製のシステムを細々とメンテナンスする宮大工は必要かもしれないけど、今後新たなプロジェクトは鉄筋コンクリートよろしく現代の言語で組み立てるのが良いのではなかろうか。みんな異論はないですね?

Javaはレガシーだ! モダン言語最高!!!

そうもいかない。

そうもいかないのだ。第一、みんながそう思っていたら、弊社の案件だって95%がJavaC言語COBOLとか、そんなことにはなっていないのだ。そうもいかないのだ。

何故なのだ? 学習コストがあるのだ。

楽天よろしく、「お前ら今日から英語が社内公用語な」と言われたら誰だって困るし、僕も困る。同じように、Java一筋でやってたプログラマの人に「このプロジェクトはElixirでやっていきましょう!」と言っても、読めないし、書けない。プログラム言語は言語なので、みんなが使えるものでなければ使えない。

じゃあ学習するか、ともいかない。仮に生産性が上がったとしてもそれは開発の後半で、前半は不慣れな言語を触るため生産性が落ちるし、スタートダッシュも効かない。Javaで培ってきたノウハウが使えなくなって、大失敗してしまうかもしれない。スケジュールも立てづらい。使い慣れないチェンソー使って大怪我するよりも、昔ながらのノコギリ使ってギコギコやってる方が安全だし早い。そういう判断もある。

い、いや、Javaに比べてPythonの方が書いてて楽だし、楽しいよ? そうだ、現場の人を説得して、みんなでPythonを使うように決めよう! 多分、これもうまくいかない。

これ、社会に出てからわかったことなんだけど、技術者で技術のことに興味ある人なんて少数派で、ほとんどの人は晩飯に牛丼を食べるためにコーディングして、家賃を払うためにデバッグしてる。生きるために仕方なく身をやつしているのがエンジニアで、同じ給料が貰えて労働時間が短ければ、別にどんな職業でも構わない。

JavaからPythonに変わったところで、やることはロジックをキーボードで打ち出すことだし、面白くなさに変わりはない。むしろ道具が変わったことで、余計イライラするかもしれない。金を稼ぐことが目的だったら、昨日も明日も同じ仕事同じやり方で、楽に働いた方がいいに決まってる。

結局、PythonとかGo言語を使うことは我々正道エンジニア(爆笑)のオナニー行為でしかない。生産性も上がらず、安全性も下がり、楽しくもない。我々以外誰も得しない。Javaを使い続けた方が5000兆倍マシかもしれない。

例えばやる気に満ち溢れた若手だけのベンチャー企業やプロジェクトなんかでは、PythonやGo言語はメリットがあるなら積極的に使った方がいいと思う。ただ、プロジェクトの中に年季の入ったエンジニアや、下請け企業がいた場合、間違いなく破綻する。PythonもGo言語も、JenkinsもTravis CIもRedmineも、みんなが使えなかったら爆弾にしかならない。

少なくとも日本ではJavaは間違いなく生きながらえる。この職業に携わる人全てがJavaはクソだと感じるようになったとしても、それでも使い続ける。そうしてこの職業全体が腐っていくんだろうなと思う。それよりマシかもしれないけど。社会人がみんなやる気を持って仕事をしてるわけではないことは分かっていたつもりだったけど、本当にわかるのにちょっと時間がかかった。

う〜ん、何が言いたいのかわからなくなってしまった。