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

393

Als professioneller Java-Programmierer habe ich versucht zu verstehen, warum Java für moderne Webanwendungen so hässlich ist.

Mir ist ein Trend aufgefallen, dass von modernen Web-Startups ein relativ kleiner Prozentsatz Java verwendet (im Vergleich zu Javas allgemeiner Beliebtheit). Wenn ich ein paar Fragen dazu habe, erhalte ich normalerweise 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 sich negativ auf Java-Entwickler bezieht - mehr oder weniger, was bedeutet, dass sie langsam und nicht kreativ sind.

Aus diesem Grund habe ich viel Zeit damit verbracht, Ruby / Rails abzuholen, um herauszufinden, was mir fehlt. Aber ich muss mir denken: "Ich könnte das viel schneller machen, wenn ich Java verwenden würde", hauptsächlich aufgrund meiner relativen Erfahrung.

Aber auch, weil ich in Java nichts Kritisches "Vermisstes" gesehen habe, was mich daran gehindert hat, dieselbe Anwendung zu erstellen.

Womit ich zu meinen Fragen komme :

Warum wird Java in modernen Webanwendungen nicht verwendet?

  • Ist es eine Schwäche der Sprache?

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

  • Ist das negative Klischee der 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?

Cliff
quelle
142
Ich denke, Sie sind falsch: es wird immer noch verwendet, es ist nur cool Faktor verloren.
41
@ Abraham Lee: Java war schon mal cool? Ich muss etwas verpasst haben. Nun, ich denke, es ist kalter Kaffee, aber cool? Ich denke, der Hauptgrund ist, dass Java, insbesondere die Enterprise Java Frameworks, stark überarbeitet wurden und werden. Sie können sie nicht als leichtgewichtig betrachten, Sie verwenden sie nur, weil Sie die Distributions- / Balancing- / Skalierbarkeitsfunktionen der Plattform benötigen und ein Framework für das Frontend verwenden möchten, das aus Gründen der Homogenität auch mit Java erstellt wird.
Falcon
20
Vielleicht, weil es nicht modern ist ? : P Und Java war nie cool, nur weil es den Hacking-Teil aus der Programmierung geworfen hat.
back2dos
28
@ Falcon Java war cool, als es eingeführt wurde. Sun hat großartige Arbeit geleistet, Java zu hypen. Ob der Hype gerechtfertigt war oder nicht, hat nichts damit zu tun, dass es cool ist oder nicht. Viele coole Dinge werden ohne Grund hypen gelassen.
Mahmoud Hossam
11
@Falcon, Sie sollten einen Blick auf die Erstellung von Webanwendungen mit JSF 2.0 in Java EE 6 werfen und diese mit Ihren Erfahrungen vergleichen. Sie können angenehm überrascht sein.

Antworten:

174

Moderne Startups müssen so schnell wie möglich auf den Markt kommen. Sie müssen keine sechs Monate aufwenden, um ihre Java-Webanwendung 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.

Chiron
quelle
81
Play Framework ist auch wie Ruby on Rails, aber für Java. Code -> aktualisiere deinen Browser.
Jonas
34
Versuchen Sie einfach, einige Missverständnisse loszuwerden. Java EE ist nicht das Einzige auf der Java-Serverseite, wie viele zu denken scheinen.
Jonas
22
Facebook macht auch etwas Ähnliches. Ihre Codebasis ist PHP, aber aufgrund von Geschwindigkeits- und Skalierbarkeitsproblemen mussten sie einen Compiler (HipHop) schreiben, der PHP in C ++ kompiliert und anschließend mit g ++ kompiliert. Es ist lustig, wie alle darüber reden, wie großartig Ruby und PHP sind und dass alle Sites um sie herum aufgebaut sind, aber wenn Sie sich ansehen, wie ineffizient sie sind, müssen die meisten großen Unternehmen auf etwas anderes umsteigen. Wenn ich mich recht erinnere, hat Craigs List aus genau diesem Grund eine Menge Backend-Code in C / C ++ geschrieben.
Kibbee
28
1) Bei Verwendung von Eclipse erfolgt die Kompilierung während der Eingabe, und Sie werden es selten bemerken. Außerdem kann ich mit Tomcat in Eclipse eine App in weniger als einer Sekunde neu starten. Ich werde selten durch einen Neustart meiner Apps behindert. 2) Es gibt keine Silberkugel, Jungs. Ruby oder eine andere Sprache macht Sie nicht 10x schneller. Das Problem mit Java-Entwicklern ist häufig die Hochlaufzeit. Wenn Sie jedoch wissen, was Sie tun, können Sie in weniger als 10 Minuten mit der Arbeit an einem Projekt beginnen.
alex
5
Java und jede andere statische Sprache bieten zwei enorme Vorteile: Fast sorgenfreies Refactoring und API-Erkennung ohne Dokumentation.
Eran Medan
136

Meiner Erfahrung nach ist Java für Webanwendungen für kleine Anwendungen zu viel des Guten. Ein einfaches Blog mit einer Datenbanktabelle, in der Blogeinträge gespeichert sind, könnte beispielsweise sehr viel einfacher gestaltet werden.

Ich habe in der Regel gesehen, dass Java in viel größeren Webanwendungen (z. B. Banken und Versicherungen), die mit einer Reihe anderer Systeme kommunizieren (z. B. Mainframe-Back-Ends und Datenbanken sowie Hintergrund-Stapelverarbeitungssysteme für Peer-Webservices), viel besser abschneidet. 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.

FrustratedWithFormsDesigner
quelle
5
Für "kleine" Anwendungen gilt dies umso mehr, wenn Sie (da dies der "Standard" ist und das Unternehmen ihn verwendet) mit Monster-Anwendungsservern wie Websphere arbeiten müssen, während Tomcat zum Beispiel häufig genug ist. .. Warum oh warum muss ich mit dieser durcheinandergebrachten Administrationskonsole arbeiten?
Seufz
7
@Jalayn: Meiner Erfahrung nach möchten sie nur ein Anwendungsserverprogramm für alles verwalten und nicht WebSphere für Team A, Tomcat für Team B, Glassfish (oder etwas anderes) für Team C, und das kann ich verstehen fühle mich auch, aber ja, es ist auch frustrierend für mich.
FrustratedWithFormsDesigner
3
Dies gilt für Java EE, aber jetzt gibt es Play Framework , mit dem Ihre Java-Webanwendungen so leicht und produktiv wie Ruby on Rails werden.
Jonas
9
Das neue Java 6 EE - insbesondere das Webprofil - ermöglicht einige ziemlich einfache Webanwendungen.
4
@ ThorbjørnRavnAndersen Die App mag einfach sein, aber das Verständnis des Frameworks ist es nicht und das Verständnis der wichtigsten Tools wie Ant oder Maven auch nicht. Die Lernkurve eines Neulings ist riesig und voller verschachtelter Schichten von Akronymsuppe, Verwirrung zwischen Spezifikationen (z. B. JAX-RS) und Geräten (z. B. Jackson) und vielem mehr. Es ist immens kompliziert, etwas Einfaches zu tun, wenn Sie wirklich verstehen wollen, was Sie tun.
Craig Ringer
135

Ich habe 10 Jahre lang Java-Webanwendungen programmiert, bevor ich vor über 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 erreichen kann, und ehrlich gesagt bin ich viel glücklicher, wenn ich mich mit Python entwickle. Hier sind einige der Gründe, warum ich denke, dass Python aufgrund meiner persönlichen Erfahrung besser ist als Java.

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 gab. Ich habe eine Reihe von Struts-Apps erstellt, einige davon in anderen Frameworks. Immer wenn ein neues Framework herauskam (Tapisserie, Wicket, GWT, Stripe, Grails, AppFuse, Play, RichFaces, Spring usw.), probierte ich es aus und stellte fest, ob es besser war, und meistens war es nur ein bisschen besser und manchmal gar 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 Tonne von Drittanbieter-Bibliotheken aus Orten wie Apache Commons einbinden. Wenn Sie so etwas wie den Ruhezustand mit einer anderen großen Bibliothek verwenden, landen Sie in der Hölle der Jar-Abhängigkeiten, in der der Ruhezustand eine Version eines Glases und etwas anderes eine andere Version benötigt. Wenn Sie die JAR-Dateien in der falschen Reihenfolge laden, haben Sie Pech. Sie müssen sich auf Tools wie maven und ivy verlassen, um Ihre Abhängigkeiten zu verwalten, und dies bringt einfach mehr Abhängigkeiten in Ihr Projekt, was dazu führt, dass Projekte riesig sind. Ich hatte einige Kriegsdateien 100MB + Kriegsdateien für die einfachsten Web-Apps.

