it-swarm.dev

Warum wird Java nicht für die moderne Entwicklung von Webanwendungen verwendet?

Als professioneller Java Programmierer) habe ich versucht zu verstehen - warum der Hass gegen Java für moderne Webanwendungen?

Ich habe einen Trend bemerkt, dass von modernen Web-Startups ein relativ kleiner Prozentsatz von ihnen Java (im Vergleich zu Javas allgemeiner Beliebtheit)) verwendet. Als ich ein paar Fragen dazu gestellt habe In der Regel erhielt ich die Antwort: "Ich hasse Java aus Leidenschaft". Aber niemand scheint wirklich in der Lage zu sein, eine endgültige Antwort zu geben.

Ich habe auch gehört, dass dieselbe Web-Startup-Community negativ auf Java Entwickler - verweist - mehr oder weniger impliziert, dass sie langsam, nicht kreativ und alt sind.

Infolgedessen habe ich Zeit damit verbracht, Ruby/Rails aufzunehmen, um herauszufinden, was mir fehlt. Aber ich kann mir nicht helfen zu denken: "Ich könnte das viel schneller machen, wenn ich Java verwenden würde", hauptsächlich aufgrund meiner relativen Erfahrung.

Aber auch, weil in Java nichts Kritisches "fehlt", was mich daran hindert, dieselbe Anwendung zu erstellen.

Was mich zu meinen Fragen bringt:

Warum wird Java in modernen Webanwendungen nicht verwendet?

  • Ist es eine Schwäche der Sprache?

  • Ist es ein unfaires Stereotyp von Java, weil es so lange existiert (es wurde unfair mit seinen älteren Technologien in Verbindung gebracht und erhält keine Anerkennung für seine "modernen" Fähigkeiten)?

  • Ist das negative Stereotyp von Java Entwickler zu stark? (Java ist einfach nicht mehr "cool")

  • Sind Anwendungen, die in anderen Sprachen geschrieben wurden, wirklich schneller zu erstellen, einfacher zu warten und weisen sie eine bessere Leistung auf?

  • Wird Java nur von großen Unternehmen verwendet, die zu langsam sind, um sich an eine neue Sprache anzupassen?

393
Cliff

Moderne Startups müssen so schnell wie möglich auf den Markt kommen. Sie müssen nicht etwa sechs Monate aufwenden, um ihre Webanwendung Java) freizugeben.

Twitter wurde zum Beispiel mit Rails/Ruby erstellt, aber als es nicht mehr skalierbar war, wurden sie auf die JVM migriert.

Ganz zu schweigen davon, dass der Entwicklungsprozess nicht produktiv ist: Code -> Kompilieren -> Bereitstellen in Frameworks wie (Rails/Django/Grails): Testserver ausführen -> Code -> Dinge ändern und sehen, was passiert.

Die gute Nachricht ist, dass Sie mit JRebel Codeänderungen sofort sehen können.

174
Chiron

Nach meiner Erfahrung ist Java für Webanwendungen für kleine Anwendungen zu viel des Guten. Ein einfaches Blog mit einer Datenbanktabelle mit Blogeinträgen könnte beispielsweise viel einfacher sein.

Ich habe normalerweise gesehen, dass Java in viel größeren Webanwendungen (denken Sie an Banken und Versicherungsunternehmen), die mit einer Reihe anderer Systeme (wie Mainframe-Backends und Datenbanken sowie Peer-Web-) kommunizieren, viel besser abschneiden. Services Hintergrund Stapelverarbeitungssysteme ... alle in der gleichen Anwendung).

Soweit ich gesehen habe, ist die Architektur einer JavaEE-Webanwendung in der Regel mehr als für kleine/einfache Webanwendungen erforderlich.

Ich habe Java Web-Apps 10 Jahre lang programmiert, bevor ich vor mehr als 4 Jahren zu Python gewechselt bin. Ich habe das Gefühl, dass ich mit python viel produktiver bin und in kürzerer Zeit viel mehr erledigen kann. Um ehrlich zu sein, bin ich viel glücklicher, wenn ich mich in Python entwickle. Hier sind einige der Gründe, warum ich denke, dass python besser ist als Java, basierend auf meiner persönlichen Erfahrung, Ihre Laufleistung kann sehr hoch sein.

Web Frameworks:

Als ich anfing, Web-Apps in Java zu programmieren, kam Struts gerade heraus und es war nicht großartig, aber es war das Beste, was es gibt. Ich habe eine Reihe von Struts-Apps erstellt, einige davon in anderen Frameworks. Immer wenn ein neues Framework herauskam (Tapisserie, Wicket, GWT, Streifen, Grails, AppFuse, Play, RichFaces, Spring usw.), probierte ich es aus und sah, ob es besser war, und meistens war es nur ein bisschen besser und manchmal überhaupt nicht besser. Ich muss sagen, dass der Spielrahmen ein Schritt in die richtige Richtung ist.

Batterien nicht enthalten:

Einer der nervigsten Teile von Java war die Tatsache, dass die meisten Bibliotheken, die Sie verwenden, nicht in Java selbst enthalten waren. Sie mussten eine Menge Bibliotheken von Drittanbietern von Orten einbinden wie Apache Commons. Wenn Sie so etwas wie den Ruhezustand mit einer anderen großen Bibliothek verwenden, landen Sie in der Jar-Abhängigkeitshölle, in der der Ruhezustand eine Version eines Jars und etwas anderes eine andere Version benötigt. Wenn Sie die JAR-Dateien in der falschen Reihenfolge laden, haben Sie kein Glück. Sie müssen sich auf Tools wie Maven und Ivy verlassen, um Ihre Abhängigkeiten zu verwalten. Dies bringt nur mehr Abhängigkeiten in Ihr Projekt, was dazu führt, dass Projekte sehr groß sind. Ich hatte einige Kriegsdateien mit mehr als 100 MB Kriegsdateien für die einfachsten Web-Apps.

Zu viele Optionen:

Aus irgendeinem Grund scheint es viel zu viele verschiedene Möglichkeiten zu geben, dasselbe in Java zu tun. Laut Wikipedia gibt es über 38 verschiedene Web-Frameworks für Java ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) und 23 verschiedene ORMs ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#Java ) um nur einige Beispiele zu nennen. Wenn Sie sich andere Sprachen ansehen, haben sie eine vernünftigere Anzahl. Einige Leute denken, dass es eine gute Sache ist, viele Optionen zu haben, aber es führt nicht zu einer großen Verschwendung von Aufwand in der Entwickler-Community. Jeder erfindet das gleiche Rad neu und wenn Sie eine neue Person in der Sprache sind, die Sie haben zu viele Optionen zur Auswahl.

App-Server:

Java-Webanwendungen sind sehr umfangreich und erfordern viele Ressourcen, um ausgeführt zu werden. Sie sind besonders gedächtnishungrig. Wie jede Software können sie so eingestellt werden, dass sie weniger Ressourcen benötigen, aber im Vergleich zu anderen Sprachen ist ihre sofort einsatzbereite Einrichtung schrecklich. In meiner Vergangenheit habe ich Weblogic, Websphere, Jboss, Tomcat und Jetty verwendet. Ich habe die ersten drei nur verwendet, als ich gezwungen war, EJBs zu verwenden, aber selbst wenn Sie keine EJBs verwenden, waren sie große App-Server und manchmal schwer zu konfigurieren und richtig auszuführen. Tomcat und Jetty sind viel besser und einfacher einzurichten, aber immer noch Ressourcenfresser.

App-Hosting:

Wenn Sie keinen eigenen Server betreiben, ist es sehr schwierig, Shared Hosting für Ihre Java Apps zu einem angemessenen Preis zu finden. Der Hauptgrund ist, dass Java Apps im Vergleich zu anderen Sprachen viel mehr Speicher benötigen. Daher ist es für einen Shared Hosting-Anbieter nicht sinnvoll, sein wertvolles RAM für die Ausführung eines Java Site, wenn sie 5 PHP-Sites am selben Ort ausführen könnten. Das bedeutet, dass es weniger Anbieter gibt, die Java Hosting anbieten, was wiederum höhere Kosten für den Betrieb Ihrer Website bedeutet.

Entwicklungszeit:

