web-dev-qa-db-ja.com

Javaが最新のWebアプリケーション開発に使用されないのはなぜですか?

専門家としてJavaプログラマーとして、私は理解しようとしてきました-なぜJavaが最近のWebアプリケーションにとって嫌いなのですか?

現代のWebスタートアップのうち、比較的少数がJava(Javaの全体的な人気度と比較して)を使用しているように見える)傾向に気づきました。これは、通常、「Java情熱を持って嫌いです。」というような応答を受け取ります。しかし、決定的な答えを出すことができる人はいないようです。

この同じWebスタートアップコミュニティがJava開発者に否定的に言及している-多かれ少なかれ、遅い、創造的ではない、古いことを暗示することも聞いた。

その結果、Ruby/Railsを入手するために時間を費やしてきました。基本的に、何が足りないのかを見つけるためです。しかし、主に自分の経験レベルが比較的高いため、「Javaを使用していれば、これをはるかに速く実行できる」と自分で考えざるを得ません。

しかし、Javaに重大な「欠落」が見られなかったため、同じアプリケーションを構築できませんでした。

これにより私の質問が表示されます

Javaが最近のWebアプリケーションで使用されていないのはなぜですか?

  • 言語の弱点ですか?

  • それはJavaの不公平なステレオタイプですか?それは古くからあるからです(それは古いテクノロジーに不公平に関連付けられており、その「モダン」機能の認識を受けていません)?

  • Java開発者の否定的なステレオタイプは強すぎますか?(Javaはもはや「クール」ではありません)

  • 他の言語で作成されたアプリケーションは、構築が本当に速く、保守が容易で、パフォーマンスが優れていますか?

  • Javaは、新しい言語に適応するには遅すぎる大企業でのみ使用されますか?

393
Cliff

現代の新興企業は、できるだけ早く市場に参入する必要があります。 Java Webアプリケーションをリリースするために、約6か月を費やす必要はありません。

たとえば、TwitterはRails/Rubyを使用して構築されましたが、スケーラブルでなくなると、JVMに移行しました。

開発プロセスが生産的でないことは言うまでもありません:(Rails/Django/Grails)のようなフレームワーク内にある間にコード->コンパイル->デプロイ:テストサーバーを実行->コード->物事を変更して何が起こるかを見てください。

JRebel を使用すると、コードの変更を即座に確認できます。

174
Chiron

私の経験では、Javaは小さなアプリケーションには過剰です。たとえば、1つのデータベーステーブルにブログエントリを保持する単純なブログは、もっと単純なもので実行できます。

私は通常、他の多くのシステム(メインフレームのバックエンドやデータベース、ピアWebなど)と通信するはるかに大きなWebアプリケーション(銀行や保険会社など)ではるかに優れているJavaサービスのバックグラウンドバッチ処理システム...すべて同じアプリケーションで)。

私が見てきたように、JavaEE Webアプリケーションのアーキテクチャーは、通常、小規模/単純なWebアプリケーションに必要なものを超えています。

4年以上前にpythonに切り替える前に、Java Webアプリケーションを10年間プログラミングしました。 pythonを使用すると生産性が大幅に向上し、短時間でより多くのことを成し遂げることができると感じています。正直なところ、Pythonで開発する方がはるかに幸せです。私の個人的な経験に基づいて、pythonがJavaよりも優れていると考える理由のいくつかを以下に示します。

Webフレームワーク:

私が最初にJavaでWebアプリのプログラミングを始めたとき、Strutsが出てきたばかりで、それは素晴らしいことではありませんでしたが、それは入手可能な最高のものでした。一連のStrutsアプリを作成し、途中で他のフレームワークにもいくつか作成しました。新しいフレームワーク(Tapestry、Wicket、GWT、stripe、grails、AppFuse、Play、RichFaces、Springなど)が出てきたときはいつでも試してみて、それがより優れているかどうかを確認しました。ほとんどの場合、ほんの少しだけ優れていました、そして時にはまったく良くない。遊びの枠組みは正しい方向への一歩だと言わざるを得ません。

バッテリーは含まれていません:

Javaの最も厄介な部分の1つは、使用するライブラリのほとんどがJava自体に含まれておらず、場所から大量のサードパーティライブラリを含める必要があったことです。 Apache commonsのように。他の大きなライブラリでhibernateのようなものを使用すると、Jar依存関係の地獄に陥ってしまいます。そこでは、hibernateがjarの1つのバージョンを必要とし、別のものが別のバージョンを必要とします。 jarファイルを間違った順序でロードすると、運が悪くなります。依存関係を管理するには、mavenやivyなどのツールに依存する必要があります。これにより、プロジェクトにより多くの依存関係がもたらされ、プロジェクトが巨大化します。最も単純なWebアプリ用に100MB以上のwarファイルがいくつかありました。

オプションが多すぎます:

何らかの理由で、Javaで同じことを行う方法が多すぎるようです。 Wikipedia( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java によると、Javaには38を超えるWebフレームワークがあります-))と23の異なるORM( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#Java )例。他の言語を見ると、より合理的な数になります。多くのオプションがあることは良いことだと考える人もいますが、それは開発者コミュニティで多くの無駄な努力につながるわけではなく、誰もが同じホイールを再発明し、あなたが持っている言語に新しい人であれば、選択肢が多すぎます。

アプリサーバー:

Java Webアプリケーションは非常に重く、実行するには多くのリソースが必要です。彼らは特にメモリが空腹です。他のソフトウェアと同様に、リソースフットプリントを削減するように調整できますが、他の言語と比較して、すぐに使える設定は恐ろしいものです。過去には、weblogic、websphere、Jboss、Tomcat、およびjettyを使用しました。私はEJBを使用せざるを得なかった最初の3つだけを使用しましたが、EJBを使用していない場合でも、それらは大規模なアプリサーバーであり、設定して正しく実行することが難しい場合がありました。 TomcatとJettyの方がはるかに優れており、セットアップも簡単ですが、リソースを独占しています。

アプリのホスティング:

独自のサーバーを実行していない場合、手頃な価格でJavaアプリの共有ホスティングを見つけるのは非常に困難です。主な理由は、Javaアプリは他の言語に比べてはるかに多くのメモリを必要とするため、共有ホスティングプロバイダーがRAMを実行してJavaサイト、同じ場所で5つのphpサイトを実行できる場合。つまり、Javaホスティングを提供するプロバイダーの数が少なくなり、Webサイトの実行にかかるコストが高くなります。

開発時間:

Javaで開発しているとき、Pythonでできることよりもずっと遅いことに気づきました。変更を加え、コンパイルし、再デプロイしてからテストする必要があり、これにより反復プロセスが遅くなります。私はこれをより速くする方法があることを知っていますが、それが最高であっても、私がpythonでできることよりもはるかに遅く感じました。

Pythonで同じことを行うためのボイラープレートコードもはるかに少ないので、コードの開発に費やす時間も短縮されます。

Javaは多くの部分で設計されすぎているように感じます。APIとインターフェースの多くは、やりたいことを複雑にする方法にすぎません。そして、誰もが彼らの兄弟は自分がJavaアーキテクトであると考えており、その結果、使用や開発が困難な複雑なシステムが大きくなります。

IDE:

Javaで開発していたとき、IDEに行き詰まったような気がしました。 IntelliJは市場で最高のIDEであり、Pythonのようなものはなかったため、pythonへの切り替えは困難でした。そのため、IDEの代わりに、通常のテキストエディターであるtextmateを使用しました。最初は大変でしたが、それは単なるテキストエディターであるため、非常に高速で応答性の高いアプリケーションでした。プロジェクト全体を数秒で開くことができましたが、IDEでプロジェクトを開きたい場合は、大量のRAMを搭載したマシンでは1分以上かかることがあります。 IntelliJのメーカーはpycharmと呼ばれるpythonエディターを用意しました。最初に出たときに私はそれを購入しました。しかし、PythonにはIDEは必要ないことに気づきました。テキストエディターで問題ありません。時々しなければならないJava Webアプリケーションの作業に戻るとき、テキストエディターを使用しようとしますが、まだそれを完全には習得していません。私が個人的にIDE for Javaをさらに必要とするのは、何かを台無しにすると、再コンパイルと再デプロイに時間がかかり、速度が低下するためです。

ORM:

最初にORMとしてHibernateを使い始めたとき、それは素晴らしいと思いました、それは問題があり、完璧ではありませんでしたが、以前にやっていたことよりも優れていました。 pythonプロジェクトでDjangoのORMを使用してアプリケーションを実行し、それが私の目を開くまでは、ORMが機能するはずの方法でした。そのプロジェクトの後、私は休止状態に戻りましたが、がっかりしただけで、DjangoのORMに戻ることを切望していました。もう1つの素晴らしいpython ORMはsqlalchemyです。これはDjangoのORMに似ていますが、少し異なります。 RORのORMの経験は限られていますが、私が覚えている限りでは、それもかなり良かったです。

テンプレート:

JavaのWebテンプレートシステムはそれほど良くなく、私はそれらすべて(タイル、フリーマーカー、速度など)を試したと思います。それらのほとんどは、基本的な機能のみを提供し、操作するのが面倒です。 Python側では、私の2つのお気に入りはDjangoテンプレートとJinja2です。これらには、テンプレートエンジンで必要なすべての機能があり、本当に使いやすいです。

135
Ken Cochrane

FrustratedWithFormsDesigner's 回答への追加:あなたの質問は、より小規模なサイトを対象にしていると思いますので、多くの人が考慮する必要がある重要な側面があります:ホスティングはPHPの場合はユビキタスですが、JavaまたはASPサイトの場合はただし、これはこれらの言語の欠点ではありません。

73
sebastiangeiger

Javaは絶対にですは、最新のWebアプリケーション開発に使用されます。特に、Webアプリケーションの範囲のやや大きい/より複雑な/スケーラブルな目的に到達すると、.

最新の生産的なツールとフレームワークに興味がある場合は、以下をご覧ください。

しかし、JVMプラットフォームでの真に最新のWeb開発は、Javaを直接使用するのではなく、Javaを使用するのではなく、新しいJVM言語のいずれかで行われると思います。 ]基盤となるライブラリとバックエンドインフラストラクチャの観点からバックボーンを提供するだけです。 Groovy( Grails )、Scala( Lift および Play )、JRuby( JRuby on Rails )とClojure( Noir 、Ring/Enlive + lots of custom frameworks)を例に挙げます。

新しいJVM言語スペースで起こっているすべての革新により、私は個人的にJavaが最終的に「サーバー側プログラミングのアセンブラー」になると思います。

70
mikera

Google、Amazon、LinkedInは最新のものと見なされますか?

Javaは最新のWebアプリケーションに使用されます。企業全体を見ると、Webアプリケーション(内部)で最も頻繁に使用される言語です。

とはいえ、Javaは、Web開発標準がすべての人にすべてのことをしようと試みた場合(おそらくまだそうである場合)の期間を通過しました。 Java Web開発のビルドサイクル。その結果、Java(EJB、Struts、JSFなど))は、すべての新しいパラダイムが克服しようとしています。

Java、言語は冗長です。それは賛否両論です(メンテナンスには素晴らしい、開発にはうんざり)。 Java)にまだ組み込まれていない最新の言語機能がいくつかあります。これにより、コーディング時間を大幅に削減できます(プロパティ、イベント、クロージャー、ジェネレーター、リストの理解など)。したがって、とはいえ、C#のネズミの巣にならない限り、成熟した言語に追加することは困難です。

最新のWeb開発で使用される多くの言語は動的に型付けされます。これにより、コードの記述時にコードを動的に再ロードできるツールが有効になります(これは、静的言語-jrebelでは達成が困難です)。 Web開発は高速な反復処理に適しているため、動的リロードは大きな利点です。これにより、グリーンフィールドプロジェクトの開発サイクルが大幅に短縮され、UIとUXを正しく取得しやすくなります(本質的に試行錯誤)。

静的言語もその位置を占めています。複雑で、何年も実行する必要があり、問題なく拡張でき、非常に高速で、完全にエラーがなく、静的に型付けされた言語(JavaまたはCなど)が望ましい)のバックエンドロジックの場合。