Zu viele Optionen:

Aus irgendeinem Grund scheint es zu viele verschiedene Möglichkeiten zu geben, dasselbe in Java zu tun. Es gibt über 38 verschiedene Web-Frameworks für Java gemäß Wikipedia ( 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 Nummer. Einige Leute denken, dass es eine gute Sache ist, viele Optionen zu haben, aber es führt nicht zu viel vergeblichem 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 speicherhungrig. Wie jede Software können sie optimiert werden, um den Ressourcenverbrauch zu verringern, aber im Vergleich zu anderen Sprachen ist ihre sofort einsatzbereite Konfiguration fürchterlich. In meiner Vergangenheit habe ich Weblogic, Websphere, Jboss, Tomcat und Jetty verwendet. Ich habe nur die ersten drei verwendet, als ich gezwungen war, EJBs zu verwenden, aber selbst wenn Sie keine EJBs verwenden, waren sie große App-Server und manchmal schwierig zu konfigurieren und ordnungsgemäß auszuführen. Tomcat und Jetty sind viel besser und einfacher einzurichten, sind 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 vernünftigen Preis zu finden. Der Hauptgrund dafür 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, seinen wertvollen Arbeitsspeicher für die Ausführung einer Java-Site zu verwenden, wenn 5 PHP-Sites an derselben Stelle ausgeführt werden 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, und dies verlangsamt den iterativen Prozess. Ich weiß, dass es Möglichkeiten gibt, dies zu beschleunigen, aber selbst im besten Fall fühlte ich mich viel langsamer als in Python.

Es gibt auch viel weniger Boilerplate-Code, um dasselbe in Python zu tun, so dass ich weniger Zeit mit der Entwicklung des Codes verbringe.

Java ist in vielen Teilen überentwickelt. Viele 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 benutzen und zu entwickeln sind.

IDE:

Als ich in Java entwickelte, fühlte ich mich an der IDE festgehalten, ich war verloren ohne sie. 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 einfach textmate verwendet, einen normalen Texteditor. Anfangs war es schwierig, aber weil es nur ein Texteditor war, war es eine sehr schnelle und reaktionsschnelle Anwendung. Ich konnte mein gesamtes Projekt in wenigen Sekunden öffnen, während es bei einem Computer mit einer Tonne RAM eine Minute oder länger dauern konnte, wenn ich ein Projekt in einer IDE öffnen wollte. Die Macher von IntelliJ haben einen Python-Editor namens pycharm herausgebracht. Ich habe ihn gekauft, als er herauskam, und er ist großartig. Mir ist jedoch aufgefallen, dass ich keine IDE für Python benötige. Ich kann gut mit einem Texteditor umgehen. Wenn ich wieder an Java-Webanwendungen 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 die IDE für Java mehr, weil das Neukompilieren und erneutes Bereitstellen länger dauert, wenn ich etwas vermassle, 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 tat. Ich war zufrieden damit, bis ich mit Djangos ORM eine Anwendung für ein Python-Projekt gemacht habe, und das hat mir die Augen geöffnet, so soll ein ORM funktionieren. Nach diesem Projekt ging ich zurück in den Winterschlaf und fühlte mich nur enttäuscht und sehnte mich danach, zu Djangos ORM zurückzukehren. Ein weiteres großartiges Python-ORM ist sqlalchemy, das Djangos ORM ähnelt, aber ein wenig anders ist. Ich habe nur begrenzte Erfahrung mit ORM von ROR, aber soweit ich mich erinnere, war es auch ziemlich gut.

Vorlagen:

Die Web-Templating-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 handhaben. Auf der Python-Seite sind meine beiden Favoriten Django-Vorlagen und Jinja2. Sie haben alles, was ich in einer Templating-Engine brauche, und sind wirklich einfach zu bedienen.

Ken Cochrane
quelle
10
Ich bin in vielen Punkten bei Ihnen, aber mit einigen habe ich Probleme. Kompilierungs- / Testschleife: Verwenden Sie das dynamische Webmodul von Eclipse und / oder JRebel. groß. Schwere : JBoss AS 7 ist ziemlich leicht und schnell. und wenn Sie kein EE wollen, können Sie Tomcat oder Jetty benutzen, die es kaum gibt. Testen : Arquillian ist das beste Testwerkzeug, das ich in JEDER Sprache verwendet habe, obwohl es gerade erst ausgereift genug ist, um verwendbar zu sein. Abhängigkeitshölle : Verwenden Sie einfach Maven; es sollte ein standard und mandatierter teil von JAva sein.
Craig Ringer
Beachten Sie, dass alle oben genannten Punkte zu dem Problem "Batterien nicht im Lieferumfang enthalten" führen, das ein großes Problem darstellt. Java EE ist ein Unterframework, auf dem Sie Ihr eigenes Framework aufbauen müssen, um dann Ihre App zu erstellen. Sehr ineffizient. Jedes Tool ist auch schrecklich fehlerhaft, und JSF2 ist einfach ein Instrument zur Zerstörung der Entwicklerproduktivität.
Craig Ringer
2
Ich denke auch, dass Sie einen kritischen Punkt übersehen haben: Die Lernkurve und die Fehler verlangsamen die Dinge wirklich.
Craig Ringer
@CraigRinger Ich habe weder das dynamische Webmodul von Eclipse noch JRebel verwendet. Sie haben also Recht, es könnte weg sein.
Ken Cochrane
2
Wenn Sie IntelliJ mögen, probieren Sie PyCharm aus - es basiert auf demselben Kern.
Tamlyn
94

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

Unternehmen wollen stabil, zuverlässig und skalierbar sein: Java und .NET passen genau zu dieser Rechnung (wenn sie korrekt ausgeführt werden).

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

Bisherige Auftritte:

  1. Bildungstestservices - ColdFusion
  2. Hochrisikoversicherung - ColdFusion und Java
  3. 401k - ColdFusion und Java
  4. Reise - Java mit internen ColdFusion-Apps
  5. Sicherheiten - ColdFusion (Vor-Java-Version)

Dies sind alles hochvolumige Websites mit hoher Sicherheit. Niemand in einem dieser Unternehmen hat jemals über PHP nachgedacht, einige haben sich mit RoR befasst und zu viele Probleme festgestellt. Das 401k-Unternehmen hatte eine Schwesterfirma, die eine .NET-Anwendung mit kompetenten Entwicklern betrieb. Die App stürzte jede Woche ab. Sie konvertierten es schließlich nach Java und gewannen an 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 scheu sind. Sie sehen das Glänzen und die Figur, wenn alle coolen Kinder es benutzen, warum nicht ich?

Adrian J. Moreno
quelle
23
"Die 401k-Firma hatte eine Schwesterfirma, die eine .NET-Anwendung mit kompetenten Entwicklern betrieb. Die App stürzte jede Woche ab. Sie konvertierte sie schließlich auf Java und gewann an Stabilität." Lol :), habe von dem gegenteiligen Fall gehört.
Den
12
Na klar hast du. Webanwendungen beinhalten mehr als das Schreiben von Code. Sie müssen wissen, wie Sie Ihre Server optimieren, optimales SQL schreiben und so weiter. Diese Firma hatte 2 .NET-Entwickler und keine echten Serveradministratoren. Die Firma, die die Firma gekauft hat, bei der ich war, hat auch diese App im Deal. Sie waren ein gewaltiger Java-Shop und verfügten daher über mehr Ressourcen, um Stabilität zu gewährleisten.
Adrian J. Moreno
48
Es scheint mir unaufrichtig, dass Sie diesen Satz geschrieben haben, der als Ursache und Wirkung angegeben ist. In Java konvertieren = Stabilitätsgewinn? Wir alle wissen, dass dies nicht der Grund ist. Außerdem entschuldige ich mich für all die ColdFusion-Erfahrungen;)
Jordan
3
Um fair zu sein, tendieren Anleger dazu, den Geschmack des Jahres zu sehen. Ich persönlich kann mir aber immer noch keine schlechtere Wahl für die schnelle Prototypenentwicklung vorstellen, wenn man sich nicht für Java-Entwickler mit sehr hoher Qualität entscheidet, die nicht leicht zu finden sind.
Erik Reppen
9
Java-Entwickler von sehr hoher Qualität, die nicht leicht zu finden sind - in der Tat.
Luis.espinal
73