Als ich mich in Java entwickelte, war ich viel langsamer als in Python. Ich müsste eine Änderung vornehmen, kompilieren, erneut bereitstellen und dann testen, was den iterativen Prozess verlangsamt. Ich weiß, dass es Möglichkeiten gibt, dies schneller zu machen, aber selbst im besten Fall fühlte ich mich viel langsamer als das, was ich in Python tun kann.

Es gibt auch viel weniger Boilerplate-Code, um dasselbe in Python zu tun, so dass ich auch weniger Zeit damit verbringe, den Code zu entwickeln.

Java fühlt sich in vielen Teilen einfach überarbeitet. Viele der APIs und Schnittstellen sind einfach zu kompliziert für das, was Sie tun möchten. Und jeder und sein Bruder denken, dass sie ein Java Architekt sind, und dies führt zu großen, komplizierten Systemen, die schwer zu verwenden und zu entwickeln sind.

IDE:

Als ich in Java entwickelte, fühlte ich mich an die IDE gebunden, ich war ohne sie verloren. IntelliJ ist die beste IDE auf dem Markt, und es war schwierig, auf python umzusteigen, da es für Python nichts Vergleichbares gab. Anstelle einer IDE habe ich nur textmate verwendet, einen normalen Texteditor. Anfangs war es schwierig, aber da es sich nur um einen Texteditor handelte, war es eine sehr schnelle und reaktionsschnelle Anwendung. Ich könnte mein gesamtes Projekt in wenigen Sekunden öffnen, während es bei einem Computer mit einer Tonne RAM eine Minute oder länger dauern könnte, wenn ich ein Projekt in einem IDE öffnen möchte. Die Macher von IntelliJ haben einen python Editor namens pycharm herausgebracht. Ich habe ihn gekauft, als er herauskam, und er ist großartig. Aber was mir klar wurde ist, dass ich kein IDE für Python brauche, ich bin in Ordnung mit einem Texteditor. Wenn ich wieder an Java Web-Apps arbeite, die ich von Zeit zu Zeit ausführen muss, versuche ich, den Texteditor zu verwenden, aber das habe ich noch nicht ganz gemeistert. Ich persönlich brauche das IDE für Java mehr, denn wenn ich etwas durcheinander bringe, dauert das Neukompilieren und erneute Bereitstellen länger, was mich verlangsamt.

ORM:

Als ich anfing, Hibernate als ORM zu verwenden, fand ich es großartig, es hatte Probleme und es war nicht perfekt, aber es war besser als das, was ich vorher gemacht habe. Ich war damit zufrieden, bis ich eine Anwendung mit Djangos ORM für ein python Projekt machte, und das öffnete mir die Augen, so soll ein ORM funktionieren. Nach diesem Projekt ging ich zurück in den Winterschlaf, fühlte mich nur enttäuscht und sehnte mich danach, zu Djangos ORM zurückzukehren. Ein weiteres großartiges python ORM ist die SQLalchemie, die Djangos ORM ähnelt, aber etwas anders ist. Ich habe nur begrenzte Erfahrung mit RORs ORM, aber soweit ich mich erinnere, war es auch ziemlich gut.

Vorlagen:

Die Web-Template-Systeme in Java sind nicht so gut, und ich glaube, ich habe sie alle ausprobiert (Kacheln, Freemarker, Geschwindigkeit usw.). Die meisten von ihnen bieten nur grundlegende Funktionen und sind schwierig zu bearbeiten. Auf der Python Seite sind meine beiden Favoriten Django Vorlagen und Jinja2, sie haben alles, was ich in einer Template-Engine brauchen könnte, und sind wirklich einfach zu bedienen.

135
Ken Cochrane

Start-Ups wollen das Glänzende. Was auch immer der Glanz ist: RoR, Groovy, Grails, OOP mit PHP, Foobar, Wibble, Narf usw.).

Unternehmen wollen stabil, zuverlässig und skalierbar: Java und .NET passen zu dieser Rechnung (wenn richtig gemacht).

Aktueller Auftritt: Financial Services. Plattform: ColdFusion (im Wesentlichen eine Java Tag Library) und Java.

Vorherige Auftritte:

  1. Bildungstestservices - ColdFusion
  2. Hochrisikoversicherung - ColdFusion und Java
  3. 401k - ColdFusion und Java
  4. Reisen - Java mit internen ColdFusion-Apps
  5. Wertpapiere - ColdFusion (Version vor Java)

Dies sind alles Websites mit hohem Volumen und hoher Sicherheit. Niemand in einem dieser Unternehmen hat jemals über PHP nachgedacht, einige haben sich RoR angesehen und zu viele Probleme festgestellt. Die 401k-Firma hatte eine Schwesterfirma, die eine .NET-Anwendung mit kompetenten Entwicklern ausführte. Die App stürzte jede Woche ab. Sie konvertierten es schließlich in Java und gewannen Stabilität.

Die einzigen Leute, die auf Java herabblicken), sind diejenigen, die keine oder nur wenig Erfahrung damit haben oder an schlechten Implementierungen beteiligt waren und jetzt waffenscheu sind. Sie sehen das Glänzende und die Figur, wenn alle coole Kinder benutzen es, warum nicht ich?

94

Eine Ergänzung zum FrustratedWithFormsDesigner's Antwort: Da ich denke, dass Ihre Frage mehr auf kleinere Websites abzielt, gibt es einen wichtigen Aspekt, den Sie für viele Leute berücksichtigen müssen: Hosting ist allgegenwärtig für PHP, aber schwieriger für Java oder ASP Sites) Dies ist jedoch kein Defekt dieser Sprachen.

73
sebastiangeiger

Java absolut is wird für die moderne Entwicklung von Webanwendungen verwendet. Besonders wenn Sie das etwas größere/komplexere/skalierbare Ende des Webanwendungsspektrums erreicht haben.

Wenn Sie an modernen, produktiven Tools und Frameworks interessiert sind, schauen Sie sich Folgendes an:

Ich denke jedoch, dass die modernste Webentwicklung auf der JVM-Plattform wahrscheinlich in einer der neuen JVM-Sprachen durchgeführt wird, anstatt Java direkt, wobei Java einfach das Backbone in Bezug auf zugrunde liegende Bibliotheken und Back-End-Infrastruktur bereitstellt. In Groovy findet viel Webentwicklung statt ( ) Grails ), Scala ( Lift und Play ), JRuby ( JRuby on Rails ) und Clojure ( Noir , Ring/Enlive + viele benutzerdefinierte Frameworks), um nur einige zu nennen.

Bei all den Neuerungen im neuen JVM-Sprachraum vermute ich persönlich, dass Java letztendlich der "Assembler der serverseitigen Programmierung" wird.

70
mikera

Zählt Google, Amazon oder LinkedIn als modern?

Java wird für moderne Webanwendungen verwendet. Wenn Sie sich das Unternehmen ansehen, ist dies die am häufigsten verwendete Sprache für Webanwendungen (intern).

Das heißt, Java durchlief eine Zeit, in der die Webentwicklungsstandards versuchten, alles für alle zu sein (wohl immer noch). "Wiederholen Sie sich nicht" war eine Antwort auf die XML-Hölle und die langen Build-Zyklen der Webentwicklung Java. Infolgedessen wurde Java (EJB, Struts, JSF usw.) als das angesehen, was alle neuen Paradigmen zu überwinden versuchten.

Java, die Sprache ist ausführlich. Das ist ein Pro und ein Contra (ideal für die Wartung, scheiße für den Entwickler). Es gibt eine Reihe moderner Sprachfunktionen, die es noch nicht in Java geschafft haben und die Codierungszeit erheblich verkürzen können (Eigenschaften, Ereignisse, Abschlüsse, Generatoren, Listenverständnis usw.). Es kann also frustrierend sein, wenn man aus einer moderneren Sprache kommt. Das heißt, es ist schwierig, sie zu einer reifen Sprache hinzuzufügen, ohne das Rattennest zu werden, zu dem C # wird.

