Warum kein JAVA

Manga

Well-Known Member
hallo,


als absoluter Programmierlaie, mal eine Frage an die Experten.

Was hindert eine Firma daran Software nicht in java(oder einer anderen crossplattformsprache) zu entwickeln?

Ich denke da jetzt nicht an Spiele, die vielleicht 3D Unterstützung brauchen oder so, sondern zb Elster(Steuersoftware).

Erst entwickelt man die Windows Version, dann extra noch die für MAC und alle anderen gehen leer aus.
Obwohl man das mit java problemlos in einem Zug machen könnte ohne alle anderen zu diskriminieren.
Genauso verfahren viele Hersteller mit ihren diversen Progrämmchen die alle keine besonderen Anforderungen an PCs stellen.
Ist der Aufwand tatsächlich so viel höher das in java zu machen, sodaß man lieber für jedes System extra entwickelt (oder wenigstens für zwei).

mich regt langsam auf das ich nicht von windows wegkomme wegen sowas, m.M nach völlig unnötigem.


MfG
 
Ich bin soooo froh, dass noch nicht jeder Mist in Java geschrieben wird...

Ich verwende wenn es zu umgehen ist keine Java-Software da ich damit immer Probleme hatte. Ich empfand die Software meist langsam, fehleranfällig und so es eine GUI gab hässlich. Um das ganze bissl flotter zu machen baut der eine oder andere dann doch plattformspezifischen Code ein und schon ist das Ganze nicht mehr unabhängig.

Ne.... mich nervt es zwar auch, dass die eine oder andere Software nur auf den kommerziell erfolgreichen Plattformen raus kommt. Aber lieber so als Java.... *urgs*
 
Ich frage mich oft, warum Java und nicht Perl, Python oder Ruby eingesetzt wird. Die sind nämlich wirklich portabel. Python scheint auch bei Leuten gut anzukommen, die sonst nur Java programmieren.

Ein Kompromiss wäre wohl Pike, aber der Sprache fehlt es an Bekanntheit.
 
Ich habe auch immer wieder Ärger mit Java. Das zickt immer wieder mal mächtig herum. Gerade im Moment, da mich das Studium mal wieder dazu zwingt damit zu arbeiten. Es hat inzwischen seine strikte Klarheit eingebüßt und ist ebenso komplex wie andere Sprachen. Es hat dabei jedoch nie seine eigene Eleganz entwickelt.

Fefe hat sich zu dem Thema kürzlich auch mal ausgelassen. Damit hat er mir doch von Quasi von der Seele gesprochen (das ist natürlich metaphorisch gemeint, ich glaube nicht wirklich an Seelen):
http://blog.fefe.de/?ts=b5546b0c
http://blog.fefe.de/?ts=b555be2c

Zu Python muss man sagen, dass man damit sehr schön plattformunabhängig programmieren kann. Man muss das aber sehr diszipliniert tun und ständig testen, ich mache das in der Regel so, dass ich auf die UNIX-Funktionen setze und Kompatibilitäts-Wrapper um Windows-Bibliotheken, dynamisch hinzufüge, wenn die Unix-Variante nicht verfügbar ist.
 