Eine Ergänzung zur Antwort von FrustratedWithFormsDesigner : Da sich Ihre Frage vermutlich eher auf kleinere Websites bezieht, müssen Sie einen wichtigen Aspekt berücksichtigen: Hosting ist für PHP allgegenwärtig, für Java- oder ASP-Websites jedoch schwieriger. Dies ist jedoch kein Mangel dieser Sprachen.

sebastiangeiger
quelle
Ich denke, dies hat sich jedoch geändert. Jetzt können Sie Java-Webanwendungen kostenlos auf GAE hosten.
Mahmoud Hossam
+1 für das Hosting von Java. Obwohl ASP.Net nicht schwer zu finden und billig ist. Ich bezahle 8 US-Dollar pro Monat für mein gemeinsames ASP.Net-Hosting. Andererseits wollte ich versuchen, eine Site in Java aufzubauen, und konnte keinen gemeinsam genutzten Host finden, auf dem Java ausgeführt wird, und die Verwendung eines VPS interessiert mich nicht für ein Lernprojekt.
Jetti
9
+1 dafür. Es ist weitaus einfacher, viele Websites auf einem Server für PHP zu hosten als für Java. Außerdem ist es weitaus einfacher, günstige Webhosting-Lösungen für PHP zu finden als für Java.
Jonas
Du hast recht @Mark, behoben.
sebastiangeiger
1
@Kibbee - Arvixe Das ist, wen ich benutze. Ich habe den personalASP Pro-Plan.
Jetti
70

Java wird für die moderne Entwicklung von Webanwendungen unbedingt 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 bin jedoch der Meinung, dass die modernste Webentwicklung auf der JVM-Plattform wahrscheinlich in einer der neuen JVM-Sprachen ausgeführt wird, anstatt Java direkt zu verwenden, wobei Java lediglich das Rückgrat in Bezug auf die zugrunde liegenden Bibliotheken und die Back-End-Infrastruktur darstellt. In Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) und Clojure ( Noir , Ring / Enlive + viele benutzerdefinierte Frameworks) ist viel Webentwicklung im Gange, um nur einige zu nennen.

Nach all den Neuerungen im neuen JVM-Sprachraum gehe ich persönlich davon aus, dass Java letztendlich zum "Assembler der serverseitigen Programmierung" wird.

mikera
quelle
Vaadin ist ein großartiges Tool zum Erstellen von Intranet- und Big Enterprise-Anwendungen. Es ist nicht so gut für ein Startup geeignet, denke ich. Das ist, wenn Sie nicht annehmen, wie es aussieht, weil es zu schwer ist, es zu ändern.
Naugtur
7
Einverstanden; Java EE 6 ist großartig, sobald Sie JSF2 fallen lassen und etwas vernünftiges und produktives verwenden. Die Lernkurve ist jedoch immer noch immens .
Craig Ringer
1
Sie können Tapestry5 ( tapestry.apache.org ) zu Ihrer Liste der modernen Java-Webframeworks hinzufügen .
Neeme Praks
@CraigRinger JSF ist einfach. Ihr Kommentar liest sich wie die Frage selbst: Ein religiöser
Schimpanse
@jwenting Nun, es sind drei Jahre vergangen , daher hat sich die Dokumentation und die externen Tools seitdem ein wenig verbessert. Auf dem EE 6 Stack, als ich damit arbeitete, war es verdammt schrecklich, mehr noch, wenn ich Glassfish 3 und AS 7 unterstützte.
Craig Ringer
41

Gilt Google, Amazon oder LinkedIn als modern?

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

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

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

Viele Sprachen, die in der modernen Webentwicklung verwendet werden, werden dynamisch typisiert. Dies ermöglicht Tools, mit denen Code dynamisch neu geladen werden kann, während er geschrieben wird (dies ist in einer statischen Sprache schwieriger zu bewerkstelligen - jrebel). Da sich die Webentwicklung für schnelle Iterationen eignet, ist das dynamische Neuladen ein großer Gewinn. Dies verkürzt den Entwicklungszyklus für Projekte auf der grünen Wiese erheblich und erleichtert es, die Benutzeroberfläche und die UX-Umgebung korrekt zu gestalten (von Natur aus Versuch und Irrtum).

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

Darüber hinaus steigt mit steigender Anzahl von Entwicklern und steigendem Umsatz von Produkten die Wahrscheinlichkeit, dass gut gemeinte Leute Bugs in die Höhe treiben. Die Sorgfalt und Disziplin, die ein gut gestaltetes Java-Projekt (Schnittstellen, Muster und Weihwasser für diese PHP-Vampire :) erfordert, hilft, das langfristige Risiko zu verringern. Dies kann auch durch Unit-Tests erreicht werden. Das aus statischen Überprüfungen (und statischen Analysegeräten wie Findbugs und Clang) abgeleitete Sicherheitsnetz bietet jedoch eine integrierte Codeabdeckung, die mit handschriftlichen Tests nur schwer zu reproduzieren ist. Verstehen Sie mich nicht falsch, es sollte Komponententests und Funktionstests geben, aber echte Organisationen erreichen niemals eine 100% ige Abdeckung. Für das, was sie überprüfen, tun statische Analysegeräte.

In großen Projekten (die mehr von der Teamgröße als von der Codegröße abhängen), in denen eine komplexe Interoperation zwischen unabhängig entwickelten Codestücken besteht, werden Sprachen wie Java weiterhin bevorzugt. Beispiele hierfür sind große / komplexe Webanwendungen wie die bei Finanzmaklern (ameritrade), Finanzbörsen (nasdaq, nyse, möglicherweise London nach dem Ausfall von .net), Online-Banking (fast alle), E-Mail (google), Auktion (ebay). , usw.

Unter Leistungs- und Skalierungsgesichtspunkten steht der Java-Plattform nichts mehr im Wege, da sie Skalierbarkeit und Leistung für Webanwendungen kombiniert (abhängig davon, wie Sie die Anwendungspartitionierung von Facebook zählen). Twitter beispielsweise musste große Teile seiner Ruby-Infrastruktur in Scala auf der Java-VM neu schreiben, um den ausfallenden Wal wieder in See zu stechen. Ich habe von anderen großen Beispielen gehört, aber sie entziehen sich mir jetzt.

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

Unterm Strich sind die meisten Webanwendungen technisch einfach. Einfach gesagt, Java ist oft übertrieben (genau wie früher, als wir es 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 schlagen.

-

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

BTW - 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 in die Höhe 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, wenn 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 Sicht der Adoption viel zu sagen. Für jeden, der eine der Milliarden von VB-Apps unterstützen oder ersetzen musste, die von "Programmierern" in der Corporate / MFG-Welt geschrieben wurden, Sie schütteln wahrscheinlich den Kopf und planen Ihren Ruhestand. :)

user56365
quelle
3
Möchten Sie den Punkt "Das Rattennest, zu dem C # wird" näher erläutern?
XåpplI'-I0llwlg'I -
1
Ich bin mir nicht ganz sicher, warum Sie sagen: "Wiederholen Sie sich nicht" war eine Antwort auf die XML-Hölle und die langen Entwicklungszyklen der Java-Webentwicklung. DRY entstand als Konzept in der Agile-Community, von denen die meisten zu dieser Zeit andere Sprachen als Java verwendeten.
Jules
38

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

Ich kann eine CRUD- App mit Rails (nicht nur mit DB-Zugriff, sondern auch mit Ansichten und Controllern) mit wenigen Befehlen erstellen .