Viele in der modernen Webentwicklung verwendete Sprachen werden dynamisch typisiert. Dies ermöglicht Tools, mit denen Code beim Schreiben dynamisch neu geladen werden kann (dies ist in einer statischen Sprache - jrebel - schwieriger zu erreichen). Da sich die Webentwicklung für schnelle Iterationen eignet, ist das dynamische Neuladen ein großer Gewinn. Dies verkürzt den Entwicklungszyklus bei Projekten auf der grünen Wiese erheblich und erleichtert die Richtigkeit der Benutzeroberfläche und der Benutzeroberfläche (Versuch und Irrtum von Natur aus).

Auch statische Sprachen haben ihren Platz. Für eine Backend-Logik, die komplex ist, jahrelang ausgeführt werden muss, ohne Probleme skaliert werden muss, sehr schnell sein muss und vollständig fehlerfrei sein muss, werden statisch typisierte Sprachen (wie Java oder sogar C) bevorzugt.

Wenn die Anzahl der Entwickler/der Umsatz steigt und die Produkte reifen, steigt außerdem die Wahrscheinlichkeit, dass gut gemeinte Leute Fehler einführen. Die Strenge und Disziplin, die ein gut gestaltetes Java Projekt (Schnittstellen, Muster und Weihwasser für diese PHP-Vampire :)) erzwingt, trägt dazu bei, das langfristige Risiko zu verringern. Dies kann auch durch Unit-Tests erreicht werden. Das aus statischen Überprüfungen (und statischen Analysatoren wie Findbugs und Clang) abgeleitete Sicherheitsnetz bietet jedoch eine integrierte Codeabdeckung, die mit handschriftlichen Tests nur schwer zu replizieren ist. Verstehen Sie mich nicht falsch, es sollte Unit- und Funktionstests geben, aber echte Organisationen erreichen niemals eine 100% ige Abdeckung. Für das, was sie überprüfen, tun statische Analysatoren.

In großen Projekten (die eher durch die Teamgröße als durch die Codegröße definiert werden), in denen eine komplexe Interaktion zwischen unabhängig entwickelten Codestücken besteht, werden Sprachen wie Java weiterhin bevorzugt. Beispiele hierfür sind große/komplexe Webanwendungen wie bei Finanzmaklern (Ameritrade), Finanzbörsen (Nasdaq, Nyse, möglicherweise London nach dem .net-Ausfall), Online-Banking (fast alle), E-Mail (Google), Auktion (eBay). , usw.

Aus Sicht der Leistung und Skalierung übertrifft nichts die Plattform Java, da sie Skalierbarkeit und Leistung für Webanwendungen kombiniert (abhängig davon, wie Sie die Anwendungspartitionierung von Facebook zählen). Twitter musste zum Beispiel große Teile seiner Ruby Infrastruktur in Scala auf dem Java VM umschreiben, um den Fehler zu beheben Wal zurück ins Meer. Ich habe von anderen großen Beispielen gehört, aber sie entziehen sich mir gerade.

Es lohnt sich auch, über Sicherheit nachzudenken. Während Java Browser-Plugins einen angemessenen Anteil an Sicherheitslücken aufweisen, ist die Java Plattform selbst eine der sichereren Plattformen, die erstellt wurden. Java Webanwendungen gelten als sehr sicher. Die Codierungspraktiken, Bibliotheken und die Architektur haben lange von Fehlern abgeraten, die Angriffe wie SQL-Injection oder Pufferüberläufe ermöglichen. Während andere Webplattformen (Rails) einen guten Sicherheitsruf haben, übertrifft keine Java.

Unterm Strich sind die meisten Webanwendungen technisch einfach. Einfach ausgedrückt ist Java oft übertrieben (genau wie früher, als wir sie in C geschrieben haben :)). Wenn die Webanwendung jedoch komplex ist (Backend oder auf andere Weise) oder mehr als 100 Entwickler erwartet werden, ist Java schwer zu übertreffen.

- -

Persönlich benutze ich Grails oft, weil es mir das Beste aus beiden Welten bietet (das gleiche gilt für JRuby, von dem ich höre, dass es in der Ruby Welt immer beliebter wird).

Übrigens - ich finde den Aufstieg von PHP wirklich verwirrend. PHP als Sprache ist das grobe Äquivalent zu Perl in Bezug auf Lesbarkeit und VB in Bezug auf die Qualität der Ergebnisse. Es fördert schreckliche Praktiken, ist so gut wie unmöglich zu warten, Bibliotheken von Drittanbietern funktionieren selten wie erwartet und es hat eine Syntax, die Larry Wall nach oben treiben würde ... na ja ... eine Mauer. Die einzige Erklärung, die ich heraufbeschwören kann, ist, dass es sich für inkrementelles Lernen eignet (wie VB). Mit anderen Worten, Sie können etwas Nützliches erreichen, indem Sie nur sehr wenig über Programmierung/Administration wissen, und Sie können Ihr Wissen jeweils um einen kleinen Teil erweitern. Dafür gibt es aus Adoptionssicht viel zu sagen. Für jeden, der eine der Milliarden von [VB Apps, die von "Programmierern" in der Unternehmens-/MFG-Welt geschrieben wurden, unterstützen oder ersetzen musste, schütteln Sie wahrscheinlich den Kopf und planen Ihren Ruhestand. :) :)

41
user56365

Nun, ich habe mich kürzlich mit einem Java) getroffen, der von dem neuen Spring Data-Projekt wirklich begeistert war, weil so wenig Code erforderlich ist, um einen grundlegenden CRUD-Zugriff auf Ihre Datenbank zu erhalten.

Ich kann eine CRUD App mit Rails (nicht nur Datenbankzugriff, sondern Ansichten und Controller) mit ein paar Befehlen erstellen.

(Auf den ersten Blick: neues Projekt, 1 Gerüstbefehl pro Entität, 1 Befehl zum Migrieren der Datenbank, 1 Befehl zum Starten des Servers.)

Es hat nichts mit der Sprache zu tun, es geht nur um die Werkzeuge. Und es scheint, dass dynamische Sprachen dazu neigen, die Tools und Frameworks zu haben, die viel Boilerplate-Code entfernen. (Um unseren Mangel an leistungsstarken IDEs auszugleichen, die für uns Boilerplate generieren.)

Ich bin auch der Meinung, dass dynamische Sprachen das Schreiben solcher Tools und Frameworks erheblich erleichtern. Ich kann den Code für beispielsweise Padrino oder Rails (Ruby Web Frameworks)) viel einfacher abrufen, als ich den Code für beispielsweise Spring Roo abrufen kann. Dies könnte an der Tatsache liegen, dass ich es weiß Ruby viel besser als ich Java kenne.

38
Robbie

Java wurde in den letzten Jahren als "Unternehmen" positioniert. Welches ist auf der anderen Seite des Spektrums, was ein Startup braucht. In der Entwicklung von Webanwendungen benötigen Sie vier Dinge: schmerzlosen Datenbankzugriff, großartige Manipulation von Zeichenfolgen, Syntaxzucker und schnelle iterative Prozesse, um die zahlreichen kleinen Änderungen vorzunehmen, die Ihre App erfordert.

Leistung, Skalierbarkeit und Stabilität stehen auf der Prioritätenliste etwas niedriger.

Außerdem Java ist eine sehr unfun-Sprache zum Codieren. Es hat erst gestern die revolutionäre Fähigkeit erhalten, Zeichenfolgen in einer switch-Anweisung zu verwenden. Und Javascript ist eine sehr hackerische Sprache, sodass Sie sich nach der Entwicklung Ihres Frontends sehr eingeschränkt fühlen, wenn Sie kehren zu Java zurück.

Ich nehme an, dies sind die Gründe, warum Webstarts Java vermeiden.

24
Daniel Iankov

Ich arbeite derzeit in einer Firma, in der es einige "Ich hasse Java" -Entwickler gibt. Es hat mich auch immer betäubt. Ich hasse auf jeden Fall alle Horden von Technologien, die mit Java verfügbar sind. Dies macht es zu schwierig, Entscheidungen zu treffen. Es ist wie Wenn Sie zu viel Auswahl haben, haben Sie keine Wahl. Sie müssen Zeit mit Hunderten von Frameworks verbringen, um wirklich das Framework zu entwickeln, das für Sie funktioniert. Die Standard-Servelt-Architektur ist für die meisten Anwendungen sehr kompliziert. Dies ist bei Ruby, Django und anderen Dingen nicht der Fall. Sie sind eher ein einziger Rahmen als eine Sprache.

