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


393

プロのJavaプログラマーとして、私は理解しようとしました-なぜ現代のWebアプリケーションでJavaが嫌いなのですか?

私は、現代のWebスタートアップのうち、比較的少数の割合がJavaを使用しているように見える傾向に気付きました(Javaの全体的な人気と比較して)。これについていくつか質問したところ、「Javaは情熱的に嫌いだ」というような返事を受け取りました。しかし、誰も実際に決定的な答えを出すことができないようです。

また、この同じWebスタートアップコミュニティがJava開発者を否定的に言及していることも聞いています。

結果として、私はRuby / Railsを手に入れるために時間を費やしました。しかし、主に相対的な経験レベルのために、「Javaを使用している場合、これをはるかに迅速に行うことができます」と考えることはできません。

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

それは私の質問に私をもたらします

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

  • それは言語の弱点ですか?

  • Javaはあまりにも長い間使用されてきたため、Javaの不公平なステレオタイプですか(古いテクノロジーと不当に関連付けられており、その「現代の」機能に対する認識がありません)。

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

  • 他の言語で記述されたアプリケーションは、構築が非常に速く、保守が容易で、パフォーマンスは向上していますか?

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


142
私はあなたが間違っていると思う:それはまだ使用されている、それはちょうどクールな要因を失った。

41
@Graham Lee:Javaはこれまでクールでしたか?私は何かを見逃したに違いない。まあ、私はそれが冷たいコーヒーだと思うが、クール?主な理由は、Java、特にエンタープライズJavaフレームワークが非常に過剰に設計されているためだと思います。プラットフォームの分散/バランシング/スケーラビリティ機能が必要であり、均一性のためにJavaで実行されるフロントエンドのフレームワークも使用したいので、それらを軽量と考えることはできません。
ファルコン

20
たぶん、それは現代ではないからですか?:PそしてJava 、プログラミングからハッキングの部分を捨てたからといって、決してクールではありませんでした。
back2dos

28
@Falcon Javaは最初に導入されたときはクールでしたが、SunはJavaを誇大宣伝しました。
マフムードホッサム

11
@Falconでは、Java EE 6のJSF 2.0でWebアプリケーションを作成し、それをあなたの経験と比較する必要があります。嬉しい驚きがあります。

回答:


174

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

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

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

良いニュースは、JRebelを 使用すると、コードの変更を即座に確認できることです。


81
Play FrameworkもRuby on Railsに似ていますが、Java用です。コード->ブラウザを更新します。
ジョナス

34
誤解を取り除いてください。多くの人が考えているように、Java EEはJavaサーバー側の唯一のものではありません。
ジョナス

22
Facebookも同様のことを行います。彼らのコードベースはPHPにありますが、速度とスケーラビリティの問題のため、PHPをC ++にコンパイルするコンパイラー(HipHop)を作成しなければなりませんでした。誰もがルビーとPHPの素晴らしさを語り、すべてのサイトがそれらを中心に構築されていることをおもしろいのですが、それらの非効率性を見ると、ほとんどの大規模な組織は別のものに切り替える必要があります。正しく思い出せば、Craigs Listには、まさにこの理由でC / C ++で書かれた多くのバックエンドコードがあります。
キブビー

28
1)Eclipseを使用すると、入力時にコンパイルが行われ、ほとんど気付かないでしょう。また、Eclipse内でTomcatを実行すると、1秒以内にアプリを再起動できます。私はアプリを再起動してもほとんど邪魔されません2)特効薬はありません。Rubyや他の言語では、10倍速くなることはありません。Java開発の問題は、多くの場合、時間の増加です。しかし、自分が何をしているかを知っていれば、10分未満でプロジェクトに取り組むことができます。
アレックス

5
Javaとその他の静的言語には、2つの大きな利点があります。ほとんど心配のないリファクタリングと、ドキュメントなしのAPI発見です。
エランメダン

136

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

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

私が見たところから、JavaEE Webアプリケーションのアーキテクチャは、通常、小規模/単純なWebアプリケーションに必要なものよりも多くなります。


5
「小さな」アプリケーションの場合、これはWebsphereなどのモンスターアプリケーションサーバーで作業する必要がある場合(これが「標準」であり、会社が使用しているため)、さらに当てはまります。 ..なぜ、なぜめちゃくちゃになった管理コンソールで作業しなければならないのですか?ため息
...-ジャレイン

7
@Jalayn:私の経験では、チームAの管理WebSphere、チームBのTomcat、チームCのGlassfish(または他の何か)の管理ではなく、すべてのアプリケーションサーバープログラムを1つだけ維持したいので、...あまりにも感じますが、はい、それは私にとってもイライラしています。
FrustratedWithFormsDesigner

3
これはJava EEにも当てはまりますが、Java WebアプリをRuby on Railsと同じくらい軽量で生産的にするPlay Frameworkがあります。
ジョナス

9
新しいJava 6 EE-特にWebプロファイル-では、非常にシンプルなWebアプリケーションが可能になります。

4
@ThorbjørnRavnAndersenアプリは簡単かもしれませんが、フレームワークを理解することはそうではなく、AntやMavenのような主要なツールを理解することでもありません。初心者の学習曲線は巨大で、頭字語の入れ子のネストされた層、仕様(例:JAX-RS)と実装(例:ジャクソン)の混乱などでいっぱいです。自分が何をしているかを実際に理解したい場合、簡単なことをするのは非常に複雑です。
クレイグリンガー

135