(Auf den ersten Blick: Neues Projekt, 1 Scaffold-Befehl 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 sieht so aus, als ob dynamische Sprachen die Tools und Frameworks haben, mit denen sich eine Menge Code aus dem Boilerplate entfernen lässt. (Um das Fehlen leistungsfähiger IDEs auszugleichen, die für uns einen Boilerplate generieren.)

Ich habe auch das Gefühl, dass dynamische Sprachen das Schreiben solcher Tools und Frameworks sehr viel einfacher machen. Ich kann den Code zum Beispiel für Padrino oder Rails (Ruby Web Frameworks) viel einfacher finden, als ich den Code zum Beispiel für Spring Roo finden kann. Dies könnte daran liegen, dass ich Ruby viel besser kenne als Java.

Robbie
quelle
24
Persönlich mag ich keine dynamischen Sprachen. Statische Sprachen machen mich produktiver, wenn ich alle Tippfehler in meiner IDE schnell erkennen und Refactoring-Tools verwenden kann. Sie sollten sich Play Framework ansehen , ein Java-Webframework, das von Ruby on Rails inspiriert ist und Sie mit Java produktiv macht.
Jonas
4
Ein leistungsfähiges Framework wie Rails bedeutet auch, dass die meisten Leute, wenn etwas schlecht implementiert ist, es nicht durch etwas anderes ersetzen können, da diese Komponente mit dem Framework zu eng ist. Während für Java, wenn ich Hibernate nicht mag, kann ich etwas anderes wie Cayenne oder JPA zum Beispiel verwenden.
Coyote21
2
Erlauben Sie mir, als jemand, der gegen Django kämpft, einfach zu sagen: Coyote21 ist absolut richtig. Sie können die CRUD in fünf Minuten zum Laufen bringen, aber in der Sekunde, in der Sie mit dem Hinzufügen der Geschäftslogik beginnen (wenn dieser Datensatz aktualisiert wird, muss ein Datensatz in diese Tabelle eingefügt werden und ...), haben Sie Probleme mit der CRUD .
Asthasr
Wenn Sie Rails lieben, aber Java benötigen, schauen Sie sich Seam Forge an. Achtung, es wird JSF2 verwendet, mit dem es schrecklich ist, zu arbeiten, aber Forge selbst ist ziemlich gut.
Craig Ringer
Sie können CRUD-Apps in Java mit Roo in wenigen Minuten erstellen, genau wie Grails (nicht gerade Java, aber immer noch JVM). Play 1.0 hatte Generatoren / Gerüste, ich frage mich, wo es hingegangen ist ...
Eran Medan
24

Java hat sich in den letzten Jahren als "Enterprise" positioniert. Welches ist auf der anderen Seite des Spektrums, was ein Startup braucht. Bei der Entwicklung von Webanwendungen benötigen Sie vier Dinge: einen reibungslosen Datenbankzugriff, eine umfassende Manipulation von Zeichenfolgen, Syntaxzucker und einen schnellen iterativen Prozess, um die zahlreichen kleinen Änderungen vorzunehmen, die für Ihre App erforderlich sind.

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

Java ist auch eine sehr unkomplizierte Programmiersprache. Es hat die revolutionäre Fähigkeit erhalten, erst gestern einen String in einer switch-Anweisung zu verwenden. Und Javascript ist eine sehr hackerische Sprache, so dass Sie sich nach der Entwicklung Ihres Frontends sehr eingeschränkt fühlen, wenn Sie zu Java zurückkehren.

Das sind wohl die Gründe, warum Webstartups Java meiden.

Daniel Iankov
quelle
12
schmerzloser db zugang? Spring JDBC oder Hibernate funktionieren hervorragend. Tolle Saitenmanipulation? Denken Sie nicht, dass die Manipulation von Strings in jedem Projekt mehr als 5% beträgt. Syntax Zucker? Was meinst du damit überhaupt? Schneller iterativer Prozess? Java hat es (Tomcat in Eclipse ist schmerzlos). Java nicht funktioniert? Es fehlen nur noch prägnante anonyme Klassen / Lambdas / etc. Die "Spaß" -Funktionen in anderen Sprachen verschleiern die Übersichtlichkeit. Saiten im Wechsel ... ja, ich muss zugeben, dass das scheiße ist (aber die meiste Zeit sollten Sie Aufzählungen verwenden).
alex
4
@alex: Syntax sugarJava kann für DSL praktisch nicht verwendet werden. Beispiel: Die Konfigurations- und Routendatei von Play ist keine Java-Datei, sondern eine fremde Syntax. kein Listenverständnis; Wichtige Datentypen (z. B. Karten, Listen) werden standardmäßig nicht importiert. idiotische One-Class-per-File wird wirklich in die Quere kommen; Java-APIs sind in der Regel unnötig ausführlich. Außerdem können Sie keine Aufzählungen verwenden, wenn Sie zwischen Zeichenfolgen wechseln, die Sie vom GET / POST-Parameter erhalten haben.
Lie Ryan
4
@alex Interessant. Ich neige dazu, überall in C # Generika zu verwenden - obwohl ich es von außen betrachte, liegt das wahrscheinlich an der erweiterten Funktionalität von Lamdas - also kann ich eine IRepository<T>mit einer haben IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Ich frage mich, ob sie in Java populärer werden, wenn es Lambdas gibt. Es ist wahrscheinlich eine Sache der Komfortzone, aber Java fühlt sich nur wortreich an - und sehr ähnlich, als hätte man mir genug Teile übergeben, um 50 verschiedene Autotypen zu bauen, ohne dass garantiert werden kann, dass 2 Teile zusammenpassen.
Basic
3
Ich kann nicht glauben, dass zwei Leute argumentiert haben, dass Tomat in Eclipse schmerzlos ist und die Java-Entwicklung effizient macht. Ich finde, dass es jeden Entwicklungszyklus viel schneller macht, aber tägliche Wartung erfordert, einschließlich wiederholtes Aktualisieren, Neuerstellen, Reinigen von Tomcat, erneutes Bereitstellen, Neustarten und manchmal Neustarten von Eclipse und Wiederholen der vorherigen Schritte. Wenn mein Auto so gewartet werden müsste, würde ich nie zur Arbeit kommen.
Brandon
1
@Brandon Ich werde das unterstützen. Ich habe noch nie mit einem Konfigurationsproblem in Node oder Python / Django gekämpft. Ich verliere die Geduld mit RoR. Unsere von Abhängigkeiten geprägte Java-Codebasis Ant / Mvn / Spring / Hibernate / Eclipse ist ein wahrer Albtraum, bevor Sie überhaupt an den Code gelangen.
Erik Reppen
18

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

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

  1. Die Syntax ist zu lang. Um etwas zu drucken, müssen wir System.out.print schreiben. Sie können nicht wirklich einen einfachen VI-ähnlichen Editor verwenden und in wenigen Stunden einen funktionierenden Code schreiben.
  2. Schwache Testgerüste. Auch wenn die Test-Frameworks in Java und Ruby sehr ähnlich sind, macht Ruby einen Schritt nach vorne, indem es Dinge einfach zum Testen verfügbar macht. Dies gilt insbesondere dann, wenn Sie DB in Ihrer Anwendung häufig verwenden. Sogar viele der Web-Frameworks denken nicht an das Testen.
  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 zusammenhängt, die bei Entwicklern nicht so gut ankommt. Die Leute denken nicht an Google, wenn sie an Java denken. Google == Python. Es hat auch viel zu tun, wenn keine Bücher herauskommen, in denen angegeben ist, dass in Y Tagen X sein muss.
  5. Ich kompiliere nicht gerne. 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 noch 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 Ups Konzepte. Auch wenn Entwickler die Oops-Domain stillschweigend übernommen haben. Sie mögen es nicht in vollem Umfang. Sie mögen es nicht, wenn Sie eine Bewerbung mit 10 Klassen schreiben, wobei jede Klasse nur eine Sache tut. Ermöglicht es Ihnen, Hunderte von Dateien zu öffnen und sich die Interaktion über Hunderte von Klassen hinweg vorzustellen, 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 dem, was eine Klasse tut, viel Aufmerksamkeit schenken. Es sind die Java-Entwickler, die sich oft einen Code mit Hunderten von Klassen einfallen lassen. Dies ist aus vielen Perspektiven gut, aber Nicht-Java-Entwickler hassen es.

Alles in allem bedeutet Java zu Beginn des Projekts eine steile Kurve, die zu viel Geld bedeutet, um gebunden zu werden. Dazu kommt eine riesige Community, die mit Java verbunden ist. Jede denkt auf unterschiedliche Weise und niemand, der wirklich die ganze Community anführt. Sie sehen auch keine Gespräche und Konferenzen, die von der Community geführt werden und die all die coolen neuen Dinge vorführen. Keine neuen coolen Bücher. Java scheint nicht mehr zu funktionieren, da es vor einigen Jahren verwendet wurde, um zu viele verschiedene Probleme zu lösen.

Arunmur
quelle
(2) wird von JBoss Arquillian ( arquillian.org ) wunderbar angesprochen . Der Rest ist mehr ein JSF2-Problem als ein Java-Problem. Die größten Probleme bei IMO sind die Lernkurve und die immense Bugginess der Frameworks, aber wenn Sie JSF2 meiden, können Sie es gut machen.
Craig Ringer
5
Ich liebe OOP. Ich kenne auch OOP, weshalb ich nicht zustimmen würde, dass die große Mehrheit der Java-Entwickler zu viel davon macht. Sie können eine Klasse schreiben, aber wenn Ihr Code immer noch ein Wirrwarr von Spaghetti ist, war alles, was Sie wirklich getan haben, einen Weg (Beans) zu finden, um Mistprozedurcode mit sinnlosen Strukturen zu schreiben, die im besten Fall einfache Funktionen oder Strukturen sein könnten.
Erik Reppen
2
"Die Leute denken nicht an Google, wenn sie an Java denken." ... Wenn ich an Google denke, denke ich mit Sicherheit an Android und die Dalvik VM (eine Java VM). Ich denke auch an coole Sachen wie GWT (automatisierte Erzeugung von JavaScript aus Java). Wenn es eine Firma gibt, die auf Java "hoch" ist, dann ist es Google. Viel mehr als Apple oder Microsoft. Zugegeben, Oracle und IBM sind noch mehr mit Java verbunden als Google, aber dennoch: Milliarden von Android-Geräten, auf denen Java-Apps auf einer Java-VM ausgeführt werden, sind schwer vorstellbar, ohne eine sehr starke Google / Java-Verbindung herzustellen.
Cedric Martin
Viel Hass gegen JSF2 von @CraigRinger in diesen Kommentaren. :-) Was ärgert dich daran? Am Anfang fand ich es komplex, aber wenn ich erst einmal in Fahrt gekommen bin, liebe ich es. Natürlich habe ich Spring vorher benutzt, also sieht alles andere nach einer Verbesserung aus ... :-)
Brian Knoblauch
1
Ich bin ein OOP-Entwickler in Java und kann die Vorteile von OOP für Entwickler nicht übertreiben. Ja, die Entwicklung dauert etwas länger, aber die niedrigere Fehlerrate, lesbar und leichter zu pflegender Code, ist es wert. Ganz zu schweigen davon, dass Unit-Tests mit richtig durchgeführten OOP viel einfacher werden.
IntelliData
14