Die größten Beschwerden höre ich von Entwicklern

  1. Die Syntax ist zu lang. Um etwas zu drucken, müssen wir System.out.print schreiben. Sie können einen einfachen VI-ähnlichen Editor nicht wirklich verwenden und in wenigen Stunden einen funktionierenden Code schreiben.
  2. Schwache Test-Frameworks. Obwohl die Test-Frameworks in Java und Ruby sehr ähnlich sind, macht Ruby einen Schritt nach vorne, indem es die Dinge leicht zum Testen verfügbar macht. Dies gilt insbesondere dann, wenn Sie DB in Ihrer Anwendung häufig verwenden. Selbst viele der Web-Frameworks denken nicht an Tests.
  3. Vorlagen sind ein Schmerz. Macht die relativ einfache Sprache zu einer Nudelsuppe.
  4. Uncool. Die meisten Java Anwendungen werden in großen Unternehmen geschrieben, was mit Bürokratie verbunden ist, die bei Entwicklern nicht so gut funktioniert. Die Leute denken nicht an Google, wenn sie an Java denken. Google == Python. Es hat auch viel damit zu tun, dass keine Bücher herauskommen, die X in Y Tagen anzeigen.
  5. Mag nicht zu kompilieren. Für die meisten Entwickler ist die Kompilierung ein zehn Jahre altes Phänomen. In den 80ern machte es mit C Sinn, aber moderne Computer können viel mehr. Sie schreiben keinen Code in kompilierten Sprachen. Java ist eine der wenigen Sprachen, die kompiliert und zum Schreiben von Webanwendungen verwendet werden.
  6. Zu viele Oops Konzepte. Obwohl Entwickler die Domäne Oops stillschweigend übernommen haben. Sie mögen es nicht in vollem Umfang. Sie mögen es nicht, wenn Sie eine Anwendung mit 10 Klassen schreiben, wobei jede Klasse nur eine Sache tut. Ermöglicht das Öffnen von Hunderten von Dateien und die Vorstellung einer Interaktion zwischen Hunderten von Klassen, manchmal mit Frameworks. Macht die gesamte Programmieraktivität zur Pflicht. Dies könnte für die meisten Sprachen zutreffen, aber ich habe gesehen, dass Java Entwickler viel darauf achten, was eine Klasse tut. Es sind die Java Entwickler, die oft einen Code mit Hunderten von Klassen entwickeln. Dies ist aus vielen Perspektiven gut, aber nicht Java Entwickler hassen es.

Alles in allem legt Java zu Beginn des Projekts eine steile Kurve fest, was zu viel Geld bedeutet, um gebunden zu werden. Hinzu kommt eine riesige Community, die mit Java verbunden ist. Jede denkt anders und niemand, der wirklich die gesamte Community anführt. Sie sehen auch keine Gespräche und Konferenzen, die von der Community durchgeführt werden und all die coolen neuen Dinge zeigen. Keine neuen coolen Bücher. Java es sieht so aus, als würde es sinken, weil es vor ein paar Jahren verwendet wurde, um zu viele verschiedene Probleme zu lösen.

18
arunmur

Die Frameworks für die Java Webentwicklung haben eine gewisse Lernkurve, sie sind oft übertrieben für das, was Sie brauchen, und ein Großteil der Indirektion, die erforderlich ist, damit die Dinge funktionieren, ist nur ... schmerzhaft ... arbeiten mit.

Ich habe für ein Unternehmen gearbeitet, das Spring/Java-Entwicklung durchgeführt hat, und fand das Framework bestenfalls umständlich. Ich habe nicht viel Angenehmes über Spring's Framework zu sagen, außer dass ich einen Freund hatte, der Struts-Entwicklung machte und er dachte, Struts sei noch schlimmer. Das Web-Framework ist nichts anderes als Desktop-Anwendungen oder mobile Anwendungen (z. B. Android) und enthält viele sehr abstrakte Ideen, deren Verständnis einige Zeit in Anspruch nimmt (obwohl dies Ihnen sicherlich viel Leistung und Leistungsfähigkeit verleiht, wenn Sie dies tun Ich bin ein Profi und mache etwas wirklich Komplexes wie eine App für Unternehmen. Ich liebe es, Java für mobile oder Desktop-Geräte zu programmieren, aber Java für Web-Apps? Nicht so viel.

Ich habe in Ruby/Rails nicht persönlich programmiert, aber mein Freund, der früher Struts gemacht hat, macht jetzt Ruby Webprogrammierung und bezeugt, dass Dinge, die in Java schwierig sind, _ Webprogrammierung erfordert viel weniger Code und Komplexität, um in Ruby zu erreichen. Es gibt sicherlich eine Lernkurve für die verschiedenen Syntax- und Sprachregeln, aber für das Prototyping von Apps hat dies Vorteile in Bezug darauf, wie viel Code erforderlich ist, um ein gewünschtes Ergebnis zu erzielen. Wie bereits erwähnt, ist auch die Skalierbarkeit ein zu berücksichtigendes Problem, und einer der Gründe, warum ausgereiftere Apps in angesagteren Sprachen nicht so häufig vorkommen.

14
Jessica Brown

Es kommt auf Kosten und Trends an. Das Web 2.0-Startup wird von einem Visionär unter 30 erstellt, der mehr Talent als Geld hat (ich verallgemeinere natürlich, aber das sehen Sie "im Durchschnitt"). Er wird eine Sprache verwenden, die er kennt, weil er die Programmierung macht (zusammen mit vielleicht ein paar Freunden). Er ist höchstwahrscheinlich ein Autodidakt.

Java wurde als Unternehmensumgebung ins Visier genommen (mit Java meine ich die Sprache, das Framework und die Standards). Es gibt eine Reihe teurer Tools, die IBMs, Oracles und BEAs weltweit verkaufen möchten.

Die Schritte, um Java zu beherrschen, sind komplex und/oder teuer. Ich weiß, dass sich die Landschaft dort verändert, aber ist es zu spät?

Nachdem das Startup an Bodenhaftung gewonnen hat, kommt das Wachstum. Es ist schwierig, talentierte Entwickler zu rekrutieren. Die meisten "in sechs Wochen Programmierer werden" -Programme unterrichten Java (oder .NET) und der Markt ist gesättigt mit "sechswöchigen Programmierern" (seltsamerweise habe ich Entwickler mit Lebensläufen gesehen, die noch 7 Jahre Erfahrung sagen zeigen das Wissen eines sechswöchigen Programmierers). Die Verwendung einer Nicht-Mainstream-Umgebung ohne "Unternehmen" kann ein natürlicher Filter für sechswöchige Programmierer sein. Es erfordert Engagement und persönliche Investition, um ein Ruby oder Scala außerhalb einer Jobanforderung zu lernen. Dies ist für mich der größte Indikator für Potenzial für einen Kandidaten.

Wissen kommt mit Erfahrung, aber ein engagierter/leidenschaftlicher Programmierer wird (im Durchschnitt) schneller Wissen erlangen als jemand ohne dieses Engagement/diese Leidenschaft. Genau wie ein Kind, das gerne Gitarre spielt, wird es schneller besser als ein Kind, das Unterricht nimmt, weil sein Vater ihn gemacht hat.

14
Michael Brown

Java ist zu kompliziert. Ich mache eine Menge PHP Arbeit und es ist für die meisten Situationen einfach einfacher und schneller. Die Möglichkeit, nur SSH auf einem Server eine PHP-Datei zu öffnen, Änderungen zu speichern und durchzuführen, ist großartig. Die wenigen Java Apps, an denen ich gearbeitet habe, mussten für die einfachste Änderung immer neu gestartet werden. (ohne zu sagen, dass es immer so ist, wie ich es mir vorgestellt habe). Zusätzlich ist PHP Hosting billig und leicht verfügbar.