さらに、開発者の数/売上高が増加し、製品が成熟するにつれて、善意の人々がバグを急増させる可能性があります。適切に設計されたJavaプロジェクト(インターフェース、パターン、およびこれらのphp吸血鬼の聖水:))が実施する厳格さと規律は、長期的なリスクを減らすのに役立ちます。これは単体テストでも実現できますが、静的チェック(およびfindbugsやclangなどの静的アナライザー)から派生したセーフティネットは、手書きのテストでは再現が難しい組み込みレベルのコードカバレッジを提供します。誤解しないでください。単体テストと機能テストがあるはずですが、実際の組織は100%のカバレッジを達成することはありません。彼らがチェックするものについては、静的アナライザーが行います。

したがって、独立して開発されたコードのチャンク間に複雑な相互運用がある大規模なプロジェクト(コードサイズよりもチームサイズで定義)の場合、Javaなどの言語が依然として推奨されます。例には、大規模/複雑な金融ブローカー(ameritrade)、金融取引所(nasdaq、nyse、おそらく.netの失敗後のロンドン)などのWebアプリケーション、オンラインバンキング(ほとんどすべて)、電子メール(google)、オークション(ebay)など。

パフォーマンスとスケールの観点から見ると、JavaプラットフォームはWebアプリケーションのスケーラビリティとパフォーマンスの組み合わせであるため、Facebookのアプリケーションのパーティション分割のカウント方法によって異なります)。その大部分はRubyインフラストラクチャScala on Java VM失敗したクジラを海に戻すために他の大きな例を聞いたことがありますが、彼らは今私を逃れています。

セキュリティについても検討する価値があります。 Javaブラウザプラグインは、セキュリティの脆弱性の公平な共有に苦しんでいますが、Javaプラットフォーム自体は、作成されたより安全なプラットフォームの1つです。Java Webアプリケーションは非常に安全であるという評判があります。コーディングプラクティス、ライブラリ、およびアーキテクチャには、SQLインジェクションやバッファオーバーフローなどの攻撃を可能にする長い落胆した誤りがあります。他のWebプラットフォーム(Rails)は優れたセキュリティの評判を持っていますが、 Javaを超えるものはありません。

結論として、ほとんどのWebアプリケーションは技術的に単純です。簡単に言うと、Javaはしばしばやり過ぎです(Cで書いた昔のように:))。ただし、webappが複雑(バックエンドまたはその他)であるか、100人以上の開発者がいることが予想される場合、Javaは勝てません。

-

個人的には、Grailsは両方の世界で最高のものを提供するため、私はGrailsをよく使用します(JRubyについても同じことが言えます。Ruby世界で) 。

ところで-PHPは本当に不可解だと思います。PHPなぜなら、言語は読みやすさにおいてPerlとほぼ同等であり、VB。それは恐ろしい慣行を奨励し、維持するのがほぼ不可能であり、サードパーティのライブラリーが期待どおりに機能することはめったになく、そしてそれはラリー・ウォールを駆り立てるであろう構文を持っています...壁。私が思い付くことができる唯一の説明は、それが増分学習(VBのような)に向いているということです。つまり、プログラミング/管理についてほとんど知らなくても、何か便利なことを達成でき、一度に小さなチャンクで知識を広げることができます。採用の観点から言うと、多くのことを言う必要があります。しかし、何十億ものVBコーポレート/製造の世界では、おそらく頭を振って退職を計画しています。

41
user56365

さて、私は最近、DBへの基本的なCRUDアクセスを取得するために必要なコードが少ないため、新しいSpring Dataプロジェクトに本当に興奮したJavaの人に会いました。

いくつかのコマンドで、CRUD app Rails(dbアクセスだけでなく、ビューとコントローラー)を使用して)を構築できます。

(頭の上から:新しいプロジェクト、エンティティごとに1つのscaffoldコマンド、データベースを移行する1つのコマンド、サーバーを起動する1つのコマンド。)

言語とは何の関係もありませんが、それはすべてツールに関するものです。そして、動的言語は多くの定型コードを削除するツールとフレームワークを備えている傾向があるようです。 (ボイラープレートを生成する強力なIDEの不足を補うために。)

また、動的言語を使用すると、そのようなツールやフレームワークを簡単に作成できる傾向にあると感じています。私は、PadrinoやRails(Ruby Webフレームワーク)など)のコードを調べることができます。たとえば、Spring Rooのコードを調べるよりもはるかに簡単です。 Rubyしかし、私がJavaを知っているよりもはるかに優れています。

38
Robbie

Javaは近年「エンタープライズ」であると位置付けられています。これは、スタートアップが必要とするもののスペクトルの反対側にあります。 Webアプリケーションの開発では、4つのものが必要です。簡単なデータベースアクセス、優れた文字列操作、構文のシュガー、アプリに必要な多数の小さな変更を行うための迅速な反復プロセスです。

パフォーマンス、スケーラビリティ、および安定性は、優先度リストでは少し低くなっています。

また、Javaはコードを書くのが非常に不愉快な言語です。昨日、switchステートメントで文字列を使用するという革新的な能力を得ました。また、JavaScriptは非常にハッカー的な言語なので、フロントエンドを開発した後、 Javaに戻ります。

したがって、これらがwebstartupsがJavaを回避する理由だと思います。

24
Daniel Iankov

私は現在、「Javaが嫌い」な開発者がかなりいる会社で働いています。それも私を気絶させていました。確かに、Javaで利用できる技術のすべての蓄積を嫌います。このため、意思決定が非常に難しくなります。それはあなたがあまりにも多くの選択肢を持っているとき、あなたは選択肢がないのです。実際に機能するフレームワークを実際に思いつくには、何百ものフレームワークに時間を費やす必要があります。ほとんどのアプリケーションでは、標準のServeltアーキテクチャーはかなり複雑です。これは、Ruby、Djangoなどの場合には当てはまりません。言語ではなく、単一のフレームワークにすぎません。