4年以上前にPythonに切り替える前に、10年間Java Webアプリをプログラミングしました。私はpythonを使用する方がはるかに生産性が高く、短期間でより多くのことを達成できると感じており、正直なところ、pythonで開発する方がずっと幸せです。私の個人的な経験に基づいて、PythonがJavaより優れていると思う理由のいくつかを以下に示します。

Webフレームワーク:

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

含まれていないバッテリー:

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

オプションが多すぎる:

何らかの理由で、Javaで同じことをする方法が多すぎるようです。Javaのウィキペディアによる(38以上のさまざまなWebフレームワークがありhttp://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java)と23種類のORMの(http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#は、 Java)いくつかの例を挙げます。他の言語を見ると、より適切な数になっています。たくさんのオプションを持つことは良いことだと思う人もいますが、それは開発者コミュニティで多くの無駄な努力につながるわけではなく、誰もが同じ車輪を再発明しています。選択肢が多すぎます。

アプリサーバー:

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

アプリのホスティング:

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

開発時間:

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

また、Pythonで同じことをするための定型コードがはるかに少ないので、コードの開発時間も短縮されます。

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

IDE:

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

ORM:

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

テンプレート:

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


10
私は多くの点であなたと一緒ですが、いくつかの問題を取ります。ループのコンパイル/テスト:Eclipseの動的Webモジュール、および/またはJRebelを使用してください。すばらしいです。重さ:JBoss AS 7は非常に軽量で高速です。EEが必要ない場合は、TomcatまたはJettyを使用できますが、これらはほとんどありません。テスト:Arquillianは、どの言語でも使用した中で最高のテストツールですが、使用できるほど成熟しているだけです。依存関係の地獄:Mavenを使用するだけです。これは、JAvaの標準で義務付けられた部分である必要があります。
クレイグリンガー

上記のすべてが、「バッテリーが含まれていない」という問題に追加されることに注意してください。これは大きな問題です。Java EEは、独自のフレームワークを構築してからアプリを構築することになっているサブフレームワークのように感じます。非常に非効率的です。また、すべてのツールは恐ろしくバグが多く、JSF2は開発者の生産性を破壊する手段にすぎません。
クレイグリンガー

2
また、重要な点を見逃したと思います。学習曲線バグが本当に物事を遅くします。
クレイグリンガー

@CraigRinger私はEclipseの動的WebモジュールまたはJRebelを使用したことがないので、あなたは正しいです、それはなくなっているかもしれません。
ケン・コクラン

2
IntelliJが気に入ったら、同じコアに基づいたPyCharmを試してください。
タムリン

94

スタートアップは光沢が欲しい。光沢が何であれ:RoR、Groovy、Grails、OOP w / PHP、Foobar、Wibble、Narfなど

エンタープライズは、安定性、信頼性、スケーラブル性を求めています。Javaと.NETがその法案に適合しています(正しく行われた場合)。

現在の仕事:金融サービス。プラットフォーム:ColdFusion(基本的にJavaタグライブラリ)およびJava。

以前のギグ:

  1. 教育試験サービス-ColdFusion
  2. ハイリスク保険-ColdFusionおよびJava
  3. 401k-ColdFusionおよびJava
  4. 旅行-内部ColdFusionアプリを備えたJava
  5. 証券-ColdFusion(Java以前のバージョン)

これらはすべて、大容量でセキュリティの高いサイトです。これらの企業のいずれもPHPを検討したことはなく、RoRを見て、あまりにも多くの問題を見た人もいました。401k社には、有能な開発者と.NETアプリケーションを実行する姉妹会社があり、アプリは毎週クラッシュし続けていました。彼らは最終的にそれをJavaに変換し、安定性を獲得しました。

Javaを軽lookしているのは、Javaを実際に経験していないか、ほとんど経験していないか、実装が貧弱で、現在は内気な人だけです。彼らはすべてのクールな子供たちがそれを使用している場合、光沢と姿を見る、なぜ私は?


23
「401kの会社には、有能な開発者と一緒に.NETアプリケーションを実行する姉妹会社があり、アプリは毎週クラッシュし続けていました。最終的にJavaに変換し、安定性を獲得しました。」笑:)、反対のケースを聞いたことがあります。
デン

12
もちろんあります。Webアプリケーションには、コードを書くだけではありません。サーバーの調整方法、最適なSQLの記述方法などを知る必要があります。その会社には2人の.NET開発者がいて、実サーバーの管理者はいませんでした。私が一緒にいた会社を買収した会社も、そのアプリを取り引きしました。彼らは大規模なJavaショップであったため、安定性を保証するためにより多くのリソースを利用できました。
エイドリアンJ.モレノ

48
あなたがその文を原因と結果として述べていることを書いたことは私には不誠実なようです。Javaへの変換=安定性の向上?私たちは皆、それが理由ではないことを知っています。また、ColdFusionのすべての経験についてごめんなさい;)
ヨルダン

3
公平すぎると、投資家は今年の風味を見たいと思う傾向があります。しかし、個人的には、見つけるのが難しい非常に高品質のJava開発者を除いて、迅速なプロトタイプ開発のためのより悪い選択を考えることはできません。
エリックReppen

9
見つけるのが容易ではない非常に高品質のJava開発者 -確かに。
luis.espinal

73

加えFrustratedWithFormsDesignerの答え:私は小さいサイトに対するご質問より多くのターゲットが、あなたは多くの人々のために考慮する必要がある重要な側面があることを推測するので、ホスティングは、 PHPのためのユビキタスですが、JavaやASPサイトのためにその困難。ただし、これはこれらの言語の欠陥ではありません。