Ich denke auch, was Sie zumindest mit PHP haben, sind viele Entwickler, die wie ich vor 14/15 Jahren mit statischem HTML angefangen haben. Im Laufe der Zeit haben wir begonnen, PHP zu unseren Websites hinzuzufügen, da dies einfach, unkompliziert und erschwinglich war. Im Laufe der Jahre ist die Sprache gewachsen und hat ihre Fähigkeiten weit über ihre bescheidenen Anfänge hinaus erweitert. Jetzt bemüht sie sich, das zu sein, was ich für eine Menge Dinge halte, die es wirklich nicht ist.

Auf der anderen Seite sehen die meisten PHP Entwickler, die ich kenne, Java als diesen riesigen, übermäßig komplexen 800-Pfund-Gorilla, fast so, als würde man aus dem 18-Rad-Sattelschlepper aussteigen, um zum Lebensmittelgeschäft zu fahren und einen zu bekommen ein Leib Brot.

Ich habe versucht, Java zu lernen, meine ersten Eindrücke, wo es sehr langatmig war und Karpaltunnel induzierte. Als ich anfing, hatte ich viele Fragen, die einem Java Veteranen wahrscheinlich einfach erscheinen. OpenJDK oder Sun? Kater oder Glasfisch oder? Außerdem scheint jedes Intro zu Java Buch Sie dazu zu bringen, Code für die Befehlszeile zu schreiben. Ich denke, die meisten Leute finden das heutzutage ein Schlummerfest.

14
Cyrus

Mein Team und ich entwickeln derzeit eine Greenfield-Webanwendung in Java 6 + Stripes. Im letzten Jahr habe ich auch an einer anderen Webanwendung auf der grünen Wiese mit Java 6 + Stapler (einem etwas unbekannten Webframework, das von Kohsuke Kawaguchi von Hudson/Jenkins entwickelt wurde) gearbeitet.

Java wird absolut für die moderne Webentwicklung verwendet. Sicherlich hat es nicht den "sexy" Reiz von Ruby oder anderen dynamischen Sprachen, aber ich bin weit davon entfernt, überzeugt zu sein, dass dynamische Sprachen eine gute Sache sind, sobald ein Projekt skaliert.

Moderne Java App-Server sind in Bezug auf die Leistung sehr wettbewerbsfähig mit ASP.NET, und beide sind um Größenordnungen schneller als jede mir bekannte dynamische Sprache VM.

Versteh mich nicht falsch ... Ich sage nicht, dass Java immer die beste Wahl ist (nicht aus der Ferne!) - aber es ist auch nicht immer eine falsche oder "veraltete" Wahl.

12
Daniel Pryden
  1. Java ist komplexer zu lernen als PHP/Python/Ruby
  2. Das Java-Ökosystem ist sehr komplex, sehr groß und für Anfänger ziemlich verwirrend
  3. Es gibt viele historisch schlechte Frameworks mit negativem Ruf im Zusammenhang mit Java. Sie müssen wissen, auf welche Frameworks Sie keine Zeit verschwenden müssen
  4. Java Build Tools sind viel zu komplex (Maven & Ant)
  5. Java hat keine einfach zu bedienenden Modulsysteme (OSGI ist viel zu komplex)
  6. Java IDE wie Eclipse ist zwar sehr leistungsfähig mit erstaunlichen Funktionen, lässt sich jedoch ohne viel Erfahrung nur schwer für eine effektive Webentwicklung konfigurieren.
  7. Wenn Sie etwas anderes als Tomcat oder Jetty als Server verwenden, werden Sie durch lange Startzeiten von WebSphere/WebLogic/JBOSS frustriert sein
  8. Java EE löst Probleme, die viele Menschen nicht haben, wie z. B. verteilte Transaktionen

Ein neuer Entwickler, der sich beruflich weiterentwickelt, wird es schwieriger finden, mit Java eine Größenordnung als Rails, Python oder PHP zu beginnen, damit er mit dem vertraut wird, was leicht zu erlernen ist.

Nachdem ich all das gesagt habe, habe ich mich entschieden, Java für mein Startup zu verwenden, weil eine richtig konfigurierte Java Entwicklungsumgebung sehr ist produktiv zu arbeiten. Mit richtig konfiguriert meine ich.

  1. Startzeit von weniger als 10 Sekunden
  2. Richtig konfigurierter Eclipse-Arbeitsbereich, in dem alle Frameworks umstritten und konfiguriert sind
  3. Gute Auswahl an Bibliotheken (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity usw.)
  4. Schnelle Entwicklermaschinen mit SSDs
  5. Orielly Safari-Abonnement
12
ams

Vor ungefähr 5 Jahren erhielten ich und ein Kollege eine Programmieraufgabe für ein internes Projekt. Eine recht einfache Aufgabe, die das Parsen von Befehlen erforderte.

Ich habe mir das Ganze in ungefähr 80 Zeilen Java Code ausgedacht, und mein Kollege hat eine Woche gebraucht, ungefähr 20 Java Klassen und viel mehr Zeilen Java Code das Gleiche tun. Unnötig zu erwähnen, dass sein Code ausgewählt wurde.

Das hat mich gewundert. Überall wurde Komplexität geschätzt. (Ich habe in einem der größten Unternehmen für Softwareprodukte gearbeitet.) Java war das Werkzeug der Wahl und Designmuster waren DER Weg zum Code.

Ist es nun die Denkweise oder nur Arroganz, die die Einfachheit ablehnt? Nun, ich dachte immer, der gesunde Menschenverstand sollte sich durchsetzen. Unabhängig davon, ob es sich um ein Unternehmen oder eine einfache Webanwendung handelt, sind die grundlegenden Anwendungsfälle dieselben. Es sollte korrekt und überprüfbar sein.

Ich benutze Java aus mehreren Gründen nicht mehr. Aber einer der Faktoren - Komplexität - ist die vorherrschende Denkweise in einer Menge vonJava Entwicklern, wenn es um die Entwicklung von Software geht.

Die Skalierung dynamischer Sprachen ist das Ergebnis jahrzehntelanger Forschung. Es passiert viel Ähnliches für Ruby usw.

Scala ist eine Sprache, die ich für äußerst klug und praktisch halte. Abspielen! mit Scala ist für die Entwicklung von Web-/Unternehmensanwendungen genauso gut geeignet wie alle anderen.

Da Ruby und Rails die glänzende Neuerung für Start-ups sind, ist es äußerst schwierig, einen soliden Rails Entwickler einzustellen. Es ist tatsächlich ein Hindernis für jedes Start-up, während die Fülle von Java -Entwicklern geschäftlich sinnvoller sein sollte.

12
Ar Wen

In einem kürzlich geführten Interview mit Joseph Snarr erklärte ein technischer Leiter von Google Plus, wie die Anwendung Java Servlets für das Backend und JavaScript für das Frontend verwendet).

Um Ihre Frage zu beantworten Java wird immer noch für eine sehr moderne Webentwicklung verwendet. Nur nicht für die Start-ups, die in letzter Zeit so viel Presse bekommen haben.

Ich denke, der Grund, warum viele Start-ups andere Technologien verwenden, ist, dass sie sexier sind und einen Open-Source-Push hinter sich haben.

11
Greg Guida

Die Frage sollte lauten: "Warum wird Java nicht von Startups oder für kleine Projekte verwendet?". Java wird sicherlich für "moderne Web-Apps" verwendet. Bei Google , Java wird im Backend für viele Dienste verwendet, und für das Frontend wird geschlossen kompiliertes JS oder GWT verwendet. Das Problem betrifft Geschwindigkeit und Skalierbarkeit. Startups müssen ein Produkt mit minimaler Lebensfähigkeit erreichen. In der Regel handelt es sich um kleine Teams mit 1 bis 3 Ingenieuren, die Wert auf Iterationsgeschwindigkeit und Leistung oder Wartbarkeit legen. Es ist ein Problem, das Sie gerne hätten, wenn Sie auf Skalierbarkeitsprobleme oder Probleme bei der Wartung des Teamcode-Codes stoßen Wenn Sie dieses Stadium erreicht haben, ist dies ein Zeichen dafür, dass Ihre anfängliche Implementierung Ihnen dabei geholfen hat, Kunden oder Investitionen zu gewinnen. Sie können es sich leisten, die App zu diesem Zeitpunkt neu zu schreiben.