Die Frameworks für die Java-Webentwicklung haben eine gewisse Lernkurve, sie sind oft zu umfangreich für das, was Sie benötigen, und ein Großteil der Indirektion, die erforderlich ist, um Dinge zum Laufen zu bringen, ist nur ... schmerzhaft ... um damit zu arbeiten.

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 das Framework von Spring zu sagen, außer dass ich einen Freund hatte, der die Struts-Entwicklung durchgeführt hat und der dachte, Struts sei noch schlimmer. Das Web-Framework ist nicht vergleichbar mit Desktop-Anwendungen oder mobilen (z. B. Android-) Anwendungen. Es enthält viele sehr abstrakte Ideen, die einige Zeit in Anspruch nehmen, um wirklich verstanden zu werden bin ein Profi und mache etwas wirklich Komplexes wie eine Enterprise-App). Ich liebe es, Java für mobile oder Desktop-Geräte zu programmieren, aber Java für Web-Apps? Nicht so viel.

Ich habe noch keine Programmierung in Ruby / Rails gemacht, aber mein Freund, der früher Struts gemacht hat, macht jetzt Ruby-Web-Programmierung und beweist, dass Dinge, die in der Java-Web-Programmierung schwierig sind, viel weniger Code und Komplexität erfordern Rubin. Die verschiedenen Syntax- und Sprachregeln haben sicherlich eine gewisse Lernkurve, aber für das Prototyping von Apps ergeben sich Vorteile in Bezug auf den Code, der zum Erreichen des gewünschten Ergebnisses erforderlich ist. 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 verwendet werden.

Jessica Brown
quelle
+1 für Framework-Overkill. Es wird wahnsinnig, du verbringst deine ganze Zeit damit, eine XML-Konfiguration zu schreiben.
Richard
1
+1 für das Framework. Nicht nur, dass die ursprünglichen Framework-Versuche P ** s Poor (JSP, STRUTS) waren, wir haben jetzt ungefähr dreißig zur Auswahl, von denen nicht eines so gut funktioniert wie RoR.
James Anderson
Es sind nicht nur die Rahmenbedingungen. Es ist die obszöne Konformität mit Dingen, die keinen Sinn ergeben. Wenn Sie viele Eigenschaften offenlegen, machen Sie es falsch. Wenn Sie einen Vanille-Getter und -Setter darauf setzen, fügt dies nur einen sinnlosen Methodenaufruf hinzu und ändert nichts. Allerdings lässt kein Java-Entwickler Eigenschaften von einem solchen Objekt baumeln, da die Community bestätigt, dass dies irgendwie falscher ist als das, was sie bereits tun. Aber im Ernst, das XML statt Code-Ding ... wie hat das länger als 5 Minuten gedauert?
Erik Reppen
14

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

Java wurde als Unternehmensumgebung konzipiert (mit Java meine ich die Sprache, das Framework und die Standards). Es gibt eine Reihe teurer Tools, mit denen IBM, Oracles und BEA weltweit Unternehmen verkaufen möchten.

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

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

Wissen kommt mit Erfahrung, aber ein engagierter / leidenschaftlicher Programmierer wird Wissen (im Durchschnitt) schneller 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 dazu gebracht hat.

Michael Brown
quelle
Ich denke, das ist ein wirklich guter Punkt +1
Fr.
1
Ich stimme dem Absatz nicht zu, der besagt: Er ist höchstwahrscheinlich ein Autodidakt. Das ist heutzutage falsch, heutzutage sind die meisten Leute ab 30 kompetente Programmierer und haben mindestens einen Abschluss.
Coyote21
1
??? Ich male das prototypische Web-Startup. Ich habe nichts darüber gesagt, dass sie kompetent sind. Sie können gleichzeitig Autodidakt und kompetent sein. Ich bin mir nicht sicher, womit du nicht einverstanden bist.
Michael Brown
1
Dies sollte meine Antwort sein. Java ist so ziemlich die einzige aktuelle Web-Technologie, die nicht so konzipiert ist, dass jeder kompetente Entwickler sie einfach aufgreifen und verwenden kann. Der zweite Teil Ihrer Antwort ist so ziemlich das, was Paul Graham in The Python Pardox
user16764 10.06.12
14

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, einfach SSH in einen Server zu laden, um eine PHP-Datei zu öffnen und Änderungen zu speichern, ist großartig. Die wenigen Java-Apps, an denen ich gearbeitet habe, erforderten für die einfachste Änderung immer einen Neustart. (nicht zu sagen, dass es immer so ist, wie ich es mir vorgestellt habe). Zusätzlich ist PHP-Hosting günstig und schnell 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 es 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 und versucht nun hart zu sein, was ich denke, ist eine Menge Dinge, die es wirklich nicht ist.

Auf der anderen Seite sehen die meisten PHP-Entwickler, die ich kenne, Java als diesen riesigen, überkomplexen 800-Pfund-Gorilla, fast so, als würden sie aus dem 18-Wheeler-Sattelschlepper aussteigen, um zum Lebensmittelladen zu fahren und einen Laib Brot zu holen.

Ich habe versucht Java zu lernen, meine ersten Eindrücke wo es sehr langwierig war und Karpaltunnel induzierte. Als ich anfing, stellte sich mir eine Menge Fragen, die einem Java-Veteranen wahrscheinlich einfach vorkommen. OpenJDK oder Sun? Tomcat oder Glassfish oder? Außerdem scheint es so, als würden Sie mit jedem Java-Buch-Intro anfangen, Code für die Befehlszeile zu schreiben. Ich denke, die meisten Leute in diesen Tagen finden, dass ein Snooze-Fest.

Cyrus
quelle
3
Ich werde mehr Auswahlmöglichkeiten und ein bisschen mehr Komplexität gegenüber den über 9000 integrierten PHP-Methoden wählen.
Kaleb Brasee
1
PHP ist so einfach einzurichten.
Barfieldmv
9
Aber es macht es so schwer, guten Code zu schreiben. Einfacher einzurichten, einfacher zu starten. Weniger langweilig sollte nicht das Kriterium sein, nach dem Sie eine Sprache auswählen. Gute Programmierung erfordert Disziplin, Geduld und Mühe ... es ist ein schlechtes Zeichen, wenn Sie diese bei der Auswahl nicht haben ...
Alex
Es sei denn, beide stinken, aber einer ist viel mehr eine PITA als der andere.
Erik Reppen
12

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

