Node.jsとJava:開発者のマインドシェアをめぐる壮大な戦い

コンピューティングの歴史において、1995年はクレイジーな時期でした。最初にJavaが登場し、次にJavaScriptが登場しました。名前はそれらを新たに切り離された結合双生児のように見せましたが、それ以上の違いはありませんでした。それらの1つはコンパイルされ、静的に型付けされます。もう1つは解釈され、動的に型付けされます。これは、Node.jsのおかげで、ある種の衝突コースに移行した、これら2つの大きく異なる言語間の技術的な違いの始まりにすぎません。

あなたがその頃にいるのに十分な年齢であるならば、あなたはJavaの初期の壮大なピークを覚えているかもしれません。それは実験室を去り、その誇大広告メーターは固定されました。誰もがそれを、コンピューティングの完全な乗っ取りに他ならない革命として見ていました。その予測は部分的にしか正しくありませんでした。今日、Javaは、Androidスマートフォン、エンタープライズコンピューティング、およびBlu-rayディスクなどの一部の組み込み世界を支配しています。

しかし、そのすべての成功のために、Javaはデスクトップやブラウザで大きな牽引力を確立することはありませんでした。人々はアプレットとJavaベースのツールの力を宣伝しましたが、ガンクは常にこれらの組み合わせをグリッチしました。サーバーはJavaのスイートスポットになりました。

その間、プログラマーが最初にダムツインと間違えたものが独自のものになりました。確かに、JavaScriptはHTMLとウェブが世界にボーグを引っ張ったので、数年間タグ付けされました。しかし、それはAJAXで変わりました。突然、ダムツインは力を持っていました。

その後、Node.jsが生成され、開発者の頭をそのスピードで変えました。サーバー上でJavaScriptが予想よりも高速だっただけでなく、Javaやその他のオプションよりも高速であることがよくありました。Webページがより動的に成長するにつれて、データに対する小さく、迅速で、無限の要求の着実な食事により、Node.jsがより一般的になりました。

20年前には考えられなかったかもしれませんが、準双子は現在、プログラミングの世界を支配するための戦いに閉じ込められています。一方には、堅固なエンジニアリングとアーキテクチャの深い基盤があります。反対側には、シンプルさとユビキタスがあります。昔ながらのコンパイラ主導のJavaの世界はその基盤を維持するのでしょうか、それともNode.jsの速度と柔軟性が、JavaScriptがそのパスのすべてを食いつぶし続けるのに役立つのでしょうか。

Javaが勝つ場所:堅固な基盤

開発者が笑っているのが聞こえます。心不全で死にかけている人もいます。はい、Javaには不具合やバグがありますが、比較的言えば、それはジブラルタルの岩です。 Node.jsへの同じ信念は何年も先にあります。実際、JavaScriptのクルーがJava仮想マシンをテストするためにSun / Oracleが開発したのとほぼ同じ数の回帰テストを作成するまでには数十年かかる可能性があります。 JVMを起動すると、エンタープライズサーバーを支配することを決意した堅実なキュレーターから20年の経験が得られます。 

JavaScriptの世界は急速に追いついてきています。 Web全体の多くがJavaScript実行エンジンに依存している場合、開発者は何億時間もかけてすべてのエッジを磨きます。しかし、新しい機能は開発者ベースが吸収できるよりも速く増殖する可能性があるため、すべてのイノベーションには欠点があります。古い学校の開発者は、新しいECMAScript構文拡張機能で満たされたコードに混乱することがよくあります。この同じ新しいコードは、一部の古いブラウザを静かにクラッシュさせます。 CoffeeScriptやJSXのような革新的なプリプロセッサの無限の供給は、これらの機能を必要とする開発者にとっては素晴らしいかもしれませんが、ランダムなファイルを開いてすぐに理解するのが難しくなります。

Javaには新しい機能とオプションがありますが、ほとんどの場合、Javaは安定したプラットフォームです。これにより、長持ちするものを構築している開発者の生活がはるかに楽になります。

Node.jsが勝つ場所:ユビキタス

Node.jsのおかげで、JavaScriptはサーバーとブラウザーでホームを見つけます。片方のために書いたコードは、おそらく両方で同じように実行されます。人生で何も保証されていませんが、これはコンピュータビジネスで得られるものと同じくらい近いです。 Javaで何度もJavaScriptで何かを書くよりも、クライアント/サーバー分割の両側でJavaScriptを使い続けるほうがはるかに簡単です。これは、Javaで書いたビジネスロジックをサーバーからブラウザーへ。あるいは、上司は、ブラウザ用に構築したロジックをサーバーに移動するように要求するかもしれません。どちらの方向でも、Node.jsとJavaScriptを使用すると、コードの移行がはるかに簡単になります。