Und zum Thema Elster noch eine Anmerkung: Die Protokollklassen (COALA) sind in Java implementiert, werfen aber auf dem aktuellen JRE 1.6 eine Exception, während sie auf einer älteren 1.6 Version funktionieren. Über OpenJDK und andere Interpreter brauchen wir erst gar nicht diskutieren - da ist es aussichtslos, die Bibliothek ans laufen zu bekommen. Unter 1.5 läuft sie übrigens auch nicht mehr. :(
 
Da muss ich doch mal die Lanze für Java brechen. Es mag ja sein, daß Java an sich vllt nicht ausreichend konsequent oder zu komplex ist. Andererseits ist das Handling auf mehreren Plattformen, sofern dies bei der Programmierung berücksichtigt wurde (kann ja nu auch nicht so schwer sein!), einfach prima.

Bei OpenStreetmap wird ein Editor (Josm) eingesetzt, von dem ich nicht unbedingt behaupten würde, der wäre langsam oder ähnliches. Dem kann man schon mal ein 150 MB osm-File (XML) in den Speicher laden, ohne das das Ding eine Grätsche macht. Okay, bei der Datenmenge dauert die Ausgabe schon ein wenig länger, was aufgrund der Problemstellung weniger ein Problem von Java ist. Keine Frage, es mag schnellere Sprachen/Anwendungen geben.

Aber als Java-App läuft es auf sämtlichen Maschinen die Java können.

Fazit: Nicht jeder Mist muss in Java gecodet werden: Es gibt für jeden Fall die passende Sprache.
 
Java oder nicht Java - ja das ist ein Glaubenskrieg. Ich persönlich muss hier aber auch mal Java unter die Arme greifen und feststellen dass es eine Sache exzellent beherrscht mit der Python und Ruby (außer man verwendet JRuby oder Jython) einfach nicht (in brauchbarer Form) anstinken können - und das ist vernünftiges Multithreading.

Auch kann ich keineswegs nachvollziehen wo Java denn bitte langsam sein soll. Als Beispiele möchte ich hier mal Netbeans und Eclipse in den Raum schmeißen, die auf Java basieren und imo fern von langsam sind. Versauen kann man Performance aber auf jeder Plattform - das ist kein Java spezifisches problem.

Ohne aber hier weiter in die Tiefe zu gehen will ich auch mal noch die vergleichbarkeit - gerade zu Python, Ruby ein wenig in Frage stellen. Letztere entstanden afaik mit einem starken Fokus auf Skripte, als Skriptsprache also. Java dagegen als ein "Modernes C++" für Businessanwendungen. Es bietet mittlerweile wie C++ auch eine schier unüberschaubare Anzahl an Frameworks, ist aber entgegen C++ nach wie vor eine sehr einfach und schnell erlernbare Sprache. Das Spagat das Java dabei schafft - zwischen Komplexität, Performance und Wartbarkeit dessen was am Ende rauskommt ist finde ich recht enorm.

Vielleicht werden wir ja in Zukunft auch immer öfter die Stärken verschiedener Sprachen und Paradigmen durch die JVM in kooperativem Einsatz sehen. JRuby,Jython,Scala,Clojure nur um mal ein paar zu nennen sind ja recht coole Entwicklungen die sich gerade auf der JVM abspielen und Vorteile verschiedener Sprachen und Paradigmen auf die JVM bringen. Das gepaart mit Java finde ich persönlich eine geniale sache und ist imo auch die größte Stärke der Java Plattform. Prinzipiell ermöglicht einem das Algorithmen die sich gut parallelisieren lassen unkomliziert Funktional in Scala oder Clojure zu implementieren, die Logik wie Datenbankanbindung etc. in Ruby/Python/Java und die Oberfläche dann mit JSF oder was es da sonst noch gibt damit man das ohne großen Aufwand auf seinen vorhandenen Appserver pappen kann z.B.
 
Bitte nicht, das endet doch nur in einem Flamewar...

Und? Ich faende es schon mal interessant, warum perl, python und ruby irgendwie besser als java sein sollten (oder auch nicht). Und noch viel interessanter waere es, mal die jeweilige Sprachej von den vorhanden Libraries zu trennen, und sich auch mal von OO-Entwicklung vs. OO-Programmiersprache zu verabschieden. (Ich koennte jetzt noch einen Rant zum Thema OO loslassen, aber den spare ich mir vorerst).

ps: nein, ich bin auch kein Freund von Java.
 
Naja, Java langsamkeit vorwerfen und dann auf Python zu schielen ist auch keine gute Idee ;) Der Python-Interpreter ist ca. 200x langsamer als der Java Hotspot JiT-C.

Man kann natürlich auch schlechte Software in jeder Sprache schreiben, aber die Java-Software, die ich kenne, läuft doch super auf jeder Plattform. Da wäre z.B. NetBeans, JDownloader, Vuze und JEdit. Alles weit ab von langsam und ich hab 0 Probleme mit denen egal auf welcher Plattform.
 
Naja, besser und schlechter ist dann wirklich Ansichtssache.