Ein Unternehmen wie Google kann sich den Luxus leisten, Dinge für die Skalierung im Voraus zu erstellen, auch wenn es möglicherweise seine Zeit damit verschwendet, die Skalierung für etwas zu implementieren, das möglicherweise keine Benutzer erhält, da es den Verlust absorbieren kann.

Zumindest ist das meine Meinung, dass viele, viele "coole", "hippe", "moderne" Unternehmen kleine Apps mit kleinen Teams erstellen, bei denen Iterationsgeschwindigkeit und Einfachheit die größten Anforderungen sind.

9
cromwellian

Da Sie die Webentwicklung und Java erwähnt haben, neigen viele Menschen dazu zu vergessen, dass die Verwendung von Java Applets in einem Webbrowser zu Beginn nicht gut funktioniert hat, nicht nur das, sondern auch die "Sandbox" für die Applets war nicht vollständig entwickelt und es gab Sicherheitsprobleme mit Java Applets, die im Browser ausgeführt werden und auf lokale Maschinendaten zugreifen können (auch bekannt als clientseitiges Sicherheitsproblem). Sicher, Java war im Backend und in eigenständigen Anwendungen solide, aber ich denke, dass das Verknüpfen von Java der Sprache mit Java Applets (die im Browser ausgeführt werden) etwas durcheinander gebracht hat einige Wahrnehmungen über Java als Webentwicklungskomponente. Ich glaube nicht, dass sie sich jemals davon erholt haben.

9
LocoTx

Einfache Antwort: Lernkurve zur Basisproduktivität.

Framework-basierte Systeme wie RoR neigen dazu, die "Magie" in die Sprache/Syntax zu bringen. Es ist sehr einfach, Ihre grundlegende RoR-Syntax zu erweitern und eine App zum Laufen zu bringen.

Java war zuerst eine Sprache, und Tools und Frameworks wurden später angezeigt. Sie müssen also zuerst lernen Java, und dann müssen Sie Spring oder Grails oder Ihre Super-IDE oder was auch immer lernen. Lieblingsbeispiel für Ruby, es sind keine Setter und Getter erforderlich. Tatsache ist, Java IDEs haben auch die manuelle Codierung entfernt ... aber sie befindet sich immer noch in Ihrer Quelle. Der Vorteil dieses Ansatzes besteht darin, dass es unterhalb des Frameworks eine Sprache gibt, die konsistent ist dass alle Java Entwickler können damit arbeiten.

Dieser Vorteil ist für kleine Startups zweifelhaft, bei denen Zeit von entscheidender Bedeutung ist. Normalerweise tun sie sehr wenig, was sie mit einem Out-of-the-Box-Framework nicht tun könnten. So können sie sich ihr RAD System ihrer Wahl) schnappen und am nächsten Tag eine App live haben.

Wenn Sie sich jedoch Facebook und Twitter ansehen, als sie erweitert wurden, fanden sie Dinge, die von Standard-Frameworks nicht gehandhabt werden konnten, und mussten daher Technologien auf niedrigerer Ebene verwenden.

Dieser heilige Krieg, den Framework-Entwickler haben, dass sie alles schneller erledigen können, ist falsch. Sie können vieles, was sie brauchen, einfacher und mit weniger Lernaufwand erledigen. Und für viele Dinge ist das "gut genug". Verwenden Sie, was für das Problem richtig ist.

7
Lucas McGregor

Traditionelle Webanwendungen auf Java sind zwar gut strukturiert, aber weit davon entfernt, "schnell entwickelt" zu werden. Obwohl ich bisher nur eine vollständige Webanwendung (Java/Tomcat/Struts) geschrieben habe, war das Debuggen äußerst wählerisch, dauerte länger als erwartet und war bei der Implementierung der Geschäftslogikschicht im Allgemeinen schmerzhaft. In Javas potenzieller Verteidigung war es die einzige Webanwendung, die ich in Java geschrieben hatte (obwohl ich es gewohnt bin, Anwendungen auf Systemebene in Java zu programmieren), und ich glaube, ich könnte eine andere Webanwendung etwas schneller schreiben zum zweiten Mal.

Abgesehen davon habe ich auch Anwendungen in PHP und C # geschrieben, und sie funktionieren einfach besser und sind weitaus verzeihender als Java. Darüber hinaus wurde Ruby on Rails speziell für die schnelle Anwendungsentwicklung geschrieben, die, wie Robbie sagte, einen einfachen CRUD-Zugriff auf Datenbanken ermöglichen. Das Problem ist, dass die meisten Websites, die Sie selbst entwickeln, nicht die Anpassungsstufe benötigen, die Java bietet (und die Sie ausführen müssen). Außerdem muss jedes DB-Verbindungsobjekt von Hand geschrieben werden und ist nicht so einfach zu erstellen. Möglicherweise gibt es ein besseres Framework, insbesondere eines, das die Vorteile von den neuen Funktionen zur Unterstützung dynamischer Sprachen in Java 7 nutzt, aber ich habe die Recherche noch nicht durchgeführt.

7
Brian

Google App Engine unterstützt Java, sodass Sie Ihre gesamte Webanwendung in Java schreiben können, indem Sie Eclipse als IDE und Bereitstellungsschnittstelle) mit einer angemessen dokumentierten Google-API verwenden - also würde ich nicht sagen es wird nicht verwendet oder ist nicht verwendbar.

6
Paul

Kommt darauf an, wie Sie "moderne Webanwendungsentwicklung" definieren. Wenn Sie über Startup-Websites mit schneller Abwicklung sprechen, müssen Sie Sprachen und Frameworks berücksichtigen, die für diesen Zweck entwickelt wurden. Wenn Sie nach einer stabilen, skalierbaren Webentwicklung auf Unternehmensebene suchen, suchen Sie nach Sprachen und Frameworks, die diese Ideale unterstützen. In meinem Buch sind das zwei sehr unterschiedliche Ziele. RoR, Groovy usw. sind gut für die erste und Java ist im Allgemeinen besser für die letztere geeignet.

6
cdkMoose

Im Startup, für das ich arbeite, haben wir uns entschieden, sowohl Java als auch JRuby zu verwenden, um unsere API zu implementieren, da sie sich ergänzen.

Für Infrastruktur, Prozessverteilung und Kommunikation nutzen wir die Robustheit von Java, während wir uns für die eigentliche Implementierung der API-Endpunkte für JRuby entschieden haben, da alle Aufrufe JSON beinhalten und es viel sinnvoller ist, eine lose typisierte Darstellung (JSON) mit einer lockeren Darstellung zu manipulieren typisierte Sprache (Ruby).

Wenn wir sehen, dass eine unserer JRuby-Klassen zu einem Engpass wird, implementieren wir sie einfach direkt in Java (im Grunde eine zeilenweise Übersetzung). Dies kann bei Klassen, die häufig vorkommen, sehr häufig vorkommen muss viel rechnen, und in diesem Zusammenhang verhält sich JRuby ähnlich wie eine Prototyping-Sprache.

Wir haben unseren eigenen dynamischen Klassenlader implementiert, was bedeutet, dass wir Java Klassen im laufenden Betrieb ändern können, ohne den Server neu zu starten, und wir waren sehr zufrieden mit der Auswahl. Also das "Sie müssen kompilieren und jedes Mal neu starten "Argument hat nicht viel Gewicht.

Der Schlüssel ist, all das Java EE-Zeug - es ist riesig und umständlich und anti-agil.

5
David Semeria

Ich habe immer noch das Gefühl, dass Java in vielen Webentwicklungen verwendet wird. Aber es geht in der Regel um eher geschäftsorientierte Entwicklungen, die in der Regel weniger offen sind als neue Startups, die etwas Traktion bekommen und ihre eigene Arbeit fördern müssen, sowie mehr Interesse an Technologie . Selbst wenn es auf vielen Unternehmenswebsites verwendet wird, werden Sie es wahrscheinlich nie erfahren, da es ihnen nicht wirklich wichtig ist, öffentlich über ihren Technologie-Stack zu berichten.

Das heißt, alle ursprünglichen Fragen kommentieren ...