開発者から聞いた最大の不満

  1. 構文が長すぎます。何かを印刷するには、System.out.printを記述する必要があります。エディターのような単純なVIを実際に使用して、数時間で作業コードを書き出すことはできません。
  2. 弱いテストフレームワーク。 JavaとRubyのテストフレームワークは非常に似ていますが、Rubyは、テストを簡単に利用できるようにすることで一歩前進します。これは、アプリケーションでDBを幅広く使用していますが、Webフレームワークの多くでさえ、テストについては考えていません。
  3. テンプレートは面倒です。比較的単純な言語をヌードルスープにします。
  4. クールではありません。ほとんどのJavaアプリケーションは巨大な会社で作成されています。これは官僚制に関連しており、開発者にはあまり適していません。Javaを考えるとき、人々はGoogleを考えません。Google== Python。それはまた、Y日にXを行うことを示す本が出てこないようにすることもたくさんあります。
  5. コンパイルしたくない。ほとんどの開発者にとって、コンパイルは10年前の現象です。 80年代にはCでそれは理にかなっていますが、現代のコンピュータはもっと多くのことができます。彼らはコンパイルされた言語でコードを書かない。 Javaは、コンパイルされてWebアプリケーションの記述に使用される非常に数少ない言語の1つです。
  6. Oops Concepts。開発者は静かにOopsドメインを採用していますが、完全に好きではありません。10でアプリケーションを作成する場合、好きではありません。各クラスが1つのことだけを行うクラス。100のファイルを開いて、時にはフレームワークを使用して、100のクラス間のやり取りを想像させます。プログラミングアクティビティ全体を雑用にします。これは、ほとんどの言語に当てはまる可能性がありますが、Java開発者はクラスが何をするかに多くの注意を払います。そのJava何百ものクラスを持つコードをしばしば思い付く開発者。これは多くの観点から良いことです。しかし、Java開発者以外は嫌いです。

つまり、全体的にJavaはプロジェクトの最初に急カーブを押し付けます。これは、多額の資金を投入することを意味します。これにJavaに接続された巨大なコミュニティを追加し、それぞれ異なる方法で考え、コミュニティ全体を率先して率いる人はいません。また、コミュニティが行った講演や会議でクールな新しいものをすべて披露することもありません。新しいクールな本はありません。Javaそれは数年前にあまりにも多くの異なる問題を解決するために使用されたためです。

18
arunmur

Java= Web開発を行うためのフレームワークは、かなりの学習曲線があり、必要なものに対してはやり過ぎであることが多く、物事を機能させるために必要な間接性の多くはただ...痛みを伴うものです。 ...と連携する。

私は以前、Spring/Java開発を行っている会社で働いていましたが、フレームワークはせいぜい扱いにくいものでした。私は、Strutsの開発に慣れている友人がいて、Strutsの方がさらに悪いと思っていた以外は、Springのフレームワークについて多くのことを言うのは楽しいことではありません。 Webフレームワークは、デスクトップアプリケーションやモバイル(例:Android)アプリケーションのようなものではなく、実際に把握するには時間がかかる非常に抽象的なアイデアがたくさんあります(ただし、プロであり、エンタープライズグレードのアプリのように本当に複雑なことをしています)。私はプログラミングが大好きJavaですが、Javaですか?それほどではありません。

私はRuby/Railsで個人的にプログラミングを行ったことがありませんが、Strutsを使用していた私の友人は現在Ruby Webプログラミングを行っており、Java Webプログラミングは、Rubyで達成するために必要なコードと複雑さがはるかに少なくなります。さまざまな構文と言語のルールには確かに習得曲線がありますが、アプリのプロトタイピングには、必要なコードの量の点で利点があります他の人が述べたように、スケーラビリティも考慮すべき問題であり、より成熟したアプリがより流行りの言語で頻繁に見られない理由の1つです。

14
Jessica Brown

それはコストとトレンドに帰着します。 Web 2.0スタートアップは、お金よりも才能のある30歳未満のビジョナリーによって作成されました(もちろん、私は一般化していますが、これは「平均的に」見られるものです)。彼はプログラミングをしているので、慣れ親しんだ言語を使用します(おそらく数人の友達と一緒に)。彼はおそらく独学のプログラマーです。

Javaはエンタープライズ環境としてターゲットにされてきました(Javaとは、言語、フレームワーク、および標準を意味します)。世界中のIBM、Oracle、BEAが企業を売りたいと思っている高価なツールがたくさんあります。

Javaを使いこなせるようになるための手順は複雑であり、コストも高くなります。その状況が変化していることは知っていますが、遅すぎますか?