Ich habe die Erfahrung gemacht das der Einsatz von Java sich in grossen Projekten mit vielen (durchschnittlichen) Programmierern sich günstiger auf die Qualität auswirkt als etwa C++. Einfach weil die Sprache an sich wesentlich eingeschränkter ist, und damit Standardvorfälle einfacher in aktzeptabler Qualität zu programmieren sind. Was unerfahrene oder schlechte Programmierer mit C++ anstellen können kann man kaum in Worte fassen. Was mich bei Java stört ist der fehlende optionale delete() Operator und im praktischen Einsatz die JVM-Bindung (ja ich kenne GCJ). Ansonsten wäre die Sprache ganz nett für Deep Embedded-Software, für die es ursprünglich auch mal gedacht war. Es kommt nur schlecht an, wenn die JVM den halben Speicher im Embedded System wegfrisst. Dazu kommt noch das Problem der Portierung: Findet mal eine effiziente JVM passend zum exotische OS auf einer exotischen CPU.

Mir persönlich gefallen Smalltalk oder Ruby als OO Sprache besser. Die Verfügbarkeit der Werkzeuge und die Abneigung/Zurückhaltung der Kollegen und Projektverantwortlichen sorgen aber dafür, dass diese Sprachen eher selten bis gar nicht eingesetzt werden.

In einige Bereiche würde auch LISP passen. Aber in grösseren Projekten hatte ich noch nie die Chance die Sprache einzusetzen.
 
Auch kann ich keineswegs nachvollziehen wo Java denn bitte langsam sein soll. Als Beispiele möchte ich hier mal Netbeans und Eclipse in den Raum schmeißen, die auf Java basieren und imo fern von langsam sind. Versauen kann man Performance aber auf jeder Plattform - das ist kein Java spezifisches problem.
Zumindest Eclipse verwendet ein in C++ geschriebenes Interface. Eben weil sie mit Java die Performance nicht in den Griff bekommen haben.

Ansonsten kann ich hier von meinen Erfahrungen berichten. Ich hatte mächtig Ärger mit dem Garbage Collector, der Performance Tests stark verfälscht hat, in dem er eben in den nächsten Test reinhaut um hinter dem letzten aufzuräumen.
Ich hatte auch öfter mal Out Of Memore Exceptions, weil er mit dem Aufräumen nicht nachkam. Wohlgemerkt waren laut top zu dem Zeitpunkt über 5GB Arbeitsspeicher unangetastet.

Java bildet sich ein besser als das Betriebssystem darüber Bescheid zu wissen ob es noch Speicher haben kann oder nicht. Da muss man dann manuell per Kommandozeilenparameter nachjustieren, damit es ordentlich läuft.
 
Zumindest Eclipse verwendet ein in C++ geschriebenes Interface. Eben weil sie mit Java die Performance nicht in den Griff bekommen haben.

Ist historisch gewachsen. Mittlerweile nehmen sich Swing und SWT nicht mehr viel. Teils ist Swing sogar schneller.

Java bildet sich ein besser als das Betriebssystem darüber Bescheid zu wissen ob es noch Speicher haben kann oder nicht. Da muss man dann manuell per Kommandozeilenparameter nachjustieren, damit es ordentlich läuft.

Das ist wiederum eine Design/Sicherheits-Entscheidung. Man legt fest wie viel Speicher die Java-Anwendung benutzen darf. Geht es darüber hinaus, dann fliegt es dir eben um die Ohren.
 
Zum Thema C++ sei nur auf die Frequently Questioned Answers verwiesen - so viele Gotchas gibt es in keiner anderen Programmiersprache.

Aus meiner Erfahrung in Real-World-Projekten heraus muss ich hier eine Lanze für Java brechen - ich wüsste für komplexe Projekte kein besseres als das Java-Umfeld.
Welche Sprache/Plattform bietet einem sonst ab Werk von OS-Unabhängigkeit über Transaktionsunterstützung oder Messaging bis hin zur Hochverfügbarkeit?

Von Faktoren wie Entwicklungsumgebungen ganz zu schweigen - schon mal probiert, mit vi oder emacs in einem Projekt mit mehr als 100.000 Zeilen Quellcode zu navigieren?

