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.