この世界でのノードのリードは拡大しているようです。Reactのような最も洗練されたWebフレームワークは、最後の1秒で、サーバーとクライアントのどちらでコードを実行するかを決定します。ある日はクライアントで実行され、別の日はサーバーで実行されます。一部のスマートロジックは、ロードまたはスペアRAMなどに基づいてオンザフライで決定を下します。一部のフレームワークは、JavaScriptをクエリとしてデータベースに送信して実行します。あなたのコードはどこでも実行されている可能性があり、はがきを家に送らないため、追いつくのが難しくなっています。詳細を考える必要がないので、ただ幸せになってください。

Javaが勝つ場所:より良いIDE

Java開発者は、Eclipse、NetBeans、またはIntelliJを使用しています。これらは、デバッガー、逆コンパイラー、およびサーバーと十分に統合された3つの一流のツールです。それぞれに長年の開発、熱心なユーザー、プラグインで満たされた強固なエコシステムがあります。

一方、ほとんどのNode.js開発者は、コマンドラインに単語を入力し、お気に入りのテキストエディターにコードを入力します。はい、Atomのような最高のテキストエディターの中には、ほとんど何でもできる精巧なプラグインのコレクションがありますが、それでもNode.jsはEclipseよりも古い学校のように感じます。間もなく、マウスをAtariジョイスティックに交換します。

一部の開発者はEclipseまたはVisualStudioを使用しており、どちらもNode.jsをサポートしています。もちろん、Node.jsへの関心の高まりは、新しいツールが登場していることを意味します。IBMのNode-REDのように、興味深いアプローチを提供するものもありますが、EclipseやIntelliJのように完全または支配的であるにはまだ遠いです。

奇妙なことに、開発者はこれらのツールを使用していないようです。コマンドラインは35年前にMacが登場すると消えるはずでしたが、Node.jsの開発者には誰も話しませんでした。オプションがあります。たとえば、WebStormは、多くのコマンドラインビルドツールを組み込んだJetBrainsの堅実な商用ツールです。

もちろん、コードを編集してジャグリングするIDEを探している場合は、Node.jsをサポートする新しいツールで十分です。しかし、心臓外科医が胸を開くように実行中のソースコードを操作しているときに、IDEに編集を許可するように依頼すると、Javaツールの方がはるかに強力です。それはすべてそこにあり、それはすべてローカルです。

Node.jsが勝つ場所:データベースクエリ

CouchDBやMongoDBなど、一部の新しいデータベースのクエリはJavaScriptで記述されています。Node.jsとデータベースの呼び出しを混在させるには、構文の違いを覚えておく必要はもちろん、ギアシフトも必要ありません。 

一方、多くのJava開発者はSQLを使用しています。Java DB(以前はJava開発者向けにJavaで記述されたデータベースであるDerby)を使用している場合でも、SQLでクエリを記述します。あなたは彼らが単にJavaメソッドを呼び出すと思うでしょうが、あなたは間違っているでしょう。データベースコードをSQLで記述してから、DerbyにSQLを解析させる必要があります。SQLは優れた言語ですが、Javaとは完全に異なり、多くの開発チームはSQLとJavaを作成するために異なる人員を必要とします。

さらに悪いことに、多くのJavaコーダーは、精巧なライブラリとスキームを使用して、SQLクエリからのデータをJavaオブジェクトに変換し、テンプレートに再キャストできるようにします。それはクレイジーなプロセスであり、最終的にはかなり無駄です。

Javaが勝つ場所:タイプ 

多くの真面目なプログラマーは、単純さと安全性の両方のために静的に型付けされたコードを好む傾向があるため、入門プログラミングコースの多くは引き続きJavaを使用しています。コンパイラが明らかなバグを見つけた後、コードはより厳密に感じられます。

ただし、JavaScriptは追いついてきており、一部の開発者はTypeScriptに切り替えています。これは、静的に型指定されたJavaScriptのスーパーセットであり、ブラウザーのJavaScriptスタックで実行されるものを吐き出す前にすべての型チェックの魔法を適用します。型が好きなら、JavaScriptを採用するにはこれで十分かもしれません。または、模倣をお世辞の誠実な形として認識し、最初から静的型付けを採用したJavaに固執することもできます。

Node.jsが勝つ場所:構文の柔軟性

JavaScriptは、不要なアラートボックスをポップアップし、フォーム入力を再確認するための単純な言語でした。次に、開発者コミュニティは、ブラウザ用の何かにトランスパイルできる言語のさまざまなバージョンを作成しました。よりクリーンな句読点の好みを満たすように設計されたいくつかの異なる構文を提供するCoffeeScriptの群集があります。よりクリーンであるという理由だけでHTMLとJavaScriptを混ぜ合わせたReact / Vueの群集があります。タイプ愛好家向けのTypeScriptと関数型言語愛好家向けのLiveScriptがあります。