Die JVM sehe ich hier als Vorteil gegenüber nativen Programmen - für 99% der Anwendungen bringt die Abstraktion gegenüber dem OS mehr Vor- als Nachteile. Ich möchte das C++-Programm sehen, das ohne gigantischen Portierungs-Aufwand sowohl auf Windows, Unix/Linux als auch dem Mainframe läuft.

Das der Overhead der JVM für Embedded-Anwendungen (mit den i.d.R. sehr begrenzen Resourcen) nicht das Mittel der Wahl ist, sollte offensichtlich sein - the right tool for the right job.

Außer im Java- und mit Einschränkung im .NET-Umfeld gibt es diesbezüglich nichts Vergleichbares - oder anders gefragt: Warum zu C++/Python/Perl/Ruby greifen, wenn diese im Vergleich zu Java/Scala/Groovy all diese Features missen lassen?
 
Von Faktoren wie Entwicklungsumgebungen ganz zu schweigen - schon mal probiert, mit vi oder emacs in einem Projekt mit mehr als 100.000 Zeilen Quellcode zu navigieren?
Ich habe im Moment ein Projekt mit >175.000 Zeilen C++-Code unter meinen Fingern und arbeite ausschließlich mit dem gutem gvim, exctags und svn. Ich kann nicht sagen, dass die Tools mich in irgendeiner Weise behindern, im Gegenteil. :)
 
Ich habe im Moment ein Projekt mit >175.000 Zeilen C++-Code unter meinen Fingern und arbeite ausschließlich mit dem gutem gvim, exctags und svn. Ich kann nicht sagen, dass die Tools mich in irgendeiner Weise behindern, im Gegenteil. :)

Hier das gleiche: > 150.000 Zeilen, c++, vim, grep, sed, make, cvs. Wir haben es mit Eclipse und Netbeans versucht, ebenso CodeBlocks, KDevelop, Anjuta, uvm. Wir sind immer wieder zurück zu den Basics, da die IDEs bei unseren Anforderungen sich als langsam und fehlerträchtig erwiesen.

Zum Thema Refactoring: wir haben spezielle Anforderungen, wie kodiert wird. Da fällt nahezu kein Refactoring an, da sich alle daran halten. Und wenn dann mal was ist (was in den letzten zwei Jahren vllt. zweimal vorkam), dann via s/foo/bar oder sed. Das geht hervorragend.
 
In einem Perl-Vortrag (das Thema war in etwa "Perl is dying" *g*) wurde sinngemäß gesagt, dass es nicht darum geht welche Sprache besser ist, sondern was jemand, der eine Sprache nutzt damit leisten kann.

Es gibt einen Grund, warum es so viele Sprachen gibt und ich sehe auch gute Dinge an Java, vor allem wenn man das ganze historisch sieht steht Java nicht so schlecht da. Ich finde diesbezüglich, dass all diese Projekte von LLVM, über die Mono bis zu Parrot und auch die Entwicklungen rund um die JVM sehr gut sind. Wenn vieles nur einmal anständig gemacht werden muss und dann diverse Sprachen als Interface zum Programmierer zur Verfügung stehen, dann macht das durchaus Sinn. Klar ist ein kompletter Wildwuchs auch nicht das Perfekte, aber lieber wenige, aber gut ausgestattete Plattformen für eine ganze Reihe von Sprachen, als ständig das Rad neu erfinden zu müssen.

Man muss bei der Diskussion zwischen der Plattform/dem Interpreter/der VM, der Syntax, der zu Grunde liegenden Philosophie, etc. unterscheiden.

Da Java eine ziemlich große Verbreitung hat kommt man nicht darum herum und ich muss zugeben, dass ich vor zwei Jahren noch deutlich kritischer gegenüber Java eingestellt war, weil ich nicht genug darüber wusste. Es sind viele kleine und ein paar größere Dinge, die mir an Java nicht gefallen, aber es gibt auch viel Nettes. Man kann sich da lange über die kleinsten Details streiten, deshalb fange ich lieber erst gar nicht an :)