ただし、これは変更されたと思いますが、今では無料でGAEでJava Webアプリをホストできます。
マフムードホッサム

Javaのホスティングの場合は+1。ASP.Netは見つけるのが難しくなく、安価です。共有ASP.Netホスティングに月8ドルを支払います。一方、私はJavaでサイトを立ち上げたいと思っていましたが、Javaを実行する共有ホストを見つけることができず、VPSを使用することは学習プロジェクトに興味がありません。
ジェッティ

9
+1。Javaの場合よりもPHPのサーバーで多くのサイトをホストする方がはるかに簡単であり、さらに、JavaよりもPHPの安価なWebホスティングソリューションを見つける方がはるかに簡単です。
ジョナス

あなたは正しい@Mark、修正されました。
セバスチャンガイガー

1
@Kibbee- Arvixeそれが私が使う人です。私が持っているpersonalASP Proの計画を。
ジェッティ

70

Java 、最新のWebアプリケーション開発に絶対使用されます。特に、Webアプリケーションの範囲の少し大きく/複雑で/スケーラブルな終わりに到達したら

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

しかし、JVMプラットフォームでの最も真に最新のWeb開発は、Javaを直接使用するのではなく、新しいJVM言語の 1つで行われる可能性が高いと思います。Groovy(Grails)、Scala(Lift and Play)、JRuby(JRuby on Rails)、Clojure(Noir、カスタムフレームワークのRing / Enlive + lots )で行われている多くのWeb開発があります。

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


Vaadinは、イントラネットおよび大企業のアプリケーションを作成するための優れたツールです。それは私が推測するスタートアップにはあまり適していない。それを変更するのは難しすぎるため、見た目を受け入れる場合を除きます。
-naugtur

7
同意した; Java EE 6は、JSF2をドロップし、健全で生産的な何かを使用するとすぐに素晴らしいものになります。しかし、学習曲線は依然として膨大です。
クレイグリンガー

1
Tapestry5(tapestry.apache.org)を最新のJava Webフレームワークのリストに追加できます。
ニームプラーク

@CraigRinger JSFは簡単です。あなたのコメントは質問そのもののように読みます:宗教的な暴言
-jwenting

@jwentingさて、3年になりますので、それ以来、ドキュメントと外部ツールの点で少し改善されています。私はそれで働いていたEE 6スタック上ではmoreso Glassfishの3サポートする場合は、恐ろしいfrickinだった 7 AS
クレイグ・リンガー

41

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

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

とはいえ、Javaは、Web開発標準がすべての人にすべてのものになることを試みた(おそらく今でもそうである)期間を経ました。「繰り返さないでください」は、XML地獄と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失敗後のロンドン)、オンラインバンキング(ほとんどすべて)、電子メール(google)、オークション(ebay)などの大規模/複雑なWebアプリケーションがあります。など

パフォーマンスとスケールの観点から見ると、Webアプリケーションのスケーラビリティとパフォーマンスの組み合わせ(facebookのアプリケーションパーティショニングのカウント方法に依存します)がJavaプラットフォームを超えるものはありません。たとえば、Twitterは、失敗したクジラを海に戻すために、Java VM上でScalaのRubyインフラストラクチャの大部分を書き直さなければなりませんでした。私は他の大きな例について聞いたことがありますが、それらは今私をそらします。

また、セキュリティを考慮する価値があります。Javaブラウザプラグインはセキュリティの脆弱性をかなり抱えていますが、Javaプラットフォーム自体は、作成されたより安全なプラットフォームの1つです。Java Webアプリケーションは、非常に安全であるという評判があります。それは、SQLインジェクションやバッファオーバーフローなどの攻撃を可能にするコーディング慣行、ライブラリ、およびアーキテクチャに長らく落胆されてきたミスです。他のWebプラットフォーム(レール)のセキュリティ評価は良好ですが、Javaを超えるものはありません。

要するに、ほとんどのWebアプリケーションは技術的にシンプルです。単純なことですが、Javaはしばしば過剰です(Cで記述した昔のように:))。ただし、webappが複雑(バックエンドなど)である場合、または100人以上の開発者がいると予想される場合、Javaに勝るものはありません。

-

個人的には、Grailsをよく使用します。これは、両方の長所を備えているためです(Rubyの世界でますます人気が高まっていると聞いているJRubyについても同じことが言えます)。

ところで-PHPの台頭は本当に不可解だと思います。言語としてのPHPは、読みやすさではperlに、結果の品質ではVBにほぼ相当します。それは恐ろしい慣行を助長し、維持することはほとんど不可能であり、サードパーティのライブラリは期待通りに動作することはめったになく、Larry Wallを...まあ...壁を動かす構文を持っています。私が思いつくことができる唯一の説明は、(VBのような)漸進的な学習に役立つということです。言い換えれば、プログラミング/管理についてほとんど知らない有用なことを達成でき、一度に少しずつ知識を広げることができます。導入の観点から言えば、それについて多くのことが言われています。ただし、企業/製造業界の「プログラマー」によって作成された数十億のVBアプリの1つをサポートまたは交換する必要がある人にとっては、おそらくあなたは頭を振って退職を計画しているでしょう。:)


3
「C#になりつつあるネズミの巣」の点について詳しく説明してください。
XåpplI'-I0llwlg'I -

