JAVAは刑事的に過小評価されています

無知なコンピュータサイエンスの学生の視点



画像




あなたはおそらくこの投稿のタイトルを読んで、「この男は何を吸っているの? Javaはどこにでもあります!」そうです、Javaは依然として業界を支配しており、世界最大のミッションクリティカルなアプリケーションのいくつかを支えています。しかし、Javaの普及は私が話していることではなく、Javaの周りの誇大宣伝について話しているのです。私は経験の浅いプログラマーと多くの時間を過ごします。経験の浅いプログラマーは何をしたいですか?プログラミング言語のようなツールについて心配し、自信過剰になります。私が出会ったCSの学生は誰もJavaを賞賛していませんし、そうすべきではないと思います。



若い/ナイーブな開発者(私自身を含む)は、パフォーマンスと正気を犠牲にして、新しい言語とツールをフェチ化するという罠に陥ることがよくあります。 Halp(現在は$ TEAMが所有)で働く前は、サーバー側のTypeScriptとほとんどロマンチックな関係がありました。 node.jsエコシステムが最もクールなものだと思いました:トランスパイルされたコード、リアルタイムデバッグ、巨大なパッケージライブラリ、さらには奇妙で断片化されたビルドシステムのアイデアが大好きでした。実際に開発に使って経験豊富なエンジニアと話をすると、魔法はすぐに消えてしまいました。



JSエコシステムは非常に新しいものだったので、私は不合理な愛着を持っていました。それは誇大広告でした。現実は私の期待に応えませんでした。今日、私はJavaの経験を積むにつれて、JavaScriptに期待する素晴らしいことを楽しんでいます。誇大広告が私をJavaに早く導いてくれなかったことにだまされたように感じます。Javaは書くのが楽しく、生産的で、新しい開発者の間で不公平な恐竜の評判を楽しんでいます。



人間工学がJavaを優れたプログラミング言語にしている理由です



これは過小評価されるべきではありません。Javaは書くのが楽しいだけです。これは主に、JetBrainsがIntelliJIDEAに導入したスキルによるものです。すべてが自動的に入力され、定義にすばやくジャンプし、findを使用するとうまく機能し、リファクタリングも簡単です。ただし、Javaが本当に優れているのは、サードパーティライブラリを使用する開発者の経験です。



ワークロードへの依存度が高く、業界のトレンド



私の経験は限られていますが、外部の依存関係を自由化する方向に風が吹いているように感じます。 発明されていないここはもはや流行していない、発明されていない流行している 。特に、JavaScript開発者は、左側の数字を入力するなどの些細な操作でも、サードパーティのライブラリを含める可能性が高くなり ます。サードパーティの依存関係への現在のアタッチメントは特に有害ではないと思いますが、アップストリームでのAPIの変更は、型指定されていないJS / Pythonコードベースに害を及ぼす可能性があります。



Javaでサードパーティのライブラリを使用する場合、メソッドに渡す必要のあるタイプを常に正確に把握しています。最も重要なことは、関数を誤用すると、エディターに赤い波線が表示されることです。図書館が広く使われていることを考えると、もっと多くの人がJavaに熱心に取り組むべきだと思います。



名目上のダイヤルは時間を節約します



動的/暗黙的/弱い/タイピングには多くの欠点があります。依存関係によってAPIメソッドが変更され、アプリケーションがビルド時ではなく実行時にクラッシュする場合、それは問題です。開発者がどのタイプを渡すかを理解するためにメソッドの実装に戻らなければならない場合、それは時間の無駄です。 TypeScriptとPythonの型ヒントはこれにわずかに対処しますが、追加のコードなしで実行時に渡された型をチェックする機能がありません。



型保護は私の最も嫌いなTypeScript機能です。基本的に、これは暗黙の型指定であり、自分で実装し、正しく実装されていることを信頼する必要があります。私の意見では、これは両方の世界の中で最悪です。次のことを考慮してください。



interface Dog {
    bark: () => void;
}

/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {
  return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};

if (isDog(dog)) {
    // TS now knows that objects within this if statement are always type Dog
    // This is because the type guard isDog narrowed down the type to Dog
    dog.bark();
}
      
      





指定された型の検証ロジックを作成する必要があるというAND型の宣言には、本当に心配なことがあります。上記のコード 、誰かが間違ったツールを使用していたようです。



TypeScript定義とは異なり、Javaの記名的型システムは、型定義を結晶化し、デフォルトの型保護を保証することにより、プログラマーの頭脳の負担を取り除きます。



最適化の責任の除去



Java開発者は、JVMを信頼して最高のアプリケーションを作成できます。マルチスレッドアプリケーションを実装している場合でも、ヒープに大量のデータを格納している場合でも、メモリ管理やデータの競合によって足を踏み外されないようにすることができます。これは主に、多くのフットガンを含むC ++よりも優れています。



これは、Javaの人間工学的経験の一部です。開発者が技術的な詳細についてあまり心配する必要がない場合、開発者は現在の問題により集中することができます。



生産性の聖杯



次の条件を満たす言語をいくつ覚えていますか?



  1. 品質パッケージマネージャーとビルドシステム(Maven)
  2. 公称セット
  3. 大規模なコミュニティ
  4. 自動最適化


適切なツールはJavaだけだと思いますが、他にある場合はお知らせください。



編集: Jwostyが指摘したように、JavaのライバルであるMicrosoft C#には、これらすべての特性と、さらに多くの/新しい言語機能があります。Unityゲームエンジン以外でC#を使用したことはありませんが、これから学習します。



大学のカリキュラムからの驚くべき欠席



私は現在、コロラド大学ボルダー校で勉強しています。これは素晴らしい学校ですが、CSで正確に知られているわけではありません。ただし、高校のコンピュータサイエンスのカリキュラムのほとんどは、CMUまたはスタンフォードから恥知らずに盗まれています。CUでの勉強中、私は次のプログラミング言語を使用しました。



  1. C++. : , , . . , , .
  2. Python Julia. , .
  3. Scala. Principles of Programming Languages, . Scala JVM Java, , Java.
  4. Web言語(HTML / CSS / JS)。これらは、業界のトレンドに関する1つのコースであるソフトウェア開発テクニックとツールでのみ使用されました。


私は今学期を終えており、Javaは一度も登場していません。残念だと思います。



結論



アプリケーションを構築する真の方法は1つではありませんが、Javaは、特にスタートアップや初心者のプログラミングコミュニティの間で、それに値する注目を集めていないと思います。型なし言語は便利なツールですが、大規模なアプリケーションを構築するためのデフォルトの選択ではないと思います。フル機能の開発者であり、Javaを広範囲に使用したことがない場合は、次のプロジェクトでJavaを試してみると驚くでしょう。



JavaとJVMは90年代と2000年代初頭に誇大宣伝されましたが、それらがなくなることはないと思います。 IntelliJとJavaで得た開発経験は素晴らしいものです。



なぜJavaが誇大広告をまったく失ったのか興味があります。プログラマーの文化史は十分に文書化されていません。理解があれば、 私にメールするか、コメントを残してくださいreddit / Hacker Newsに)。



All Articles