Javaの世界でも非常に多くの創造性を見つけることができますが、何らかの理由で、多くのプリプロセッサでは表現されていません。Kotlin、Scala、Clojureなど、JVMのバイトコードに変換される言語は多数ありますが、どういうわけか、別々の言語として区別できるほど異なっているように感じます。すべてのプリプロセッサは、コードを定式化または句読するさまざまな方法を愛するJavaScriptプログラマーの生活をより楽しくします。

Javaが勝つ場所:単純なビルドプロセス 

AntやMavenのような複雑なビルドツールは、Javaプログラミングに革命をもたらしました。しかし、問題は1つだけです。仕様は、プログラミングロジックをサポートするように設計されていないデータ形式であるXMLで記述します。確かに、ネストされたタグを使用して分岐を表現するのは比較的簡単ですが、単に何かを構築するためにギアをJavaからXMLに切り替えるのは面倒です。 JavaScriptを使用すると、ギアを切り替える必要はありません。 

Node.jsは、以前はより単純なビルドでした。コードを編集してから「実行」をクリックするだけです。その時でした。ノード開発者がプロ​​セスを「改善」したので、JavaScriptのお気に入りの下位方言を取得して、実行可能なものに変えるプリプロセッサーを追加しました。次に、ノードパッケージマネージャーは適切なライブラリを見つける必要があります。ほとんどの場合、これは正常に機能しますが、機能しない場合もあります。その場合、別の手順で自分で作成しているアーティファクトの正しいバージョン番号を探すことに時間を費やしています。そして、アーティファクトリポジトリに何らかの間違いを犯した場合、そのバージョン番号が撃たれ、走行距離計のホイールをもう一度回す必要があります。

Javaには、Node.jsメソッドと非常によく似た複雑なビルドプロセスもありますが、これ以上複雑になったようには感じられません。どういうわけか、MavenとAntはJavaFoundationの一部のように見えます。ラフエッジの多くは長い間なくなっており、ビルドはより頻繁に機能します。ビルドの煩わしさの絶対的な尺度があれば、2つの言語は似ているかもしれませんが、JavaScriptの複雑さが急速に爆発しているということは、Javaが勝つことを意味します。

関連ビデオ:Node.jsのヒントとコツ

この解説動画では、ノード開発エクスペリエンスを向上させることができるいくつかのテクニックを学びます。

Node.jsが勝つ場所:JSON

データベースが答えを吐き出すとき、Javaは結果をJavaオブジェクトに変換するために精巧な長さになります。開発者は、POJOマッピング、Hibernate、およびその他のツールについて何時間も議論します。それらの構成には、数時間または数日かかる場合があります。最終的に、Javaコードは、すべての変換後にJavaオブジェクトを取得します。そして、構成に関しては、Javaの世界は依然としてXMLに固執しており、開発者が心配する理由を増やすために2つの主要なパーサーを提供しています。

今日、多くのWebサービスとデータベースは、JavaScriptの自然な部分であるJSONでデータを返します。JSONは現在非常に一般的で便利なため、多くのJava開発者がこの形式を使用しており、Javaライブラリとしても多くの優れたJSONパーサーを利用できます。しかし、JSONはJavaScriptの基盤の一部です。ライブラリは必要ありません。それはすべてそこにあり、行く準備ができています。

Javaが勝つ場所:リモートデバッグ

Javaは、マシンのクラスターを監視するための素晴らしいツールを誇っています。JVMには深いフックがあり、ボトルネックと障害を特定するのに役立つ精巧なプロファイリングツールがあります。Javaエンタープライズスタックは、地球上で最も洗練されたサーバーのいくつかを実行しており、それらのサーバーを使用する企業は、最高のテレメトリを要求しています。これらの監視およびデバッグツールはすべて非常に成熟しており、展開する準備ができています。

Node.jsが勝つ場所:デスクトップ

いくつかのJavaアプレットが実行されている可能性があり、クリックして実行できるJava JARファイルをまだいくつか保持していますが、ほとんどの場合、デスクトップの世界はほとんどJavaフリーです。一方、JavaScriptは、ブラウザーがデスクトップのほとんどの役割を消費するにつれて、ますます多くのアクションをキャプチャし続けます。MicrosoftがOfficeをブラウザで動作するように書き直したとき、サイコロが投げられました。それでも疑問がある場合は、Electronのように、Webコードを取得してスタンドアロンのデスクトップアプリに変換する興味深いオプションがあります。

Javaが勝つ場所:ハンドヘルド

Androidアプリは多くの場合Javaで記述されており、新しい電話の90%が何らかのバージョンのAndroidを実行しています。電話はすべてに十分対応できるため、多くの人はもはやデスクトップを使用していません。

もちろん、少し混乱があります。多くの開発者は、iPhoneとAndroidの両方のモバイルブラウザを対象とするNode.jsWebアプリを作成しています。これがうまく行われていれば、パフォーマンスは十分に良いことがよくあります。