1
「自分自身を繰り返さない」と言った理由が、XML地獄への対応であり、Java Web開発の長いビルドサイクルであるとは言えません。DRYはアジャイルコミュニティの概念として登場し、そのほとんどは当時Java以外の言語を使用していました。
ジュール14

38

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

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

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

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

また、動的言語はそのようなツールやフレームワークを書くのをずっと簡単にする傾向があると感じています。たとえば、Spring Rooのコードを調べるよりも、PadrinoやRails(Ruby Webフレームワーク)のコードを簡単に調べることができます。これは、私がJavaを知っているよりもRubyをよく知っているという事実による可能性があります。


24
個人的には、動的言語は好きではありません。IDEですべての型エラーをすばやく表示し、リファクタリングツールを使用すると、静的言語の生産性が向上します。あなたは上で見ている必要がありプレイフレームワーク、それはRuby on Railsに触発されたJavaのWebフレームワークだとJavaとのあなたが生産的になります。
ジョナス

4
railsのような強力なフレームワークは、何かがうまく実装されていない場合、ほとんどの人がそれを他のものに置き換えることができないことを意味します。Javaの場合、Hibernateが気に入らなければ、たとえばcayenneやJPAなどを使用できます。
コヨーテ21

2
Djangoと戦う誰かとして、私にただ言わせてください:Coyote21は絶対に正しいです。基本的なCRUDを5分で立ち上げることができますが、CRUDにビジネスロジック(このレコードが更新されると、このテーブルにレコードを挿入する必要があります...)の追加を開始すると、問題が発生します。 。
-asthasr

Railsに興味があるのにJavaが必要な場合は、Seam Forgeをご覧ください。注意してください、JSF2を使用していますが、これは作業するのが面倒ですが、Forge自体はかなり優れています。
クレイグリンガー

あなた...それはしかしどこに行ったのかしら、1.0持っていた発電機/足場を再生分でルーを使用してJavaでCRUDアプリケーション、Grailsは(ない正確にJavaの、それでもJVM)と同じものを構築することができます
エランメダン

24

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

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

また、Javaはコード化するのに非常に不愉快な言語です。昨日、switchステートメントで文字列を使用する革新的な機能を取得しました。また、javascriptは非常にハッカー的な言語なので、フロントエンドを開発した後、javaに戻ったときに非常に制約を感じます。

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


12
痛みのないデータベースアクセス?Spring JDBCまたはHibernateは素晴らしい動作をします。素晴らしい文字列操作?どのプロジェクトでも、文字列操作が5%をはるかに超えるとは思わないでください。構文糖?それはどういう意味ですか。迅速な反復プロセス?Javaにはそれがあります(Eclipse内のTomcatは簡単です)。Javaは面白くない?不足しているのは、簡潔な匿名クラス/ラムダ/などだけです。他の言語の「楽しい」機能は、難読化し、物事をわかりにくくする傾向があります。スイッチの文字列...ええ、私はそれを吸わなければなりません(ただし、ほとんどの場合、列挙型を使用する必要があります)。
アレックス

4
@alex:Syntax sugarJavaは実際にはDSLに使用できません。たとえば、PlayのconfigおよびroutesファイルはJavaファイルではなく、djangoのsettings.pyやurls.pyとは言えない外部構文にあります。リストの理解なし; 重要なデータ型(マップ、リストなど)はデフォルトではインポートされません。ばかげたファイルごとに1つのクラスが本当に邪魔になります。また、Java APIは不必要に冗長になる傾向があります。また、GET / POSTパラメーターから受け取った文字列を切り替えるときに列挙型を使用することはできません。
ライライアン

4
@alex興味深い。私はC#のすべての場所でジェネリックを使用する傾向があります-外部から見ても、それはおそらくlamdasの機能が向上したためです-したがって、をIRepository<T>持つことができますIQueryable<T> Where(Expression<Func<T, Boolean> Expression)。Javaでラムダが取得されると、Javaでより一般的になるのだろうか?それはおそらく快適な領域のことでしょうが、Javaはただ冗長に感じます-そして、2つのパーツが一緒に収まるという保証なしに50種類の車を構築するのに十分なビットを渡されたように。
基本的な

3
Eclipse内のTomatは痛みがなく、Java開発を効率的にすると2人が主張したとは信じられません。各開発サイクルがはるかに速くなりますが、Eclipseの更新、再構築、Tomcatのクリーニング、再デプロイ、再起動、場合によっては再起動を繰り返し、以前の手順を繰り返すなど、毎日のメンテナンスが必要です。私の車がそれほど多くのメンテナンスを必要とするなら、私は仕事に就くことは決してないだろう。
ブランドン

1
@ブランドン私は2番目になります。NodeやPython / Djangoの設定の問題に苦労したことは一度もありません。RoRに対する忍耐を失います。Ant / Mvn / Spring / Hibernate / eclipse依存関係に依存するJavaコードベースは、コードに到達する前に目を覚ます悪夢です。
エリックReppen

18

私は現在、「Javaが嫌い」というデベロッパーがかなりいる会社で働いています。それも私を驚かせた。私は確かに、Javaで利用できるテクノロジーのすべてを嫌います。これにより、意思決定が難しくなります。そのようなあなたがあまりにも多くの選択肢を持っているとき、あなたは選択肢がありません。実際にあなたのために働くフレームワークを思い付くために、あなたは100のフレームワークで時間を費やす必要があります。標準の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ドメインを採用していますが。彼らは完全にそれを好きではありません。各クラスが1つのことだけを行う10個のクラスを持つアプリケーションを作成するとき、彼らは気に入らないでしょう。数百のファイルを開いて、時にはフレームワークを使用して、数百のクラス間でやり取りすることを想像できます。プログラミングアクティビティ全体を面倒にします。これはほとんどの言語で当てはまりますが、Java開発者はクラスの機能に多くの注意を払っていることがわかりました。多くの場合、数百のクラスを持つコードを作成するJava開発者。これは多くの観点からは良いことですが、非Java開発者はそれを嫌います。