Sprachen können sich in so vielen Details unterscheiden und manche Leute bevorzugen den einen Weg und Andere den Anderen. Das auszudiskutieren ist kaum möglich und führt nur zu Flamewars. Es ist ja nicht so, dass man mit einer Programmiersprache bestimmte Programme nicht schreiben könnte. Die Frage der Performance ist ja auch nicht gerade sinnvoll, weil es auf die Implementierung ankommt und bei Python gibt es ja eine ganze Reihe. Man greift bei kritischen Teilen ja ohnehin auf C zurück und wer nur auf Performance achtet soll Assembly und keine Betriebssysteme verwenden. Unix und generell Betriebssysteme wurden anfangs auch als eine viel zu große Verschwendung von Ressourcen bezeichnet. Performance einen großen Wert beizumessen ist in den meisten Fällen einfach Unsinn, weil all diese Sprachen für solche Dinge gute C-Bibliotheken nutzen bzw. man dann gleich in low level programmieren kann
 
Von Faktoren wie Entwicklungsumgebungen ganz zu schweigen - schon mal probiert, mit vi oder emacs in einem Projekt mit mehr als 100.000 Zeilen Quellcode zu navigieren?

Es ist immer eine Sache der Gewöhnung. C++-IDEs sind praktisch nicht vorhanden. "Die Großen" können im Prinzip auch nur den Code hübsch einfärben. Alle größeren Sachen wie Code-Vervollständigung, Refactoring etc. sind entweder dort gar nicht vorhanden, oder arbeiten fehlerhaft. Das liegt aber auch zum großen Teil an der abartigen Komlexität von C++.

Nur Visual Studio mit Visual Assist funktioniert hier halbwegs brauchbar, aber auch nicht 100%ig fehlerfrei. Und das auch nur unter Windows mit Microsoft-Compiler. ;)

Darum ist es bei C++-Projekten gar nicht so "tragisch", wenn man da nur vim oder so nimmt. Darum nehmen es hier auch viele.

Als Java-Entwickler arbeitet man dort auf einer ganz anderen Stufe. Hier funktioniert Refactoring und all der ganze Spaß ziemlich problemlos. Da änderst du einfach einen Methodennamen und die IDE passt dir das mal eben fix an. Auch Code-Fehler werden dir sauber unterstrichen und per Marker angezeigt. Daneben ist dann sogar meist gleich der Korrekturvorschlag, den man nur anklicken muss. Das geht so in C++ gar nicht (LLVM/Clang arbeitet daran), da ein fehlendes Simikolon dort mal eben 10000 Zeilen markern würde.

Das würde man bei VIM als Java-Entwickler natürlich schmerzlich vermissen. C++-Entwickler kennen es aber gar nicht anders.
 
Von Faktoren wie Entwicklungsumgebungen ganz zu schweigen - schon mal probiert, mit vi oder emacs in einem Projekt mit mehr als 100.000 Zeilen Quellcode zu navigieren?

Ich kann hier den Faktor 100 bieten. Verteilt auf viele Prozesse und Bibliotheken. Am Ende haben sich alle IDEs als ungeeignet erwiesen - ich nutze GVim mit Tags.

Trotzdem ist es schon wahr, dass Java Projekte deutlich leichter zu portieren sind, als C/C++ - wenn eine JVM inkl. vollständiger(!) Klassenbibliothek vorhanden ist. Sobald diese fehlen steht man vor schwer lösbaren Problemen. Dann ist man mit C/C++ meist besser bedient.
 
Zur Zeit hab ich ein Projekt mit ungefähr einer halben Millionen Zeilen Code in C und Fortran unter meinen Pfoten. Entwicklung und Erweiterungen pflege ich auch nur über vim und ctags ein. Das testen geschieht ebenfalls auf Unix. Da wir allerdings auch eine Windows Portierung anbieten sollen, benutze ich eine Reihe von Perl Scripts, die mir später die Solution erstellt. Wenn ich die dann laden will kann ich erstmal ein kleines Büroschläfchen machen, solange dauert das. Mit Visual Studio 2010 Beta ist das schon mal deutlich schneller geworden, aber in der Zeit hätte ich mit vim schon lange mit der Arbeit begonnen.
Man ist da auch nicht nur auf die Microsoft Compiler angewiesen. Die Integration der Intel Compiler ist in Visual Studio schon ziemlich gut. Daneben kriegt man noch allerhand Zubehör.