Java wird in der modernen Webentwicklung absolut eingesetzt. Sicher hat es nicht den "sexy" Reiz von Ruby oder anderen dynamischen Sprachen, aber ich bin keineswegs davon überzeugt, dass dynamische Sprachen eine gute Sache sind, sobald ein Projekt anfängt, sich zu vergrößern.

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 Sprach-VM.

Verstehen Sie 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.

Daniel Pryden
quelle
1
Ich bin eher anderer Meinung als "schneller". Theoretisch sollte es so sein, aber es gibt einige massive PHP-Sites und fast alle Anekdoten über Leistungsprobleme beziehen sich auf MySQql oder andere zugrunde liegende Datenbanken. Andererseits musste fast jede J2EE-App, mit der ich in Berührung gekommen bin, gründlich optimiert werden, bevor die Leistung überhaupt akzeptabel war.
James Anderson
1
@ James: Hast du irgendetwas anderes als vage Anekdoten, um das zu belegen? Alle Top-10-Websites laufen entweder auf verwalteten Plattformen (Amazon auf Java, Twitter auf Scala IIRC, Google auf einem benutzerdefinierten Backend von Java und C ++) oder sie haben eine stark angepasste Infrastruktur (Facebook und Wikipedia verwenden PHP, aber beide haben große Mengen an benutzerdefiniertem nativem Code (aus Gründen der Geschwindigkeit). Java übertrifft regelmäßig dynamische Sprachen in Benchmarks. Ich bin kein Java-Fan, aber die Leistung ist nicht das Problem von Java.
Daniel Pryden
Es gibt keine Leistungsprobleme mit Java selbst "nicht ganz so schnell wie C, aber schneller als alles andere". J2EE plus Frameworks plus ORM plus Dependency Injection plus Overkill-Design sind jedoch mit ziemlicher Sicherheit nicht leistungsfähig. Es gibt einfach zu viel Potenzial für versteckte Engpässe und unvorhergesehene Interaktionen
James Anderson
1
@Basic: Was ist dein Punkt? Es gibt viele kaputte Bibliotheken und Frameworks für jede Sprache. Ja, es gibt viele krumme und veraltete Dokumente - aber das ist auch nicht ungewöhnlich. Umgekehrt gibt es einige fantastische Bibliotheken, Frameworks und Tools für Java. Versuchen Sie ernsthaft vorzuschlagen, dass es jemals ein End-to-End-Framework für jede Anwendung geben sollte?
Daniel Pryden
1
@Basic: Rückwärts von was? In den anderthalb Jahren, in denen ich diese Antwort zum ersten Mal geschrieben habe, bin ich weitergezogen und arbeite derzeit bei Google. Ich kann Ihnen versichern, dass Java bei Google sehr häufig für die Entwicklung von Webanwendungen verwendet wird. Natürlich unterscheiden sich die Anforderungen von Google stark von denen vieler anderer Unternehmen, aber Java ist ein ganz anderes Biest, wenn Sie die richtigen Bibliotheken und Frameworks verwenden. Schauen Sie sich nur einige der Dinge an, die Google über Open-Sourcing (Guava, Guice, GWT, Protokollpuffer usw.).
Daniel Pryden
12
  1. Java ist komplexer zu lernen als PHP / Python / Ruby
  2. Java-Ökosystem ist sehr komplex, sehr groß und für Anfänger ziemlich verwirrend
  3. Es gibt viele historisch schlechte Frameworks mit negativem Ruf, die mit Java verbunden sind. Sie müssen wissen, auf welchen 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, aber ohne viel Erfahrung schwer für eine effektive Webentwicklung zu konfigurieren.
  7. Wenn Sie etwas anderes als Tomcat oder Jetty als Server verwenden, sind lange Startzeiten von WebSphere / WebLogic / JBOSS frustrierend
  8. Java EE löst Probleme, die viele Menschen nicht haben, wie beispielsweise verteilte Transaktionen

Ein neuer Entwickler, der sich beruflich weiterentwickelt, wird feststellen, dass Java eine Größenordnung schwerer zu erlernen ist als Rails, Python oder PHP.

Nach alledem habe ich die Entscheidung getroffen, Java für mein Startup zu verwenden, da eine richtig konfigurierte Java-Entwicklungsumgebung sehr produktiv ist. Mit richtig konfiguriert meine ich.

  1. Startzeit unter 10 Sekunden
  2. Ordnungsgemäß konfigurierter Eclipse-Arbeitsbereich, in dem alle Frameworks miteinander verknüpft und konfiguriert sind
  3. Gute Auswahl an Bibliotheken (Spring, Spring MVC, Spring Social, Spring Security, JPA, Ruhezustand, Geschwindigkeit usw.)
  4. Schnelle Entwicklermaschinen mit SSDs
  5. Erker Safari Abonnement
ams
quelle
8
Lassen Sie uns jedoch klar sein. Die Sprache Java ist nicht schwer zu lernen. Es sind all die Mistschichten, die um das Arbeiten mit Java herum aufgebaut sind, um seine Mängel auszugleichen (Ausführlichkeit, Schutz vor dir selbst und deinen Teamkollegen durch Inflexibilität, die absurde Menge an Bibliotheken, auf die man sich verlässt usw.), das ist eine PITA lernen.
Erik Reppen
2
@ErikReppen Sehr wahr. Ich muss an einem Java-Projekt arbeiten, habe aber einen Hintergrund in .Net. Die Sprache und Syntax ist so einfach wie alles, was ich verstanden habe. Es ist die Ausführlichkeit, die mich wirklich verrückt macht. Was ich früher in 1 Zeile verwendet habe, dauert jetzt 5-10 und (oft) eine XML-Konfigurationsdatei bearbeiten. Ganz zu schweigen davon, dass die Auswahl des "richtigen" Rahmens für einen Job ohne stundenlanges Lesen ein Albtraum ist - und bevor Sie feststellen, dass Ihr Szenario als Randfall gilt, nicht unterstützt wird und Sie es nicht mögen es, schreib es um. Ich möchte meine Zeit damit verbringen, die großen Probleme zu lösen
Basic
"Java ist komplexer" - kann sich jemand jemals an die Parameterreihenfolgen für PHP erinnern strposoder in_array? Und die XML-DOM-Schnittstelle von PHP ist lächerlich (Attribute in Zeichenfolgen umwandeln, um sie abzurufen?). OSGi ist absolut brillant und sprachunabhängig.
jevon
@jevon: Die PHP-Dokumente sind sehr gut und meine IDE möchte mich trotzdem daran erinnern. Auch SimpleXML.
DanMan
12

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

Ich habe mir das Ganze in etwa 80 Zeilen Java-Code ausgedacht, und mein Kollege hat eine Woche gebraucht, ungefähr 20 Java-Klassen und viel mehr Zeilen Java-Code, um dasselbe zu 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 Software-Unternehmen gearbeitet.) Java war das Werkzeug der Wahl, und Entwurfsmuster waren DER Weg zum Code.

Nun ist es die Denkweise oder nur die Arroganz, die die Einfachheit ablehnt. Nun, ich dachte immer, der gesunde Menschenverstand sollte sich durchsetzen. Ob es sich um ein Unternehmen oder eine einfache Webanwendung handelt, die grundlegenden Anwendungsfälle sind 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 Java-Entwickler, wenn es um die Entwicklung von Software geht.

Was die Skalierung dynamischer Sprachen betrifft, ist JVM das Ergebnis jahrzehntelanger Forschung. Für Ruby etc. passiert viel Ähnliches.

Scala ist eine Sprache, die ich als äußerst clever und praktisch empfinde. Abspielen! mit Scala eignet sich für die Entwicklung von Web- / Unternehmensanwendungen genauso gut wie für alle anderen.

Da Ruby and Rails für Start-ups eine glänzende Neuheit ist, ist es äußerst schwierig, einen soliden Rails-Entwickler einzustellen. Es ist eigentlich ein Hindernis für jedes Start-up, während die Fülle von Java-Entwicklern mehr geschäftlichen Sinn ergeben sollte.

Ar Wen
quelle
Ich bin kein Java-Fan, aber diese "Komplexität", auf die Sie sich beziehen, könnte eine Abstraktion gewesen sein. Abstraktion ist sowohl für das Testen als auch für die Wartbarkeit sehr nützlich (wenn sie in Maßen verwendet wird). Schwer zu sagen, ohne den Code vergleichen zu können
Basic
11

In einem kürzlich durchgeführten Interview mit Joseph Snarr, einem technischen Leiter von Google Plus, wurde erläutert, wie die Anwendung Java-Servlets für das Back-End und JavaScript für das Front-End verwendet.