スタートアップが牽引力を獲得した後、成長が始まります。才能のある開発者を採用することは困難です。ほとんどの「6週間でプログラマーになる」プログラムはJava(または.NET)を教えており、市場は「6週間のプログラマー」で飽和しています(奇妙なことに、開発者が7年と言う履歴書を目にしました6週間のプログラマーの知識を示す経験。6週間のプログラマーにとって、非主流の「エンタープライズ」以外の環境を使用するのは自然なフィルタです。RubyまたはScala求人要件外。これは、候補者にとって潜在的の最大の指標です。

知識には経験が伴いますが、献身的/情熱的なプログラマーは、その献身的/情熱を持っていない人よりも(平均して)より速く知識を獲得します。ギターを弾くのが好きな子供のように、父親が彼を作ったので、レッスンをしている子供よりも速くなるでしょう。

14
Michael Brown

Javaは複雑すぎる。私は大量のPHP作業を行っており、ほとんどの状況でそれはより簡単で高速です。サーバーにSSHで接続してphpファイルを開き、変更を保存して実行する機能は素晴らしいです。私が取り組んだいくつかのJavaアプリは、最も簡単な変更のために常に再起動を必要としました。 (常にそうだと言っているわけではありません)。さらに、PHPホスティングは安価ですぐに利用できます。

また、あなたが少なくともPHPで持っているものは、私のような14/15年前に静的HTMLで始めた多くの開発者だと思います。状況が進むにつれて、PHPをサイトに追加し始めました。簡単でシンプルで手頃な価格だったからです。何年にもわたって言語は成長し、謙虚な始まりを超えてその能力を拡大してきましたが、今ではそうでないことがたくさんあると私が思うものに一生懸命に取り組んでいます。

反対側では、ほとんどのPHP開発者がJavaを見ると、この巨大で非常に複雑な800ポンドのゴリラとして、18輪セミトラックを出て食料品店に行き、パンの塊。

私はJavaを学ぼうとしました。それは非常に長い曲がりくねった手根管誘発であるという私の第一印象です。さらに、それから始めて、おそらくJavaのベテランにとっては簡単に思える多くの質問を残しました。 OpenJDK、またはSun? Tomcat、またはGlassfish、または?さらに、Java本のすべてのイントロは、コマンドラインのコードを書き始めるように思われます。最近のほとんどの人は、スヌーズフェストだと思っています。

14
Cyrus

私のチームと私は現在 Java 6 + StripesでグリーンフィールドWebアプリケーションを開発しています。昨年、私はJava 6 + Stapler(Hudson/Jenkinsの有名な川口浩介によって開発された、やや未知のWebフレームワーク)を使用した別のグリーンフィールドWebアプリケーションにも取り組みました。

Javaは、現代のWeb開発に絶対に使用されています。確かにRubyや他の動的言語の「魅力的な」魅力はありませんが、プロジェクトが拡大し始めると、動的言語が良いものであると私は確信していません。

最新のJavaアプリサーバーは、パフォーマンスの点でASP.NETと非常に競争力があり、どちらも動的言語VMよりも桁違いに高速です。

誤解しないでください... Javaはalways最良の選択です(リモートではありません!)-どちらでもありませんalways間違った、または「古い」選択。

12
Daniel Pryden
  1. JavaはPHP/Python/Rubyよりも学習が複雑です
  2. Javaエコシステムは非常に複雑で、非常に大きく、初心者にはかなり混乱します
  3. Javaに関連する否定的な評判を持つ歴史的に悪いフレームワークはたくさんあります。時間の浪費を避けるためにどのフレームワークを知っている必要があります
  4. Javaビルドツールは複雑な方法です(maven&ant)
  5. Javaには、使いやすいモジュールシステムがありません(OSGIは複雑すぎる)
  6. EclipseなどのJava IDEは驚くべき機能を備えた非常に強力ですが、多くの経験がないと効果的なWeb開発を構成するのが困難です。
  7. サーバーとしてTomcatまたはJetty以外のものを使用している場合、WebSphere/WebLogic/JBOSSの起動時間が長いことに不満を感じるでしょう。
  8. Java EEは、分散トランザクションなど、多くの人にはない問題を解決します

専門的な開発に取り掛かった新しい開発者は、Rails、python、またはphpよりもJavaのMagnitudeが難しいため、簡単に習得することができます。

上記のすべてを踏まえて、スタートアップにJavaを使用することを決定しました。適切に構成されたJava開発環境は非常に生産的であるためです。適切に構成されたということです。

  1. 起動時間は10秒未満
  2. 適切に構成されたEclipseワークスペース。すべてのフレームワークがラングされ構成されています。
  3. ライブラリの優れた選択(Spring、Spring MVC、Spring Social、Spring Security、JPA、Hibernate、Velocityなど)
  4. SSDを備えた高速開発マシン
  5. Orielly Safariサブスクリプション
12
ams

約5年前、私と同僚は内部プロジェクトのプログラミングタスクを与えられました。コマンドの解析を必要とする十分に単純なタスク。

私は約80行のJavaコードで全体を思い付き、同僚は1週間、約20行のJavaクラスとはるかに多くのJavaコードを取得しました。同じことをする。言うまでもなく、彼のコードが選ばれました。

これで不思議に思いました。どこでも、複雑さが高く評価されました。 (私は最大のソフトウェア製品会社の1つで働いていました。)Javaは最適なツールであり、デザインパターンはコーディングの方法でした。

さて、シンプルさを拒むのは、それがマインドセットか、単なる傲慢なのか。ええと、私は常識が勝つべきだといつも思っていました。エンタープライズアプリケーションでも、単純なWebアプリケーションでも、基本的な使用例は同じです。正しく検証可能である必要があります。

いくつかの理由で、私はJavaをもう使用しません。しかし、要因の1つ-複雑さ-は、ソフトウェアの開発に関して、多数のJava開発者の一般的な考え方です。

動的言語のスケーリングに関しては、JVMは何十年にもわたる研究の結果です。 Rubyなどについても同じことがたくさんあります。

Scalaは非常に賢く実用的な言語だと私は思います。演奏する! with Scalaは、Web /エンタープライズアプリケーションの開発に最適です。

RubyとRailsが新興企業にとって輝かしい新しいものであるため、堅実なRailsの開発者を雇うことは非常に困難です。 Java devsの多さはよりビジネス上理にかなっているはずですが、それは実際にはあらゆるスタートアップの障害です。

12
Ar Wen

最近のインタビュー で、google plusのテクニカルリーダーであるJoseph Snarrが、アプリケーションがJavaサーブレットをフロントエンドに、JavaScriptをフロントエンドに使用する方法を説明しました。

だからあなたの質問に答えるためにJavaは今でも非常に近代的なWeb開発に使用されています。最近非常に多くの報道を受けている新興企業には向いていません。

スタートアップの多くが他のテクノロジーを使用している理由は、彼らがよりセクシーでオープンソースのプッシュをより広く公表しているからだと思います。

11
Greg Guida

質問は、「なぜJavaスタートアップや小規模なプロジェクトで使用されないのですか?」という質問です。Java確かに「最新のWebアプリ」で使用されます。Googleで、Javaは多くのサービスのバックエンドで使用され、クロージャコンパイルされたJSまたはGWTがフロントエンドで使用されます。問題は速度とスケールのいずれかです。スタートアップは実行可能な最小の製品を入手する必要があります。彼らは通常、1〜3人のエンジニアの小さなチームであり、パフォーマンスや保守性よりも反復速度を重視しています。スケーラビリティの問題やチームコードコードの保守の問題に対抗することは、「ありたい」問題です。その段階に達した場合、それは、初期の実装が顧客や投資を獲得するという最初のこぶを乗り越える手助けになった兆候です。その時点でアプリを書き直す余裕があります。

グーグルのような会社は、損失を吸収できるため、ユーザーを獲得できないかもしれないもののためにスケーリングを実装することに時間を浪費しているかもしれませんが、スケールアップのために物事を構築する贅沢を提供できます。

少なくとも、それは私の意見です。多くの「クール」、「ヒップ」、「モダン」な企業の多くは、反復速度とシンプルさが最大の要件である小さなチームで小さなアプリを構築しています。

9
cromwellian

Web開発とJavaについて述べたので、多くの人は最初にWebブラウザでJavaアプレットを使用するとうまく機能しないことを忘れがちですが、それだけでなく、アプレットの「サンドボックス」も完全には機能しませんでした。が開発され、Javaアプレットがブラウザで実行してローカルマシンデータにアクセスできるというセキュリティの問題がありました(クライアント側のセキュリティの問題)。確かにJavaはバックエンドアプリケーションとスタンドアロンアプリケーションで堅実でしたが、Java言語とJavaアプレット(ブラウザーで実行)を関連付けると、やや台無しになりましたWeb開発コンポーネントとしてのJavaに関する認識。彼らがこれから回復したとは思えない。

9
LocoTx

簡単な答え:生産性をベースにする学習曲線。

RoRのようなフレームワークベースのシステムは、言語/構文に「魔法」をかける傾向があります。基本的なRoR構文を簡単に立ち上げ、アプリを稼働させるのは非常に簡単です。

Javaが最初の言語であり、ツールとフレームワークが後に登場しました。したがって、まずJava=を学習し、次にSpring、Grails、またはスーパーIDEなどを学習する必要があります。Rubyのお気に入りの例では、セッターとゲッターは必要ありません。事実は、Java IDEも手動コーディングを取り除きました...しかし、それはまだソースにあります。このアプローチの利点は、フレームワークの下に、一貫した言語があることです。すべてJava開発者が作業できること。

このメリットは、時間が最も重要な小規模な新興企業にとっては疑わしいものです。通常、彼らはすぐに使えるフレームワークではできないことをほとんど行っていません。したがって、彼らは自分のRAD=選択したシステムを取得し、翌日アプリを稼働させることができます。

しかし、FacebookとTwitterを見ると、拡大するにつれて、すぐに使用できるフレームワークでは処理できないものを見つけたため、下位レベルのテクノロジーを使用する必要がありました。

フレームワーク開発者が何でも速く実行できるというこの神聖な戦争は偽物であり、必要なことの多くをより簡単に、より少ない学習曲線で実行できます。そして、多くの場合、それで「十分」です。問題に適切なものを使用してください。

7
Lucas McGregor

Java上の従来のWebアプリケーションは、適切に構造化されていますが、「迅速に開発」されているとはほど遠いものです。私はこれまで1つの完全なWebアプリケーション(Java/Tomcat/Struts)しか記述していませんでしたが、非常にうるさく、デバッグに予想以上に時間がかかり、ビジネスロジックレイヤーを実装するときに一般的に苦痛でした。 Javaの潜在的な防御において、それは私がJavaで書いた唯一のWebアプリケーションでした(私はJavaでシステムレベルのアプリケーションをプログラミングするのに慣れています)。二回目。

そうは言っても、私はPHPとC#でアプリケーションを作成しましたが、それらはJavaよりも動作が良く、許容度もはるかに高くなっています。それ以上に、RubyのRailsは、ロビーによると、データベースへの簡単なCRUDアクセスを可能にする、迅速なアプリケーション開発のために特別に作成されました。問題は、自分で開発するほとんどのWebサイトは、Javaが提供するカスタマイズのレベルを必要としない(そして、実行する必要がある)ことです。さらに、すべてのDB接続オブジェクトは手動で作成する必要があり、テンプレート化するのは簡単ではありません。より良いフレームワーク、特に Java 7の新しい動的言語サポート機能 を利用するフレームワークがあるかもしれませんが、私はまだ調査を行っていません。

7
Brian

Google App EngineはJavaをサポートしているため、EclipseをIDEおよび配備インターフェイスとして使用し、合理的に文書化されたGoogle APIを使用して、JavaでWebアプリ全体を記述できます。つまり、使用されていないか、使用できません。

6
Paul

「最新のWebアプリケーション開発」の定義方法によって異なります。スタートアップ、高速ターンアラウンドWebサイトを話している場合、その目的のために設計された言語とフレームワークを検討する必要があります。安定したスケーラブルなエンタープライズレベルのWeb開発を探している場合は、それらの理想をサポートする言語とフレームワークを探します。私の本では、これらは2つの非常に異なる目標です。前者にはRoR、Groovyなどが適していますが、後者の場合は一般的にJavaがより適切です。

6
cdkMoose

スタートアップでは、JavaとJRubyの両方を使用してAPIを実装することを選択しました。これらは互いに補完し合うためです。

インフラストラクチャ、プロセス分散、および通信については、Javaの堅牢性を活用していますが、APIエンドポイントの実際の実装については、JRubyを選択しました。型付き言語(Ruby)。

JRubyクラスの1つがボトルネックになっていることがわかった場合は、Java(基本的には行ごとの変換)で直接再実装します。これは、多くの計算を実行する必要があります。このコンテキストでは、JRubyはプロトタイピング言語のように動作します。

独自の動的クラスローダーを実装しました。つまり、サーバーを再起動せずにオンザフライでJavaクラスを変更できるため、選択に非常に満足しています。したがって、「コンパイルして毎回再起動する」の引数はあまり重要ではありません。

重要なのは、すべてのJava= EEのものを回避することです。それは巨大で扱いにくく、反アジャイルです。

5
David Semeria

私はまだJavaが多くのWeb開発で使用されていると感じています。しかし、それは通常、ビジネス志向ではなく、主にハイテク企業ではない種類の開発にあります。は、一般に、あまり魅力的ではなく、自分の仕事を推進しなければならない新しいスタートアップよりもオープンではなく、テクノロジーにもっと興味があります。したがって、それが多くの企業のWebサイトで使用されているとしても、おそらく知らないでしょう。彼らの技術スタックについて公に伝えることは本当に気にしないでしょう。

とはいえ、元の質問すべてにコメントします...

それは言語の弱点ですか?Python or Ruby、Javaは冗長であり、同様のことを行うにはより多くのコードが必要になる傾向があります。しかし、それは言語の機能だけでなく、それを取り巻くコミュニティーやそれらのツールを使用する開発者の種類でもあります。したがって、ほとんどのモジュールとツールPython、Ruby、PHPなどはオープンソースであり、Javaの世界よりも簡単に見つけることができます。これは、サービスの提供(および課金)に重点を置いているためです。たとえば、= Rubyコミュニティは本当にWeb開発を指向しているので、使用できるすべての開発者はRubyがWebプロジェクトの問題と利用可能なツールについて知っています。それはJava=開発者は、レポートシステムのような他の種類のシステムで作業できた可能性があります。もちろん、優れた開発者なら追いつきますが、平均= Java開発者はlについてそれほど心配していません新しいテクノロジーと新しい言語を獲得しています。

Javaの不公平なステレオタイプですか?それはずっと以前から存在しているためです(それは古いテクノロジーと不当に関連付けられており、「モダン」機能)?Javaはそれほど古いものではなく、公平であると、大幅に改善されています。約10年間、クールで適切なプラットフォームでした。しかし、それ以来、Ruby on Rails)のような新しい問題を念頭に置いた新しいプラットフォームがあります。Javaのコアセクターは主に企業ですさまざまな問題を抱える世界で新しいプロジェクトを探している人々はさまざまなツールを探してきました。また、Javaデザイン、マルチプラットフォームであることの主な利点は、今日ほど重要ではありません。前だった。