そのため、すべてのJavaは、プロジェクトの開始時に急カーブを課します。これは、コミットするには多すぎるお金を意味します。これに、Javaに接続された巨大なコミュニティを追加します。それぞれが異なる方法で考え、コミュニティ全体を実際にやり遂げる人はいません。彼らはまた、コミュニティによって行われた講演や会議を見ることはありません。新しいクールな本はありません。数年前にあまりにも多くのさまざまな問題を解決するために使用されていたため、Javaはダウンします。


(2)は、JBoss Arquillian(arquillian.org)によって素晴らしく対処されています。残りの多くは、Javaの問題というよりもJSF2の問題です。最大の問題IMOは学習曲線であり、フレームワークの膨大なバグです。しかし、JSF2を避ければうまくいくでしょう。
クレイグリンガー

5
OOPが大好きです。また、OOPを知っているので、Java開発者の大部分があまりにも多くのことをしていることに同意しません。クラスを書くことはできますが、コードがまだ絡まったスパゲッティの混乱である場合、本当にやったことは、単純な関数または構造体である可能性のあるものをラップする無意味な構造を持つくだらない手続き型コードを書く方法(Bean)を見つけることでした。
エリックReppen

2
「人々はJavaを考えるときGoogleを考えません。」... Googleについて考えるとき、AndroidとそのDalvik VM(Java VM)について確かに考えます。また、GWT(JavaからJavaScriptの自動生成)のようなクールなものについても考えています。Javaで「高い」企業が1つある場合、それはGoogleです。AppleやMicrosoftよりもはるかに多く。確かに、OracleとIBMはGoogleよりもJavaにさらに関連していますが、それでもJava VM上でJavaアプリを実行している数十億台のAndroidデバイスは、非常に強力なGoogle / Javaリンクを確立しなければ考えにくいものです。
セドリックマーティン

これらのコメントでは、JSF2に対する多くの憎悪が@CraigRingerを形成しています。:-)それについてあなたを悩ませているのは何ですか?そもそもそれは複雑だと感じましたが、一度行ってみると大好きです。もちろん、その前にSpringを使用していたので、他のものは改善のように見えます... :
ブライアンノブラウク

1
私はJavaのOOP開発者であり、開発者にとってのOOPの利点を誇張することはできません。はい、開発中に少し時間がかかりますが、バグ率が低く、コードが読みやすく、保守が容易であるため、価値があります。言うまでもなく、ユニットテストは適切に行われたOOPを使用することではるかに簡単になります。
IntelliData

14

Java Web開発を行うためのフレームワークには、かなりの学習曲線があります。多くの場合、必要なものが多すぎるため、物事を機能させるために必要な間接性の多くは、単に...痛みを伴います...

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

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


フレームワークが過剰な場合は+1。その狂気、春j2ee maven ant休止状態、あなたはすべての時間を費やしてxml構成を書きます。
リチャード

1
フレームワークの場合は+1。元のフレームワークがP ** s Poor(JSP、STRUTS)を試みるだけでなく、RoRと同様に機能するものが1つも存在しないことから約30の選択肢があります。
ジェームズアンダーソン

フレームワークだけではありません。意味をなさないのは、わいせつなレベルの順応です。多くのプロパティを公開するということは、あなたが間違っているということです。バニラのゲッターとセッターをスラップすると、無意味なメソッド呼び出しが追加され、何も変更されませんが、Java開発者はそのようなオブジェクトからプロパティをぶら下げるだけではありません。コミュニティは、それがすでにやっていることよりも多少間違っていることを強化するためです しかし、真剣に、コードの代わりにXMLが...どのように5分以上続きましたか?
エリックReppen

14

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

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

Javaに習熟するための手順は複雑であるか、高価です。風景が変化していることは知っていますが、遅すぎますか?

スタートアップが勢いをつけた後、成長する。才能のある開発者を採用することは困難です。ほとんどの「6週間でプログラマーになる」プログラムはJava(または.NET)を教え、市場は「6週間のプログラマー」で飽和状態になります(奇妙なことに、6年の知識を示す7年の経験を経た開発者を見たことがあります)週プログラマー)。6週間のプログラマーにとって、非主流の非「企業」環境を使用することは自然なフィルターになり得ます。仕事の要件を超えてRubyまたはScalaを学ぶには、献身と個人的な投資が必要です。これは、候補者の可能性を示す最大の指標です。

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


これは本当に良い点だと思う+1
sfrj

1
私は言う段落に同意しません:彼はおそらく独学のプログラマーです。これは最近では真実ではありません。今日では、そのプログラムは有能なプログラマーであり、少なくとも学位を持っている30代のほとんどの人々です。
コヨーテ21

1
??? プロトタイプのWebスタートアップを描いています。私は彼らが有能であることについては何も言わなかった。あなたは独学で能力を発揮することができます。あなたが何に同意していないのか分かりません。
マイケルブラウン

1
これが私の答えでした。Javaは、有能な開発者なら誰でも手に入れて使用できるように設計されていない唯一の現在のWebテクノロジーです。答えの2番目の部分は、Paul GrahamがThe Python Pardox
user16764