Um Ihre Frage zu beantworten, wird Java 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 einsetzen, liegt darin, dass sie sexueller sind und einen öffentlicheren Open-Source-Push hinter sich haben.

Greg Guida
quelle
4
Start-ups nutzen andere Technologien, um dies jetzt zu erreichen. Nicht später. Und sie haben es geschafft, jetzt von 3 Leuten zu erledigen, nicht von 30.
Erik Reppen
Das Zitieren einer Person kann nur ihre Ansichten und ihre Entscheidungen wiedergeben, bestätigt jedoch nicht, dass das, was er / sie gewählt hat, die richtige Entscheidung ist / war.
DivKis01
9

Da Sie Webentwicklung und Java erwähnt haben, vergessen viele Leute, dass die Verwendung von Java-Applets in einem Webbrowser zu Beginn nicht gut funktioniert hat, und dass die "Sandbox" für die Applets nicht vollständig entwickelt war und es Sicherheitsprobleme gab Java-Applets können im Browser ausgeführt werden und auf lokale Maschinendaten zugreifen (auch bekannt als clientseitiges Sicherheitsproblem). Sicher, Java war solide im Backend und in eigenständigen Anwendungen, aber ich denke, dass die Verknüpfung der Sprache mit Java-Applets (die auf dem Browser ausgeführt werden) zu Java als Webentwicklungskomponente ein wenig Aufsehen erregt hat. Ich glaube nicht, dass sie sich jemals davon erholt haben.

LocoTx
quelle
9
Absolut nicht! Tatsächlich ist Java eine dominierende Sprache auf der Serverseite. Applets ausgelöscht vor vielleicht zehn Jahren.
Chiron
5
Flash hat das getan, was Applets versucht haben. Schneller Start, schneller Download, geringer Speicherbedarf.
4
Ich kenne viele Leute, die nicht einmal zwischen Java und Javascript unterscheiden können. Obwohl sie völlig unabhängig sind. Dies ist eine andere Sache, die Java einen schlechten Ruf verleiht.
Kibbee
5
@ Kibbee ... oder es gibt Javascript einen schlechten Namen :)
Matthew Schinckel
9

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 wird Java im Backend für viele Dienste verwendet und Closure Compiled JS oder GWT wird für das Frontend verwendet. Das Problem ist eines von Geschwindigkeit gegen Maßstab. Startups müssen auf ein Minimum an lebensfähigem Produkt kommen. Es handelt sich in der Regel um kleine Teams von 1 bis 3 Ingenieuren, bei denen die Iterationsgeschwindigkeit die Leistung oder Wartbarkeit übersteigt. Probleme mit der Skalierbarkeit oder mit der Pflege des Team-Codes sind ein Problem, das Sie gerne hätten. Wenn Sie diese Phase erreicht haben, ist dies ein Zeichen dafür, dass Ihre anfängliche Implementierung Ihnen dabei geholfen hat, die anfängliche Schwelle der Kundenbindung zu überwinden oder zu überwinden Investition. 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 Scale-Up-Fronts zu entwickeln, auch wenn es seine Zeit mit der Implementierung von Scale-Ups für Dinge verschwendet, die möglicherweise keine Benutzer erhalten, da sie den Verlust ausgleichen können.

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

Cromwellian
quelle
1
Wo gibt Ihre Quelle an, dass Startups kein Java verwenden? Bitte sichern Sie Ihre Vermutung mit einigen Fakten.
Walter
7

Traditionelle Webanwendungen auf Java sind, obwohl sie gut strukturiert sind, alles andere als "schnell entwickelt". Obwohl ich bisher nur eine vollständige Webanwendung geschrieben habe (Java / Tomcat / Struts), war sie äußerst wählerisch, brauchte länger als erwartet für das Debugging und bereitete bei der Implementierung der Business-Logik-Schicht im Allgemeinen Schmerzen. 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 ein zweites Mal etwas schneller schreiben.

Allerdings habe ich auch Anwendungen in PHP und C # geschrieben, und sie funktionieren einfach besser und sind weitaus fehlerverzeihender als Java. Darüber hinaus wurde Ruby on Rails speziell für die schnelle Entwicklung von Anwendungen entwickelt, 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 durchführen müssen). Außerdem muss jedes DB-Verbindungsobjekt von Hand geschrieben werden und ist nicht so einfach zu formatieren. Möglicherweise gibt es ein besseres Framework, insbesondere eines, das die neuen Funktionen zur Unterstützung dynamischer Sprachen in Java 7 nutzt , aber ich habe die Recherche noch nicht durchgeführt.

Brian
quelle
3
Sie sollten sich Play Framework ansehen , ein Java-Webframework, das Sie mit Java produktiv macht und von Ruby on Rails inspiriert ist.
Jonas
2
@Jonas, erwäge, ein paar gute Blog-Posts zu schreiben, in denen das alles kurz erklärt wird.
@Jonas was Thorbjorn gesagt hat! Ich würde es gründlich lesen. :)
Brian
@ Thorbjørn: Ich habe kein Blog. Kurz gesagt: Mit Play Framework speichern Sie einfach Ihren Java-Quellcode und aktualisieren dann den Webbrowser. Der Code wird mithilfe des Eclipse-Compilers automatisch serverseitig kompiliert. JPA wird für den Datenbankzugriff verwendet. Hier ist ein Artikel darüber Play!
Jonas
2
@ Thorbjørn & Brian: Sieh dir das Video auf der Titelseite der Play Framework-Website an, es erklärt es sehr schön, würde ich sagen.
Bjarke Freund-Hansen
7

Einfache Antwort: Lernkurve zur Basisproduktivität.

Framework-basierte Systeme wie RoR tendieren dazu, die "Magie" in die Sprache / Syntax zu schreiben. Es ist sehr einfach, Ihre grundlegende RoR-Syntax zu verbessern und eine App zu installieren.

Java war zuerst eine Sprache und Werkzeuge und Frameworks tauchten später auf. Sie müssen also zuerst Java lernen und dann Spring oder Grails oder Ihre Super-IDE oder was auch immer. Lieblingsbeispiel von Ruby, es erfordert keine Setter und Getter. Tatsache ist, dass Java IDEs die manuelle Codierung ebenfalls entfernt haben ... aber sie befindet sich immer noch in Ihrer Quelle. Der Vorteil dieses Ansatzes besteht darin, dass sich unterhalb des Frameworks eine Sprache befindet, mit der alle Java-Entwickler konsistent arbeiten können.

Dieser Vorteil ist für kleine Startups, bei denen es auf die Zeit ankommt, zweifelhaft. Normalerweise tun sie nur sehr wenig, was sie mit einem Out-of-the-Box-Framework nicht tun können. So können sie sich das RAD-System ihrer Wahl aussuchen und am nächsten Tag eine App live erleben.

Wenn man sich Facebook und Twitter anschaut, als sie sich ausdehnten, fanden sie Dinge, die von Standard-Frameworks nicht gehandhabt werden konnten, und mussten daher Technologien auf niedrigerem Niveau verwenden.

Dieser heilige Krieg, den Framework-Entwickler führen, um alles schneller zu machen, 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.

Lucas McGregor
quelle
6

Hängt davon ab, wie Sie "moderne Webanwendungsentwicklung" definieren. Wenn Sie über Start-up-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 für das erste Programm gut und Java ist im Allgemeinen für das letztere besser geeignet.

cdkMoose
quelle
6

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

Paul
quelle
5

Im Startup, für das ich arbeite, haben wir Java und JRuby für die Implementierung unserer API ausgewählt, da sie sich gegenseitig ergänzen.

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

Wenn wir sehen, dass eine unserer JRuby-Klassen zu einem Engpass wird, implementieren wir sie einfach direkt in Java (im Grunde genommen eine zeilenweise Übersetzung). Dies kann recht häufig bei Klassen vorkommen, die viel Rechenarbeit leisten müssen, und in diesem Zusammenhang verhält sich JRuby ähnlich wie eine Prototypensprache.

Wir haben unseren eigenen Dynamic Class Loader implementiert, der es uns ermöglicht, Java-Klassen im laufenden Betrieb zu ändern, ohne den Server neu zu starten, und wir waren mit der Auswahl sehr zufrieden. Das Argument "Sie müssen jedes Mal kompilieren und neu starten" hat also nicht viel Gewicht.

Der Schlüssel ist, alles Java EE-Zeug zu vermeiden - es ist riesig und umständlich und anti-agil.