Ist es eine Schwäche der Sprache? Im Vergleich zu anderen Sprachen wie Python oder Ruby ist Java ausführlich und neigt dazu, mehr Code zu benötigen, um ähnliche Dinge zu tun. Aber es sind nicht nur die Fähigkeiten der Sprache, sondern auch die Community, die sie umgibt, und die Art der Entwickler, die diese Tools verwenden. Daher sind die meisten Module und Tools in Python, Ruby, PHP usw. Open Source und leichter zu finden als in der Java Welt, nur weil sich diese mehr auf das Geben (und Laden) von Diensten konzentriert. Zum Beispiel ist die Ruby Community wirklich sehr stark auf die Webentwicklung ausgerichtet, sodass jeder Entwickler, der Ruby verwenden kann, über die Probleme und verfügbaren Tools für ein Webprojekt Bescheid weiß. Dies gilt nicht unbedingt für Java Entwickler, die möglicherweise an anderen Systemen wie Berichtssystemen gearbeitet haben. Natürlich wird jeder gute Entwickler aufholen, aber die Wahrnehmung ist, dass der durchschnittliche Java Entwickler weniger besorgt ist, neue Technologien und neue Sprachen zu lernen.

Ist es ein unfaires Stereotyp von Java, weil es so lange existiert (es wurde unfair mit seinen älteren Technologien in Verbindung gebracht und erhält keine Anerkennung für seine "modernen" Fähigkeiten )? Java ist nicht wirklich so alt, und fairerweise hat es sich stark verbessert. Es war die coole, relevante Plattform vor ungefähr 10 Jahren. Aber seitdem gibt es neue Plattformen mit neueren Problemen, wie Ruby on Rails. Der Kernsektor von Java war hauptsächlich die Unternehmenswelt mit unterschiedlichen Problemen. Daher suchten die Leute, die nach neuen Projekten außerhalb suchten, nach unterschiedlichen Tools. Auch der Hauptvorteil von Java Design als Multiplattform ist heute nicht mehr so ​​relevant wie früher.

Ist das negative Stereotyp der Java Entwickler zu stark? (Java ist einfach nicht mehr "cool") Das hat auch etwas Wahres. Java ist immer noch die Sprache, die man lernen muss, um "einen Job zu bekommen". Wenn es Ihnen also egal ist, Sie aber nur etwas lernen möchten, um Geld zu verdienen, werden Sie am Ende ein wenig Java lernen und sich nie wieder darum kümmern, sich zu verbessern. Auch hier geht es viel um Wahrnehmung und Sichtbarkeit. Es gibt Unmengen großartiger Java Entwickler, die codieren, ohne ihr Wissen zu teilen, während es viele PHP Entwickler gibt, die vielleicht nicht so gut sind und Blogs schreiben und in Open Source zusammenarbeiten. Das führt zu der Annahme, dass die PHP Entwickler besser sind als die Java, da Sie bestimmte Rückmeldungen zu ihnen haben.

Sind Anwendungen, die in anderen Sprachen geschrieben wurden, wirklich schneller zu erstellen, einfacher zu warten und bieten sie eine bessere Leistung? Ich würde sagen, dass sie schneller zu erstellen sind. Die Prinzipien von Sprachen wie PHP, Python oder Ruby machen sie ziemlich gut für die Generierung von Software, die sich ständig ändern kann. Z.B. Die dynamische Eingabe erleichtert das Ändern einer Benutzeroberfläche. In Java ist es wichtig, eine genau definierte Schnittstelle zu haben, was zu stabileren (und schwer zu ändernden) Schnittstellen führt. Dies ist bei einem neuen Startup sehr wichtig. Das Hauptproblem besteht darin, ein Produkt zu erhalten, bevor Ihnen das Geld ausgeht. In Bezug auf die Leistung ist es sehr leicht, die Anforderungen zu missverstehen und zu versuchen, Zaubertricks zu verwenden, um die erforderliche Leistung zu erzielen, z. B. "Java ist schneller als Ruby. Periode" oder "MongoDB ist Web-Skala". . Die Realität ist schwieriger als.

Wird Java nur von großen Unternehmen verwendet, die zu langsam sind, um sich an eine neue Sprache anzupassen? Definitiv, bereits ein bestehendes Team von Java Entwickler im Unternehmen erleichtern die Verwendung derselben Sprache für neue Projekte. Dies wird als "sichere Wette" angesehen, insbesondere wenn der Kern des Unternehmens nicht die Technologie ist. Trotzdem wird Java nicht NUR in großen Unternehmen verwendet. Es gibt immer noch viele Startups, die Java für coole Sachen verwenden (zum Beispiel FightMyMonster oder Swrve verwendet Java ausgiebig), aber ich würde sagen, dass die allgemeine Tendenz in der Startszene darin besteht, andere Sprachen zu verwenden. Dies ist auch eine Möglichkeit, Leute zu gewinnen, da die meisten Leute aufregender sein werden, mit Ruby, Python oder PHP zu arbeiten, die als "freundlichere" und "unterhaltsamere" Sprachen wahrgenommen werden, als mit Java zu arbeiten.

5
Khelben

Dies ist wahr, aber nicht wegen Java und seines Ökosystems. Es ist wegen Menschen, die bei der Verwendung von Java) dazu neigen, große Unordnung und schwere Greuel zu verursachen.

Es gibt genügend Frameworks (Spring-MVC, Grails, Play usw.), mit denen Sie Dinge schnell erstellen können. Die Tatsache, dass Menschen ihre Systeme überentwickeln, ist ein Problem, das mit dem erhöhten Wissen einhergeht, das Menschen erhalten, wenn sie mit dem Java Ökosystem) arbeiten - Sie wissen viel mehr und haben sie zur Verfügung (es gibt Werkzeuge) für alles) und "alles sieht aus wie ein Nagel".

Wenn Sie "hacky" sind, können Sie mit Java wie mit anderen Sprachen) fast dasselbe tun, und hier ist eine Studie, die Folgendes anzeigt:

Studie von 49 Programmierern: Das statische Typsystem hatte keinen Einfluss auf die Entwicklungszeit ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf

5
Bozho

Um nur ein bisschen zu dem hinzuzufügen, was bereits gesagt wurde, denke ich, dass vieles damit zu tun hat, wie schnell Sie von nichts (im wahrsten Sinne des Wortes) zu einer funktionierenden Webanwendung gelangen können.

Wenn Sie heute nur eine Idee haben, ist es fast so einfach, von Ihrem derzeitigen Standort zum Schreiben Ihrer Webanwendung zu gelangen, wie wenn Sie einen Hosting-Anbieter oder Ihre eigene Infrastruktur (wie ein EC2-Image) auswählen. Die Wahl von Java ist meiner Erfahrung nach normalerweise mehr Arbeit und kostet oft auch mehr.

Wenn Sie sich für Linux und PHP/Python/Ruby entscheiden, sind die Tools und die Plattform kostenlos und so konzipiert, dass sie sich gegenseitig unterstützen. Bei Java scheinen die beiden Welten (Betriebssystem und Java) manchmal nicht in Harmonie miteinander zu arbeiten.

3
Matt Ryan

Wer sagt, dass es nicht ist?

Spring MVC + Spring Data JPA oder Mongo + Thymeleaf zum Templating + Coffee-Maven-Plugin für das Transpilieren von Kaffee zu JS und los geht's.

3
Martin Spa

Viele könnten Java und die Entwicklung von Webanwendungen mit den Schrecken von J2EE in Verbindung bringen, das zusammen mit monströsen J2EE-Anwendungsservern von großen blauen und roten Unternehmen Wochen der Arbeit entsprach, bevor die grundlegende "Hello World" online war .

Zwar sind die jüngsten JEE-Spezifikationen und -Implementierungen leichter, aber ich würde immer noch dreimal darüber nachdenken, bevor ich so etwas für ein schnelles Entwicklungsprojekt mit kurzem Zyklus vorschlage.

Dies ist immer noch die standardbasierte Methode zur Entwicklung von Webanwendungen in Java. Die Alternativen, von denen viele in anderen Antworten erwähnt werden, vermitteln ein gemischteres und verwirrenderes Bild mit zu vielen Entscheidungen.

Andere Sprachen stellen eine einzige schlüsselfertige Lösung anstelle dieser Vielzahl dar. Dies lässt diese Wahl zweckmäßiger erscheinen, wenn Sie wichtigere Fische zum Braten haben.

3