14

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

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

一方で、ほとんどのPHP開発者は、Javaをこの巨大な非常に複雑な800ポンドのゴリラと見ています。18輪のセミトラックを出て食料品店に行き、パンを手に入れるのに似ています。

私はJavaを学ぼうと試みました。Javaが非常に長く曲がりくねっていて、手根管が誘導された最初の印象です。さらに、それを開始すると、おそらくJavaのベテランには簡単に思える多くの質問が残りました。OpenJDK、またはSun?Tomcat、またはGlassfish、または?それに加えて、Javaブックのすべての入門書は、コマンドラインのコードを書くことから始めているようです。最近のほとんどの人は、スヌーズフェストを見つけていると思います。


3
PHPの9000以上の組み込みメソッドよりも多くの選択肢を取り、もう少し複雑にします。
カレブブラゼー

1
PHPのセットアップはとても簡単です。
Barfieldmv

9
しかし、良いコードを書くのがとても難しくなります...セットアップが簡単になり、開始が簡単になり、退屈が減ることは、言語を選択するための基準ではありません。良いプログラミングはあなたが...選ぶ間、それらの持っていない場合、それは悪い兆候だ...規律、忍耐と努力が必要です
アレックス

両方が悪臭を放つ場合を除き、一方はもう一方よりもはるかに多くのPITAをセットアップします。
エリックReppen

12

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

Javaは、最新のWeb開発に絶対に使用されます。確かに、Rubyや他の動的言語の「セクシー」な魅力はありませんが、プロジェクトがスケールし始めたら動的言語は良いことだとは思いません。

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

誤解しないでください...私はJavaが常に最良の選択であると言っているわけではありません(リモートではありません!)が、それは常に間違っているか「時代遅れ」の選択でもありません。


1
私は「より速い」ことに反対する傾向があります。理論上はそうであるべきですが、いくつかの巨大なphpサイトがあり、パフォーマンスの問題に関するほとんどすべての逸話はMySQqlまたは他の基礎となるデータベースに関連しています。一方、パフォーマンスが許容範囲に達する前に、私が必要とする広範なチューニングを行うほとんどすべてのJ2EEアプリに接触しました。
ジェームズアンダーソン

1
@ジェームズ:それを裏付ける曖昧な逸話以外に何かありますか?上位10のすべてのWebサイトは、マネージドプラットフォーム(JavaのAmazon、Scala IIRCのTwitter、JavaおよびC ++のカスタムバックエンドのGoogle)で実行されているか、高度にカスタマイズされたインフラストラクチャを備えています(FacebookとWikipediaはPHPを使用しますが、両方とも速度のために膨大な量のカスタムネイティブコードを持っています)。Javaは、ベンチマークで定期的に動的言語よりも優れています。私はJavaの熱狂者ではありませんが、パフォーマンスはJavaの問題ではありません。
ダニエルプライデン

Java自体にパフォーマンスの問題はありません。「Cほど高速ではありませんが、他の何よりも高速です」。ただし、J2EE、フレームワーク、ORM、依存性注入、および過剰設計は、ほとんど実行されないことが保証されています。隠されたボトルネックと予期しない相互作用の可能性が非常に高い
James Anderson

1
@Basic:あなたのポイントは何ですか?あらゆる言語の多くの壊れたライブラリとフレームワークがあります。はい、多くの残酷で古くなったドキュメントがありますが、それもめったにありません。逆に、Java用の素晴らしいライブラリ、フレームワーク、ツールがいくつかあります。これまでに、すべてのアプリケーションに1つのエンドツーエンドフレームワークが必要であることを真剣に提案しようとしていますか?
ダニエル・プライデン

1
@Basic:何から後方に?この回答を最初に書いてから1年半で、Googleに移り、現在Googleで働いています。JavaがGoogleでのWebアプリケーション開発に非常に頻繁に使用されていることを保証できます。もちろん、Googleのニーズは他の多くの企業のニーズとは非常に異なりますが、適切なライブラリとフレームワークを使用する場合、Javaはまったく別物です。Googleがオープンソース化したもの(Guava、Guice、 GWT、プロトコルバッファなど)。
ダニエル・プライデン

12
  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は、分散トランザクションなど、多くの人が抱えていない問題を解決します

専門的な開発を始めた新しい開発者は、JavaがRails、python、またはphpよりも難しいため、習得しやすいものになります。

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

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

8
はっきりさせましょう。言語Javaは、学ぶのが難しくありません。Javaと連携してその欠点を補うために構築されたがらくたのすべての層(冗長性、すべての出口としての柔軟性に欠けることによる自分やチームメイトからの保護、不合理な量のライブラリの依存など)がPITAです学ぶために。
エリックReppen

2
@ErikReppen非常に本当です。私はJavaプロジェクトで作業しなければなりませんが、.Netのバックグラウンドを持っています。言語と構文は、私が理解するために出くわしたものなら何でも簡単です。冗長性が本当に私を夢中にさせています。私が1行で使用していたものは、現在5〜10および(多くの場合)XML構成ファイルの編集を必要とします。言うまでもなく、何時間も読書に時間を費やさずに、仕事に「正しい」フレームワークを選ぶのは悪夢です。それ、書き直してください。大きな問題を解決するために時間を費やしたい
基本的な

「Javaはもっと複雑」-PHPのパラメーターの順序を覚えている人はいますstrposin_array?また、PHPのXML DOMインターフェイスはばかげています(属性を文字列にキャストして取得しますか?)。OSGiは絶対に素晴らしい言語に依存しません。
ジェボン