David Semeria
quelle
5

Ich habe immer noch das Gefühl, dass Java in vielen Bereichen der Webentwicklung zum Einsatz kommt. In der Regel handelt es sich jedoch um eher geschäftsorientierte Entwicklungen, bei denen es sich in der Regel um weniger offene Entwicklungen als bei Neugründungen handelt, die eine gewisse Anziehungskraft auf sich nehmen und ihre eigene Arbeit fördern müssen, und die sich mehr für Technologie interessieren . 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 zu kommentieren ...

Ist es eine Schwäche der Sprache? Im Vergleich zu anderen Sprachen wie Python oder Ruby ist Java ausführlich und benötigt in der Regel mehr Code, um ähnliche Aufgaben auszuführen. Es sind jedoch nicht nur die Fähigkeiten der Sprache, sondern auch die sie umgebende Community und die Art der Entwickler, die diese Tools verwenden. Daher sind die meisten Module und Tools für Python, Ruby, PHP usw. Open Source und einfacher zu finden als in der Java-Welt, nur weil sich diese mehr auf das Bereitstellen (und Aufladen) von Diensten konzentriert. Beispielsweise 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 informiert ist. Dies gilt nicht unbedingt für Java-Entwickler, die auf anderen Systemen wie Berichtssystemen arbeiten könnten. Natürlich wird jeder gute Entwickler aufholen,

Ist es ein unfaires Stereotyp von Java, weil es schon so lange existiert (es wurde unfairerweise 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. Seitdem gab es jedoch neue Plattformen mit neueren Problemen wie Ruby on Rails. Der Kernsektor von Java war vor allem die Unternehmenswelt mit unterschiedlichen Problemen. Die Leute, die nach neuen Projekten außerhalb der Java suchten, suchten nach unterschiedlichen Tools. Außerdem ist der Hauptvorteil von Java-Design als Multiplattform heute nicht mehr so ​​relevant wie früher.

Ist das negative Klischee der Java-Entwickler zu stark? (Java ist halt nicht mehr "cool") Das hat auch was dran. Java ist immer noch die Sprache, die man lernen muss, um einen Job zu bekommen. Wenn Sie sich also nicht darum kümmern, sondern nur etwas lernen möchten, um Geld zu verdienen, werden Sie am Ende ein wenig Java lernen und sich nicht mehr darum kümmern, sich zu verbessern. Auch hier geht es viel um Wahrnehmung und Sichtbarkeit. Es gibt Unmengen großartiger Java-Entwickler, die programmieren, ohne ihr Wissen zu teilen, während es viele, vielleicht nicht so gute PHP-Entwickler gibt, die Blogs schreiben und in Open Source zusammenarbeiten. Das lässt vermuten, dass die PHP-Entwickler besser sind als die Java-Entwickler, da Sie ein gewisses Feedback dazu haben.

Sind Anwendungen, die in anderen Sprachen geschrieben wurden, wirklich schneller zu erstellen, einfacher zu warten und weisen sie eine bessere Leistung auf? Ich würde sagen, dass sie schneller zu bauen sind. Die Prinzipien von Sprachen wie PHP, Python oder Ruby machen sie sehr gut, um Software zu generieren, die sich ständig ändern kann. Beispielsweise erleichtert die dynamische Eingabe das Ändern einer Benutzeroberfläche. In Java ist es wichtig, eine gut definierte Schnittstelle zu haben, was zu stabileren (und schwierig zu ändernden) Schnittstellen führt. Dies ist in 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 Zaubertricks zu verwenden, um die erforderliche Leistung zu erzielen, beispielsweise "Java ist schneller als Ruby. Periode" oder "MongoDB ist web-skaliert".

Wird Java nur von großen Unternehmen verwendet, die zu langsam sind, um sich an eine neue Sprache anzupassen? Wenn Sie bereits ein Team von Java-Entwicklern im Unternehmen haben, ist es auf jeden Fall einfacher, für neue Projekte dieselbe Sprache zu verwenden. Dies wird als "die sichere Wette" angesehen, insbesondere wenn der Kern des Unternehmens nicht die Technologie ist. Java wird aber sowieso nicht NUR in großen Unternehmen verwendet, es gibt immer noch viele Startups, die Java für coole Sachen verwenden (zum Beispiel verwendet FightMyMonster oder Swrve Java ausgiebig), aber ich würde sagen, dass die allgemeine Tendenz beim Start Szene ist es, andere Sprachen zu verwenden. Dies ist auch eine Möglichkeit, Leute zu gewinnen, da die meisten Leute aufregender sind, mit Ruby, Python oder PHP zu arbeiten, die als "freundlicher" und "unterhaltsamer" empfunden werden.

Khelben
quelle
5

Dies ist wahr, aber nicht wegen Java und seinem Ökosystem. Es liegt an den Leuten, die bei der Verwendung von Java dazu neigen, große Probleme und schwere Abscheulichkeiten zu verursachen.

Es gibt genügend Frameworks (Spring-MVC, Grails, Play, etc.), mit denen Sie Dinge schnell bauen können. Die Tatsache, dass Leute ihre Systeme überentwickeln, ist ein Problem, das mit dem zunehmenden Wissen verbunden ist, das die Leute 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 so aus ein Nagel".

Wenn Sie "hacky" sind, können Sie mit Java so ziemlich dasselbe machen wie mit anderen Sprachen, und hier ist eine Studie, die darauf hinweist, dass:

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

Bozho
quelle
3

Um nur ein bisschen zu dem hinzuzufügen, was bereits gesagt wurde, hängt meiner Meinung nach viel davon ab, wie schnell Sie (im wahrsten Sinne des Wortes) von nichts zu einer funktionierenden Webanwendung gelangen können.

Wenn Sie heute nur eine Idee haben, ist es fast so einfach, Ihre Webanwendung von Ihrem jetzigen Standort aus zu schreiben, wie wenn Sie sich für einen Hosting-Anbieter oder eine eigene Infrastruktur (wie ein EC2-Image) entscheiden. Nach meiner Erfahrung ist die Auswahl von Java in der Regel aufwändiger und kostet häufig auch mehr.

Wenn Sie mit Linux und PHP / Python / Ruby arbeiten, sind die Tools und die Plattform außerdem kostenlos und so konzipiert, dass sie sich gegenseitig unterstützen. Bei Java scheint es manchmal so, als ob die beiden Welten (OS und Java) nicht miteinander harmonieren.

Matt Ryan
quelle
Die Lernkurve verläuft absolut vertikal. Sie werden die ersten WOCHEN damit verbringen, herauszufinden, was die Akronyme sind, wie sich die Standards auf ihre Implementierungen beziehen, wie alles geschichtet ist usw. Dann werden Sie in den nächsten Wochen herausfinden, welche Bibliotheken und Frameworks verwendet werden sollen. Dann melden die nächsten Wochen Fehler in ihnen ...
Craig Ringer
3

Wer sagt, dass es nicht ist?

Spring MVC + Spring Data JPA oder Mongo + Thymeleaf für Templating + Coffee-Maven-Plugin für Coffee to JS transpiling und los geht's.

Martin Spa
quelle
Ich stimme dir vollkommen zu +1
Arshad Ali
3

Viele verbinden die Entwicklung von Java- und Webanwendungen möglicherweise mit dem Horror von J2EE, das, zusammen mit monströsen J2EE-Anwendungsservern von großen blauen und roten Unternehmen, Wochen Arbeit bedeutete, 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 kurzen Zyklen vorschlage.

Dies ist immer noch die standardbasierte Methode für die Entwicklung von Webanwendungen in Java. Die Alternativen, von denen viele in anderen Antworten erwähnt werden, vermitteln ein gemischteres und verwirrenderes Bild, bei dem zu viele Entscheidungen zu treffen sind.

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

Asgeir S. Nilsen
quelle
Java EE 6 ist zwar "leicht" (außer JSF2), aber es ist immer noch eine unglaublich große Lernkurve, ein riesiger Stapel komplizierter Spezifikationen und ein immens kompliziertes Schichtsystem. Leicht vielleicht, aber sicher nicht einfach.
Craig Ringer
2

Ich denke, es wird viel mehr verwendet, als Sie denken - die Verwendung liegt direkt unter der Wasserlinie. Es gibt viele, viele Rubine auf Schienen, die sich um dicke, ausgefallene Java-Services wickeln. Besonders wenn Sie anfangen, sich mit Big Data zu befassen. . .

Wyatt Barnett
quelle