Das Thema Java wird ja vielseitig diskutiert, aber am Ende muss jeder selbst wissen, ob er das benutzen will und ob das überhaupt für die Anwendung geeignet ist. Lediglich die armen an den Unis haben meistens keine Wahl.
Mit Java 6 gab es ja diverse Verbesserungen insbesondere für diverse mathematische Funktionen, die schnelle wissenschaftliche Anwendungen möglich machten. Für zeitkritische Anwendungen ist das aber absolut ungeeignet u.a. durch den Garbage Collector, der seinen Müll meistens zum unmöglichsten Zeitpunkt einsammeln will. Als Programmierer weiß ich doch am besten, wann das gut ins Konzept passt. *kopf schüttel*

Java hat natürlich den Vorteil das es i.d.R. portabel ist, aber den Vorteil überhaupt den Java hat, ist imho, das es portable GUIs schreiben sehr vereinfacht. Aber gerade der Vorteil und für mich wäre das der einzigste Grund Java einzusetzen, macht es unmöglich. Denn die meisten Java GUIs sind schlicht und ergreifend hässlich und künstlich aufgeblasen. Hinzu kommt noch das man ziemlich dumm dasteht, wenn man Fehler in Java Anwendungen hat. Den großen Wust zu debuggen ist wahrhaft keine Freude.
Also für mich ist Java nichts, im Gegenteil. Damit kann man mich jagen.
 
Also ich mag Java. Aber ich mag C++ auch sehr gerne. Allerdings finde ich die Entwicklung mit einem guten IDE viel angenehmer. Vielleicht liegt das daran, dass ich unnötige Arbeit gern vermeide und man durch ein IDE sehr viel solcher Arbeit spart.
Ob man jetzt Java oder C++ nimmt oder sonst eine Sprache kommt auf den Anwendungszweck an. Wenn man ein riesen Projekt hat, wo nur Daten verwaltet werden und viel mit Datenbanken rumhantiert wird ist Java mit Hibernate z.B. einfach spitze.
 
Also JAVA ist überhaupt nicht Cross-Platform, das ist eine dreiste Lüge. Java-Programme funktionieren tadellos nur mit der VM eines Herstellers. Da ist es irrelevant ob es die auch für dreieinhalb Telefone gibt. Das ist immernoch Multi-Platform Vendor-Lockin und bei Programmiersprachen glaube ich einzigartig.
Es gibt natürlich Versuche dass zu überwinden und vor ein paar Jahren gabs auch Code, aber AFAIK sind zuverlässige Alternative nicht wirklich rausgesprungen.

Was spricht denn überhaupt gegen c++? C++ ist auch cross-platform wenn man sich an Standards hält und keine Systemspezifischen Libs verwendet. Egal ob OpenGL oder Qt, von der Kommandozeile bis zum Videospiel kann man Code schreiben der auf unterschiedlichsten Compilern, CPU-Architekturen und Betriebsystemen kompiliert.

Ich verwende übrigens für C++ Sachen meistens kate als tabbed-editor inkl. konsole zum debuggen. Mit QtCreator spiele ich gerade ein bisschen rum, aber da muss ich die Hotkeys noch irgendwie umgebogen kriegen... und das Syntax-Highlighting ist schlechter als bei Kate.
 
Also JAVA ist überhaupt nicht Cross-Platform, das ist eine dreiste Lüge. Java-Programme funktionieren tadellos nur mit der VM eines Herstellers.

Das stimmt so nicht. Grade im Java EE bereich hast du eigentlich die große Qual der JVM-Wahl, denn dort gibt es eine Gruppe an JVM Anbietern die sich zusammensetzt und den Funktionsumfang von Java EE standardisieren damit jeder von ihnen eine JVM anbieten kann die mit derjenigen der Konkurrenz kompatibel ist, siehe http://java.sun.com/javaee/overview/compatibility-javaee5.jsp
 
Zurück
Oben