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?
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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:
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?
quelle
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.
quelle
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.
quelle
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. :)
quelle
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.
quelle
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.
quelle
Syntax sugar
Java 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.IRepository<T>
mit einer habenIQueryable<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.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
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
strpos
oderin_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.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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
quelle
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.
quelle
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.
quelle
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.
quelle
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. . .
quelle