Ich denke, es wird viel mehr verwendet als man denkt - die Verwendung liegt direkt unter der Wasserlinie. Es gibt viele, viele Ruby on Rails Wrapper um dicke, ausgefallene Java -Dienste). Besonders wenn Sie anfangen, sich mit irgendetwas zu beschäftigen Annäherung an Big Data.

2
Wyatt Barnett

Java war cool, Java ist cool und Java wird in Zukunft cool sein. Ich entwickle eine Web-App. Mit Java.

Das Hauptproblem bei Java ist, dass ein mittelgroßes Team von 7 bis 10 Personen benötigt wird, um die Ergebnisse der Implementierung zu sehen. Entwickler des Backends müssen über Kenntnisse der Anwendungsarchitektur von ORM über Application Framework bis hin zu verfügen Präsentationsschicht. Zu viele Optionen für Entwickler auf dem Tisch, und dies wirft die Fragen auf. Ist es eine gute Idee, ein ORM zu verwenden oder nicht? Welches ORM-Framework soll verwendet werden? Welches Anwendungsframework wird verwendet? Wie wird das Front-End implementiert? Alle Dies macht den Entwicklern Schwierigkeiten und macht die Kombinationen für den Endbenutzer endlos, um diese Technologie mit dem Framework auszuwählen, mit dem Entwickler nicht vertraut sind. Das gleiche gilt für IDE Plugins; zu viele Optionen, viel Es wird viel Zeit für die Installation, Konfiguration und Prüfung aufgewendet, ob diese Version eines Plugins mit dieser Version von IDE usw.) funktioniert. Das Letzte ist das Hosting; viele entwickelten Java Apps werden nicht veröffentlicht, da es kein richtiges Webhosting für Java Web Apps, gett Ein VPS für 80 US-Dollar pro Monat ist für zu viele Entwickler keine Option, und die meisten Anwendungen benötigen mehr als einen VPS.

2
newphoenix

Ich verwende viel Java zum Erstellen von Webanwendungen. Wenn es also um die * Sprache selbst * f geht, finde ich nur ein (aber großes) Problem - mangelnde mehrzeilige Unterstützung. Dies macht das Drucken/Templating in reinem Java Code sehr unlesbar.

Das eigentliche Problem ist jedoch das Fehlen guter Web-Frameworks. Ich habe mit vielen Lösungen gearbeitet, und keine davon konnte ich als gut oder sogar befriedigend bezeichnen.

Die meisten von ihnen sind tatsächlich XML-Programmierung. In JSF erzeugen Sie Tonnen von XML, und wenn Sie einige allgemeine Funktionen ändern möchten, z. B. Beschriftungen am oberen Rand der Textfelder neu anordnen, werden Sie enden die gleiche Änderung an mehreren Stellen vornehmen. Ja, Sie haben Includes, aber vergleichen Sie sie mit den Includes von PHP ...

Darüber hinaus enthält das neue JSF "zusätzliche" Funktionen, die den JavaScript Frameworks Jahre zuvor bekannt waren ...

ZK ist etwas besser, da es das Erstellen der Webelemente im Code Java Code) ermöglicht, was die Änderungen erleichtert (wenn Sie verwenden OOP richtig - Vererbung usw.). Dieser Java Code wird jedoch auf der Serverseite ausgeführt, was ein großes Leistungsproblem darstellt - jeder Klick wird veranlassen, dass ein Paket an den Server gesendet wird.

Nun, GWT ist das beste Webframework, mit dem ich gearbeitet habe. Es ermöglicht die Objektprogrammierung im Webdesign. Jedes Element auf dem Bildschirm wird durch das Objekt Java) dargestellt, das Ihnen volle Flexibilität bietet, aber ... Die Kompilierungszeit ist sehr lang und das generierte Javascript ist alles andere als optimal, einfach weil GWT nicht ist Die JavaScript-Möglichkeiten werden nicht vollständig genutzt (keine Unterstützung für die Reflexion, zumindest in der von mir verwendeten Version, und schwerwiegende Implementierung von HashMap).

Sie können Vorlagen wie Velocity verwenden, aber wie oben sind sie eine schlechte Version der Vorlagenmöglichkeiten, die Sprachen wie PHP bieten.

Es ist also kein Hass gegen Java, aber die mangelnde Unterstützung für das Schreiben von Web-Apps, die man bei Verwendung von PHP erhält, Python etc ...

1
Danubian Sailor

Das Problem mit Java ist, dass diese Sprache in der Schule gelernt wird, also die Sprache, die neuen Programmierern am bekanntesten ist. Wenn Sie sich also von der Masse abheben möchten, müssen Sie eine neue lernen Sprache, Java ist die Sprache aller.

Der zweite Grund ist, dass in der Schule oder in großen Unternehmen, wenn Sie eine Webanwendung erstellen möchten, Lehrer oder bereits vorhandene Personen Ihnen Tonnen von Java Frameworks) zur Verfügung stellen, mit denen Sie diese Anwendung schneller erstellen können. Auf diese Weise erstellen Sie Ihre Webanwendung, ohne das Web wirklich zu verstehen (HTTP, HTML, CSS, Javascript usw.). Dieser Trend ist bei anderen Sprachen wie RoR oder Python weniger sichtbar. Entwickler, die diese Sprachen verwenden, haben eine besseres Verständnis des Webs.

Daher bevorzugen die Statups, die moderne Webanwendungen erstellen möchten, die Verwendung von RoR, PHP oder Python), um gute Webentwickler anzulocken, die das Web verstehen und nicht nur eine Programmiersprache.

1

Wenn mit "modern" "beliebt" gemeint ist (wie bei der meisten Berichterstattung in der Presse), ist der Grund, warum Java nicht verwendet wird, sehr einfach - weil alle "coolen Kinder" Rubyverwenden. _ (oder Python oder Clojure oder Scala oder was auch immer heutzutage "cool" ist).

Dies hat eine tiefere Bedeutung. Dieselben Leute, die Ruby oder Python verwenden, um ihre "modernen" Webanwendungen zu schreiben, sind normalerweise wirklich großartige Innovatoren. Menschen, die es lieben, lästige Probleme auf einfache und effektive Weise zu lösen und dabei Zeit und Gehirnleistung zu sparen. Einige könnten sagen, dass dies Eigenschaften guter Programmierer sind.

Diese Leute schaffen normalerweise auch die meiste Presse um ihre Projekte, was große Unternehmen selten tun. Sei es durch Open Source oder durch das Schreiben von Blogs oder was auch immer.

Die Anziehungskraft dieser Menschen in die Welt der dynamischen Sprachen, in der ihnen einfachere/kleinere/schnellere/schlankere Möglichkeiten zur Lösung von Problemen angeboten werden, ist leicht zu verstehen. Leider bedeutet dies, dass dieselben Leute, die großartige Java Entwickler waren, den Java Zug reifen und aufgeben, weil es (für sie) ärgerlich und schwierig ist, dieselben Probleme zu verwenden und zu lösen.

Wenn Sie eine einfache Webanwendung mit MVC Framework X erstellen, müssen Sie nur 100 Codezeilen in Rails/Django schreiben/bearbeiten, und im Gegensatz dazu sind 10.000 Codezeilen in Java erforderlich, um dasselbe zu tun - es ist sehr offensichtlich, warum das ärgerlich erscheinen könnte.

In Bezug auf Ihre Aussage "Ich habe in Java nichts Kritisches" vermisst "gesehen, was mich daran hindert, dieselbe Anwendung zu erstellen." Die Frage ist - wenn Sie die gleiche Erfahrung in Rails/Django/Whatever hätten ... wie würden diese beiden Anwendungen Java und Nicht-Java miteinander vergleichen und Zeit und Aufwand messen Metriken, die Sie erstellen können.

1
Evgeny

Eine interessante Antwort gibt Dries Buytaert, der Drupal gegründet hat. Obwohl er über Java promovierte, entschied er sich für PHP als Drupal und bereute es nicht. Sie können es (und einige seiner Kommentare) hier lesen: http://buytaert.net/why-php-and-not-Java

Es wäre sehr schwierig gewesen, eine kritische Masse zu erhalten, wenn Drupal in Java geschrieben worden wäre.

0
johanvdw