@jevon:PHPドキュメントは非常に優れており、私のIDEはとにかく思い出させてくれます。また、SimpleXML。
ダンマン

12

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

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

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

さて、単純さを拒否するのは、それが考え方なのか、それとも単なる慢なのか。まあ、私は常識が勝つべきだといつも思っていました。企業であろうと単純なWebアプリケーションであろうと、基本的な使用例は同じです。それは正しく、検証可能でなければなりません。

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

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

Scalaは非常に賢く実用的だと思う言語の1つです。遊びます!Scalaを使用することは、Web /エンタープライズアプリケーションの開発にとって、他のどのアプリケーションよりも優れています。

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


私はJavaファンではありませんが、あなたが言う「複雑さ」は抽象化されているかもしれません。抽象化は、テストと保守性の両方に非常に役立ちます(節度に使用する場合)。コードを比較できずに確実に言うのは難しい
基本的な

11

最近のインタビューで、ジョセフSnarr、グーグルの技術リーダープラスアプリケーションがフロントエンドにバックエンドで、JavaScriptがJavaサーブレットを使用する方法を説明しました。

したがって、あなたの質問に答えるために、Javaはまだ非常に最新のWeb開発に使用されています。ちょうど最近多くのプレスを得ている新興企業のためではありません。

多くの新興企業が他のテクノロジーを使用している理由は、彼らがよりセクシーであり、彼らの背後にあるオープンソースのプッシュをより公表しているからだと思います。


4
新興企業は他のテクノロジーを使用しています。なぜなら、彼らは今すぐそれを実現したいからです。後でありません。そして、彼らは、それは、ない30 3人などによって今行わ取得するために行ってきました
エリックReppen

人を引用することは、彼の見解と選択を提供するだけであるが、彼/彼女が選んだものが正しい決定であるかどうかを検証しない。
DivKis01

9

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


9
絶対違う!実際、Javaはサーバーサイドの世界で支配的な言語です。アプレットはおそらく10年前に消滅しました。
カイロン

5
Flashは、アプレットがしようとしたことを行いました。クイックスタート、高速ダウンロード、低メモリフットプリント。

4
JavaとJavaScriptを区別することさえできない多くの人々を知っています。それらは完全に無関係ですが。これは、Javaに悪い名前を与える別のことです。
キブビー

5
@Kibbee ...またはJavascriptに悪い名前を与えます:)
マシューシンケル

9

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

Googleのような企業は、損失を吸収できるため、ユーザーを獲得できない可能性のあるもののスケーリングを実装するのに時間を浪費している場合でも、スケールアップの前に物事を構築する余裕を得ることができます。

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


1
スタートアップはJavaを使用しないと述べているソースはどこにありますか?いくつかの事実を使用して、仮定をバックアップしてください。
ウォルター

7

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

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


3
あなたは上で見ている必要がありプレイフレームワーク、それは、Javaとあなたが生産性を高めるのJava WebフレームワークだとRuby on Railsに触発されています。
ジョナス

2
@ジョナス、このすべてを簡潔に説明するいくつかの良いブログ投稿を書くことを検討してください。

@ジョナス、ソービョルンが言ったこと!徹底的に読んでいただきたい。:)
ブライアン

@Thorbjørn:ブログを持っていません。つまり、Play Frameworkを使用すると、Javaソースコードを保存してから、Webブラウザーを更新するだけです。コードは、Eclipseコンパイラーを使用してサーバー側で自動的にコンパイルされます。JPAはデータベースアクセスに使用されます。Play!
ジョナス

2
@Thorbjørn&Brian:プレイフレームワークのウェブサイトのフロントページにあるビデオをご覧ください。
Bjarkeフロイント・ハンセン

7

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

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

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

この利点は、時間が非常に重要な小さなスタートアップにとっては疑わしいものです。通常、彼らはすぐに使えるフレームワークではできなかったことをほとんどしていません。そのため、RADシステムを選択して、翌日にアプリを公開することができます。

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

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


6

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


6

Google App EngineはJavaをサポートしているため、IDEおよび展開インターフェイスとしてEclipseを使用し、適切に文書化されたGoogle APIを使用して、Webアプリケーション全体をJavaで記述できます。使える。


5

私が働いているスタートアップでは、JavaとJRubyの両方を使用してAPIを実装することを選択しました。

インフラストラクチャ、プロセスの分散、および通信ではJavaの堅牢性を活用しますが、APIエンドポイントの実際の実装ではJRubyを選択しました。これはすべての呼び出しにJSONが関係し、緩やかに型付けされた表現(JSON)型付き言語(Ruby)。

JRubyクラスの1つがボトルネックになっている場合は、Javaで直接再実装するだけです(基本的には行ごとの翻訳)。これは、多くの計算を行う必要があるクラスで非常に頻繁に発生する可能性があり、このコンテキストでは、JRubyはプロトタイプ言語のように動作します。

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

重要なのは、すべてのJava EEを回避することです-それは巨大で扱いにくく、反敏性です。


5

私は、Javaが多くのWeb開発で使用されていると感じています。しかし、それは通常、よりビジネス志向で、主にテクノロジーの大企業ではない種類の開発であり、通常は、牽引力を得て自分の仕事を促進し、テクノロジーに関心を持たなければならない新しいスタートアップよりもオープンではありません。そのため、多くの企業のWebサイトで使用されている場合でも、彼らはテクノロジースタックについて公表することを本当に気にしないので、おそらく知らないでしょう。

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

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