Java開発者が強すぎるという否定的なステレオタイプはありますか?(Javaはもはや「クール」ではありません) Javaはまだ「就職」を学ぶための言語です。したがって、気にせず、お金を稼ぐために何かを学びたいだけなら、あなたは少し学習を終えるJavaおよび改善のために二度と気にしない。繰り返しますが、知覚と可視性について多くのことです。多くの素晴らしいJava開発者がいますPHP開発者は多分あまり良くないかもしれませんが、ブログを書いてオープンソースに協力しているのですが、PHP開発者はJavaのものよりも優れています。あなたはそれらについて特定のフィードバックを持っているからです。

他の言語で記述されたアプリケーションは、構築が本当に速く、保守が容易で、パフォーマンスが優れていますか?構築がより高速であると思います。 PHPのような言語の原則、PythonまたはRubyは、常に変更できるソフトウェアを生成するのに非常に適しています。たとえば、動的型付けにより、インターフェースの変更が容易になります。 Java明確に定義されたインターフェースを持つことは重要です。これはより安定した(そして変更が困難な)インターフェースにつながります。これは新しいスタートアップでは非常に重要です。主な問題は前に製品を入手することです)パフォーマンスについては、ニーズを誤解し、手品を使用して必要なパフォーマンスを達成しようとすることは非常に簡単です。期間」または「MongoDBはWebスケールです」よりも現実は難しいです。

