{"id":882,"date":"2011-02-10T12:49:34","date_gmt":"2011-02-10T10:49:34","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/java-taucht-nix-fr-enterprise-meine-gedanken\/"},"modified":"2011-02-10T13:13:42","modified_gmt":"2011-02-10T11:13:42","slug":"java-taucht-nix-fr-enterprise-meine-gedanken","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/java-taucht-nix-fr-enterprise-meine-gedanken\/","title":{"rendered":"Java taucht nix f&uuml;r Enterprise? Meine Gedanken"},"content":{"rendered":"<p>Nach dem Eintrag im Blog (<a href=\"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/forrester-untersuchung-sagt-java-taugt-nix-fr-enterprise\/\">http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/forrester-untersuchung-sagt-java-taugt-nix-fr-enterprise\/<\/a>) \u00fcber die Forrster Studie fragte ein Kommentator nach meiner Einsch\u00e4tzung. Also, <strong>taucht <\/strong>Java ab oder <strong>taugt <\/strong>es?<\/p>\n<p>Es ist schwer einen Anfang zu finden, denn verschiedene Sachen laufen immer durcheinander. Zun\u00e4chst ist Java eine Vereinigung:<\/p>\n<p align=\"center\"><strong>Java = JVM + Java als Programmiersprache + Java SE Lib + Java EE Lib<\/strong> (wenn man Enterprise hinzunehmen m\u00f6chte)<\/p>\n<p>Man k\u00f6nnte noch \u201cGreat Communitiy\u201d oder gro\u00dfe Anzahl Open-Source Libs dazu nehmen, aber darauf kommt es jetzt nicht an.<\/p>\n<p>An den Gliedern kann man anfangen unter verschiedenen Bewertungskriterien rumzun\u00f6rgeln. Es steht au\u00dfer Frage das die JVM unglaublich leistungsf\u00e4hig ist. Bei der Programmiersprache Java f\u00e4ngt aber die Kritik schon an \u2013 bei der Java SE geht es weiter. Java EE kann man auch kritisieren, jedoch f\u00fcr einen anderen Grund.<\/p>\n<ul>\n<li>Die Sprache Java hat sich die letzten Jahre nicht gewandelt, aber Skriptsprachen zeigen zum Beispiel deutlich den Trend auf, Collection-Unterst\u00fctzung in den Sprachkern aufzunehmen und Closures sowie funktionale Aspekte zu unterst\u00fctzen desweiteren Nebenl\u00e4ufig besser anzugehen. <\/li>\n<li>Die Bibliotheken haben deutliches Potenzial. Einmal horizontal (unterschiedlichen Technologien) wie vertikal (in der Tiefe). Wenn Java SE schon fertig w\u00e4re, w\u00e4re Apache Commons * oder Google Collections\/Guava gar nicht n\u00f6tig. Wenn Java EE auch den Web-Technologie-Teil abdecken soll, OOOHA, da ist noch viel zu tun. <\/li>\n<\/ul>\n<p>Der Autor der Studie ist nicht gegen Java: die Folien zeigen, das Java in vielen Bereichen perfekt passt. Er macht aber klar, dass Java eben nicht f\u00fcr jedes Problem die Antwort ist. Da hat der Mann nat\u00fcrlich Recht! Mit der Banane einen Nagel in die Wand zu schlagen wird auch kompliziert. Java ist explizit als General Purpose Sprache entworfen worden. Das hei\u00dft: F\u00fcr alles und nichts! W\u00e4hrend man au\u00dfer Frage stellt, Java im Bereich Treiberprogrammierung einzusetzen, versuchen viele Java (also die Sprache + Java SE + Java EE) dort einzubringen, wo es bessere L\u00f6sungen gibt. Java ist im Gui-Bereich einfach schwach. Punkt. Gui ohne Databinding? Nicht gut. (Es geht immer noch darum, dass es kein Teil der Standard-Bibliotheken ist. Nat\u00fcrlich gibt es Databinding am Open-Source-Himmel \u2026 sogar gaaaanz viele L\u00f6sungen.) Es steht au\u00dfer Frage, dass man mit Swing und JSF absolut geile L\u00f6sungen bauen kann. Doch Softwareentwicklung besteht nicht daraus, mit ein paar Experten ein System zu bauen; gibt Experten FORTRAN oder COBOL und auch dann wird das Design super sein.<\/p>\n<p>Die zentralen Schwachpunkte im Gui-Bereich sind:<\/p>\n<ul>\n<li>Zu kompliziert mit den STANDARD-Frameworks f\u00fcr den Durchschnitts-Joe. In einer Tabelle eine Flie\u00dfkommazahl mit zwei Nachkommastellen zu formatieren muss einfacher gehen als extra einen Cell-Renderer zu programmieren. <\/li>\n<li>F\u00fcr echte Oberfl\u00e4chen muss man zukaufen, OS-Libs nehmen, oder stark in Eigenentwicklung investieren. Databinding gibt es, klar, aber eben nicht im Java SE. Man schaue nur auf Eclipse RCP und dann sieht man, was in Swing alles fehlt. <\/li>\n<li>Agil mal eben schnell eine \u00c4nderungen umzusetzen geht nicht. <\/li>\n<\/ul>\n<p>WENN man also Gui-Entwicklung zur Enterprise-Entwicklung z\u00e4hlt \u2013 und das tut der Autor der Studie, das ist aber auch Diskussionssache \u2013 hat er mit seiner Kritik recht. Mich wundert, was es an dem Punkt zu diskutieren gibt. Die Diskussion gleitet schnell in die Richtung das man sagt: Ja, aber in Ruby, mit Eclipse RCP, mit Vaadin, mit bla, \u2026 geht das alles! Stimmt, es geht aber hier um pures Java und um das, was in Java SE\/Java EE von Oracle kommt. Hier hat eben Java nichts zu bieten. Ich finde Swing toll und mag es, aber f\u00fcr heutige Richclient-Anwendungen ist das nichts. Auch JSF ist nichts f\u00fcr moderne RIA-Anwendungen. Viel zu HTML-lasting.<\/p>\n<p>Java EE ist im Kern ausgereift und f\u00fcr Gesch\u00e4ftslogik und Persistierung nahezu perfekt. Container wie GlassFish machen es rund. Hier liegt <strong>nicht<\/strong> das Problem. Entwickler gro\u00dfer Anwendungen m\u00fcssen lernen das richtige Tool f\u00fcr den Job zu finden. Im Enterprise Bereich ist Java EE 6 ein guter Anfang f\u00fcr das Backend. Den Gui-Bereich k\u00f6nnen wir aufgeben. Klar, das es mit Swing und JSF \u201cirgendwie geht\u201d, aber wie gesagt: es darf keine Technologie f\u00fcr Experten sein. Es wird nat\u00fcrlich immer Softwareentwickler geben die sich w\u00fcnschen, das eine Technologie f\u00fcr Experten ist, aber es geht um Wirtschaftlichkeit, ob wir das wollen oder nicht. Und wenn eben ein Swing-Entwickler f\u00fcr einen neuen Button 20 Minuten im Quellcode braucht, der Silverlight-Entwickler aber nur 5 Minuten, ist klar, wie die Rechnung aussieht. Und selbst das ist noch viel zu low-level gedacht.<\/p>\n<p>Selbst wenn man Java aufbohrt und pimpt bis zum Abwinken mit Business-Rules-Engine, alles in dynamischen Programmiersprachen auf der JVM entwickelt, usw. usw., es wird immer noch zu viel selbst gebaut. Entwickler m\u00fcssen lernen, sich in komplexe existierende Systeme einzuarbeiten, und auf deren Basis eigene L\u00f6sungen entwickeln. Im Web-Bereich sei einmal der JBoss-Stack oder Alfresco in den Raum geworfen, aber auch richtig fette Sachen wie SAP, auch wenn vielen das nicht gefallen d\u00fcrfte. Oder Talend zur Konvertierung. Der Autor der Studie l\u00e4sst Alternativen vielleicht bewusst offen (RoR wird genannt im Web-Bereich) und ich vermute einfach deswegen weil es keine Alternativen gibt! Oracle bietet eine wunderbare Basis aber es liegt an uns, m\u00e4chtigere Framworks, und dann auch DSL f\u00fcr spezifische Probleme zu nutzen. Java hat seinen Platz und ist eben nicht f\u00fcr alles zu gebrauchen. Ich erinnere mich gut an dBASE, das zeigt schon vor \u00fcber 10 Jahren die Richtung auf: Eine Entwicklungsumgebung mit Programmiersprache. Das ist Rapid Application Development von datatenbankgetriebenen Anwendungen. Eigenentwicklung wird es immer geben, aber f\u00fcr gewisse Probleme funktionieren wunderbar 4GL-L\u00f6sungen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nach dem Eintrag im Blog (http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/forrester-untersuchung-sagt-java-taugt-nix-fr-enterprise\/) \u00fcber die Forrster Studie fragte ein Kommentator nach meiner Einsch\u00e4tzung. Also, taucht Java ab oder taugt es? Es ist schwer einen Anfang zu finden, denn verschiedene Sachen laufen immer durcheinander. Zun\u00e4chst ist Java eine Vereinigung: Java = JVM + Java als Programmiersprache + Java SE Lib + Java EE [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-882","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=882"}],"version-history":[{"count":4,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/882\/revisions"}],"predecessor-version":[{"id":886,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/882\/revisions\/886"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}