Javaはあまりにも長い間使用されてきたため、Javaの不公平なステレオタイプですか(古いテクノロジーと不当に関連付けられており、その「最新の」機能に対する認識がありません)。 Javaは実際にはそれほど古いものではなく、公平に言えば、大幅に改善されています。それは約10年前のクールで関連性の高いプラットフォームでした。しかしそれ以来、Ruby on Railsのような、新しい問題を念頭に置いた新しいプラットフォームがありました。Javaのコアセクターは主に企業の世界であり、さまざまな問題があります。そのため、外部の新しいプロジェクトを探している人々はさまざまなツールを探しています。また、マルチプラットフォームであるJavaデザインの主な利点は、以前ほど重要ではありませんでした。

Java開発者の否定的なステレオタイプは強すぎますか?(Javaはもはや「クール」ではありません) それにもいくつかの真実があります。Javaは依然として「仕事を得るために」学ぶ言語です。したがって、気にしないが、お金を稼ぐために何かを学びたいだけなら、あなたは少しのJavaの学習を終了し、改善するために二度と気にしません。繰り返しになりますが、認識と可視性については非常に重要です。知識を共有せずにコーディングを行っている優れたJava開発者はたくさんいますが、ブログを書いてオープンソースに協力しているPHP開発者はたくさんいるでしょう。PHP開発者はJava開発者よりも優れていると思うようになります。それについては、特定のフィードバックがあるからです。

他の言語で書かれたアプリケーションは、ビルドが非常に速く、保守しやすく、パフォーマンスが向上していますか? 私は彼らが構築するのが速いと言うでしょう。PHP、Python、Rubyなどの言語の原則は、絶えず変化する可能性のあるソフトウェアの生成に非常に適しています。たとえば、動的な型指定により、インターフェイスの変更が簡単になります。Javaでは、明確に定義されたインターフェースを持つことが重要であり、これはより安定した(そして変更が困難な)インターフェースにつながります。これは、新しいスタートアップでは非常に重要です。主な問題は、お金を使い果たす前に製品を入手することです。パフォーマンスについては、ニーズを誤解し、「JavaはRubyよりも高速です。ピリオド」や「MongoDBはWebスケール」など、マジックを使用して必要なパフォーマンスを達成しようとするのは非常に簡単です。

Javaは、新しい言語に適応するには遅すぎる大企業でのみ使用されていますか? 間違いなく、既に既存のJava開発者チームが社内にいることで、新しいプロジェクトに同じ言語を使いやすくなります。これは、特に会社の核心がテクノロジーではない場合、「安全な賭け」として認識されます。しかし、とにかく、Javaは大企業だけで使用されるわけではありません。クールなものにJavaを使用するスタートアップはまだ多くあります(たとえば、FightMyMonsterSwrveはJavaを広範囲に使用しています)が、スタートアップの一般的な傾向はシーンは他の言語を使用することです。それはまた、人々を獲得する方法でもあります。ほとんどの人は、より「友好的」かつ「楽しい」と認識されているRuby、Python、またはPHPで作業するのがよりエキサイティングだからです。


5

これは事実ですが、Javaとそのエコシステムのためではありません。Javaを使用すると、大きな混乱と激しい憎悪を生み出す傾向があるのは、人々のせいです。

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

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

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


3

すでに言われたことに少しだけ追加するために、私はそれがあなたが何も(文字通り)機能するウェブアプリケーションにどれだけ速く行くことができるかに関係していると思います。

アイデアがあれば、ホスティングプロバイダーを選択するか、独自のインフラストラクチャ(EC2イメージなど)を選択するかに関係なく、現在の場所からWebアプリケーションの作成に移行するのは簡単です。私の経験では、Javaを選択することは通常、より多くの作業であり、多くの場合、費用もかかります。

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


学習曲線は完全に垂直です。最初の数週間は、頭字語が何であるか、標準が実装にどのように関連するか、すべてがどのように階層化されるかなどを把握するだけで済みます。その後、使用するライブラリとフレームワークのシチューを把握します。それらのバグを報告し、次の数週間...
クレイグリンガー

3

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

Spring MVC + Spring Data JPAまたはテンプレート用のMongo + Thymeleaf + CoffeeからJSへのトランスパイリング用のcoffee-maven-plugin。これで準備完了です。


私はあなたに完全に同意します+1
アーシャッドアリ

3

多くの人は、JavaとWebアプリケーションの開発をJ2EEの恐ろしさと関連付けているかもしれません。J2EEは、大規模な青と赤の企業の巨大なJ2EEアプリケーションサーバーにバンドルされています。

確かに、最近のJEEの仕様と実装はより軽量ですが、短サイクルの急速な開発プロジェクトでこのようなことを提案する前に、3回考えます。

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

他の言語は、この多数の代わりに単一のターンキーソリューションを描いています。これにより、より重要な魚を揚げるときに、この選択がより目的に合ったものになります。


Java EE 6は「軽量」かもしれません(JSF2を除く)が、それでも信じられないほど巨大な学習曲線であり、複雑な仕様の巨大なスタックであり、非常に複雑な階層化システムです。軽量かもしれませんが、単純ではありません。
クレイグリンガー

2

私はあなたが思っているよりも多く使用されていると思います-使用はウォーターラインのすぐ下です。厚手の派手なJavaサービスの周りには、Railsラッパーに多くのルビーがあります。特に、ビッグデータに近づいているものを扱う場合。。。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.