Javaは、新しい言語への対応が遅すぎる大企業でのみ使用されますか?間違いなく、すでにJava社内の開発者の既存のチームは、新しいプロジェクトに同じ言語を使い続けることを容易にします。これは、特に会社のコアがテクノロジーでない場合、「安全な賭け」として認識されます。 。しかし、とにかく、Javaは大企業でのみ使用されているわけではありません。Javaを使用するスタートアップはまだたくさんあります(たとえば、- FightMyMonster または Swrve はJavaを広範囲に)使用しますが、スタートアップシーンの一般的な傾向は他の言語を使用することだと思います。 PythonまたはPHP)は、Javaを使用するよりも「友好的」で「楽しい」言語として認識されているため、Rubyを使用する方がよりエキサイティングになります。

5
Khelben

これは本当ですが、Javaとそのエコシステムのためではありません。Javaを使用すると、大きな混乱とひどい嫌悪感を生み出す傾向があるためです。

物事を迅速に構築できる十分なフレームワーク(spring-mvc、grails、playなど)があります。 Javaエコシステムで作業するときに人々が得る知識の増加に伴う問題は、人々がシステムを過剰設計しているという事実です-あなたはもっと多くのことを知っており、それらを利用できます(ツールがあります)すべてのために)、そして「すべてが釘のように見える」。

あなたが「ハッキー」である場合、他の言語と同様にJavaでもほとんど同じことができます。以下がそのことを示す調査です。

49人のプログラマーの研究:静的型システムは開発時間に影響しなかった... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf

5
Bozho

すでに述べられていることを少し追加すると、多くは、何もない(文字通り)から機能するWebアプリケーションにどれだけ速く移行できるかに関係していると思います。

ホスティングプロバイダーを選択した場合でも、独自のインフラストラクチャ(EC2イメージなど)を選択した場合でも、今日のアイデアがすべてである場合、今からWebアプリケーションを作成するのは簡単です。私の経験では、Javaを選択することは、通常、より手間がかかり、多くの場合、コストも高くなります。

さらに、LinuxとPHP/Python/Rubyを使用する場合、ツールとプラットフォームは補完的であり、相互にサポートするように設計されています。 Javaでは、2つの世界(OSとJava)が互いに調和して動作していないように見える場合があります。

3
Matt Ryan

誰がそうではないと言うのですか?

Spring MVC + Spring Data JPAまたはMongo + Thymeleaf +テンプレート用のcoffee-maven-pluginからCoffee to JSトランスパイルができました。

3
Martin Spa

多くの人がJavaとWebアプリケーションの開発を、青と赤の大企業の巨大なJ2EEアプリケーションサーバーにバンドルされた恐ろしいJ2EEに関連付けました。 。

確かに、最近のJEE仕様と実装は軽量ですが、短期サイクルの迅速な開発プロジェクトに対してこのようなことを提案する前に、私はまだ3度考えると思います。

これは、JavaでのWebアプリケーション開発を行う標準ベースの方法です。選択肢は、他の回答でその多くが言及されており、選択肢が多すぎて、より複雑で紛らわしい状況を示しています。

他の言語は、この多数の代わりに単一のターンキーソリューションを描写しています。これにより、より重要な魚を揚げる必要がある場合に、この選択がより目的に合うように見えます。

3

あなたが思うよりもたくさん使われていると思います-使用は喫水線のすぐ下です。たくさんありますRuby on Rails wrappers厚い、ファンシーJavaサービスです。特に、ビッグデータに近づく…….

2
Wyatt Barnett

Javaはかっこよかった、Javaはかっこいい、Javaは将来的にかっこいいと思います。私はWebアプリを開発しています。Javaを使用しています。

Javaの主な問題は、実装の結果を表示するには中規模のチーム7〜10人が必要であることです。バックエンドの開発者は、ORMからアプリケーションフレームワークまでのアプリケーションアーキテクチャの知識が必要です。プレゼンテーション層。テーブル上の開発者にとってオプションが多すぎるため、問題が生じます。ORMを使用するかどうかは、どのORMフレームワークを使用するか、どのアプリケーションフレームワークを使用するか、フロントエンドを実装する方法?すべてこれにより、開発者は苦労し、エンドユーザーが無限に組み合わせて、開発者が馴染みのないフレームワークでこのテクノロジーを選択できるようになります。同じことは、IDEプラグイン、オプションが多すぎること、このバージョンのプラグインがこのバージョンのIDEなど)で動作するかどうかのインストール、構成、およびテストに費やされた時間の最後です。最後にホスティングが行われ、多くの開発Java Java web apps、gettの適切なWebホスティングがないため、アプリは公開されません。月額80ドルで1つのVPSを使用することは、あまりにも多くの開発者にとって選択肢ではなく、ほとんどのアプリケーションは複数のVPSを必要とします。

2
newphoenix

Webアプリケーションを作成するために、多くのJavaを使用しています。したがって、*language itsel* fに関しては、1つの(しかし大きな)問題しか見つかりません-複数行のサポートの欠如。これにより、純粋なJavaコードでの印刷/テンプレート化は非常に読みにくくなります。

しかし、実際の問題は優れたWebフレームワークの欠如です。私は多くのソリューションを使用してきましたが、どれも良いものや満足できるものと名付けることはできませんでした。

それらのほとんどは、実際にはXMLプログラミングです。 [〜#〜] jsf [〜#〜]では大量のXMLが生成され、ラベルをテキストフィールドの上部に再配置するなどの一般的な機能を変更する場合は、終了します複数の場所で同じ変更を行うことでアップします。はい、インクルードがありますが、PHPのインクルードと比較してください...

さらに、新しいJSFには、数年前にJavaScriptフレームワークに知られていた「追加」機能が含まれています...

[〜#〜] zk [〜#〜]は、JavaコードでWeb要素を作成できるため、変更が容易になるため( OOP正しく-継承など)を使用します。ただし、これはJavaコードがサーバー側で実行されるため、パフォーマンス上の大きな問題です。クリックするたびにパッケージをサーバーに送信します。

ええと、[〜#〜] gwt [〜#〜]は、私が使用した中で最高のWebフレームワークです。 Webデザインでのオブジェクトプログラミングを可能にします。画面上のすべての要素は、Javaオブジェクトで表されます。これにより、完全な柔軟性が得られますが...コンパイル時間は非常に長く、生成されたJavaScriptは最適ではありません。 JavaScriptの可能性を十分に活用していない(少なくとも私が使用していたバージョンでは、リフレクションはサポートされておらず、HashMapの致命的な実装)。

Velocityなどのテンプレートを使用できますが、上記のように、これらはPHPなどの言語によって提供されるテンプレートの可能性の貧弱なバージョンです。

したがって、それはJavaに対する嫌悪ではありませんが、PHPを使用するときに得られるWebアプリケーションの作成のサポートの欠如、Pythonなど...

1
Danubian Sailor

Java=の問題は、この言語が学校で学習されることです。そのため、この言語は新しいプログラマーに最も知られています。ですから、自分を大衆と区別したい場合は、新しい言語を学ぶ必要があります言語、Javaは皆さんの言語です。

2番目の理由は、学校または大企業でWebアプリケーションを構築する場合、教師またはすでに配置されている人々が、このアプリケーションをより速く構築するのに役立つ大量のJavaフレームワークを提供することです。しかし実際には、このようにして、Web(HTTP、HTML、CSS、Javascriptなど)を十分に理解せずにWebアプリケーションを構築します。この傾向は、RoRやPythonなどの他の言語ではあまり見られません。これらの言語を使用する開発者は、ウェブのより良い理解。

したがって、最新のWebアプリケーションを構築したい統計はRoRを使用することを好むPHPまたはPythonは、優れたWeb開発者、Webを理解しているだけでなく、プログラミング言語。

1

「モダン」という言葉が人気のある場合(ほとんどの報道で取り上げられる)、Javaが使用されない理由は非常に単純です。すべての「クールな子供たち」がRubyを使用しているためです。 _(または、Python、Clojure、Scala、または最近の「クール」なもの)。

これにはより深い意味があり、RubyまたはPythonを使用して「モダンな」Webアプリケーションを作成する同じ人々は、通常、非常に優れた革新者です。煩わしい問題をシンプルで効果的な方法で解決しながら、時間と脳力を節約するのが好きな人。これらは優れたプログラマーの資質だと言う人もいます。

これらの人々は通常、大企業がめったに行わない彼らのプロジェクトの周りで最もプレスを作成します。たくさんのオープンソースをしたり、ブログを書いたり、なんでもしてください。

したがって、これらの人々を、より簡単、より小さく、より速く、より簡単に問題を解決する方法が提供される動的言語の世界に引き寄せることは、簡単に理解できます。悲しいことに、これらの同じ問題を使用して解決するのは面倒で(彼らにとって)難しいため、すばらしいJava開発者である同じ人々がJavaバンドワゴンを成熟させて放棄することを意味します。

MVCフレームワークXで単純なWebアプリケーションを作成する場合、Rails/Djangoで100行のコードを記述/編集する必要があり、それとは反対に、同じことを行うにはJavaで10,000行のコードが必要です-それがいらいらするかもしれない理由は非常に明白です。

「Javaで重要な「欠けている」ものを見たことがないので、同じアプリケーションを作成できませんでした。」問題は、Rails/Django/Whateverで同じ量の経験がある場合、これらの2つのアプリケーションJavaと非Javaを互いに比較して、時間と労力などを測定する方法です。思いつくメトリック。

1
Evgeny

Drupalを設立したDries Buytaertから興味深い回答が得られました。彼の博士号はJavaに関するものでしたが、彼はdrupalにphpを選択し、後悔していませんでした。あなたはそれ(そして彼のコメントのいくつか)をここで読むことができます: http://buytaert.net/why-php-and-not-Java

DrupalがJavaで記述されている場合、クリティカルマスを取得することは非常に困難でした。

0
johanvdw