Neues Projekt steht an. Java mit SWT/QT oder c++ mit QT?

mfernau

Mitglied
Hallo Leute,

ich habe den Sticky mit dem "Welche Programmiersprache" usw usf gelesen. aber bei mir ist die Sachlage eine etwas Andere.
Ich bin schon seit mehreren Jahren hauptberuflich "Programmierer" und habe daher mit den gängigen Aufgaben (DB, XML, SOAP, Sockets, I/O, ..) bereits Kontakt gehabt. Durch meine Hochschule habe ich das Java-Umfeld sehr gut kennen gelernt und bin in diesem Feld auch am meisten aktiv tätig. Kenne mich hier also bestens aus.
Außerdem habe ich schon kleinere Applikationen mit c++ und c# geschrieben.

In mittelfristiker Zukunft steht bei uns in der Firma ein neues Projekt an. Ein altes Programm muss generalüberholt werden. Und mit "alt" meine ich Cobol! Vielleicht hat man jetzt eine Idee wie alt "alt" ist ;)
Ich bin der "glückliche", der nun eine Entscheidung zu treffen hat, in welche Richtung es zukünftig gehen soll. Da ich mich firmenintern mit niemanden darüber Unterhalten kann (fehlende Erfahrung bei den anderen Entwicklern), wollte ich mich hier mal umhören.

Die Rahmenbedingungen der Applikation sind:
- SOAP konsumieren können
- XML interpretieren
- Sockets
- Threads
- vernünftige DB Anbindung
- Client/Server Architektur
- SOAP Server*

* SOAP Server muss eigentlich nicht in derselben Sprache sein. Als SOAP-Server stell ich eher ein Tomcat mit nem Axis2 hin. Der Zugriff auf vorhandene Daten geschieht dann über die DB

Letzten Endes kann so ziemlich jede Sprache mit all diesen Techniken umgehen. Die Frage ist nur wie gut oder einfach das abhandelbar ist.

Zur "Auswahl" (was mir als vernünftig in den Sinn kam) stünden bei mir die folgenden Sprachen/Frameworks:
- Java
- C++
- .NET

.NET:
Pro:
- c#, c++, basic - ganz egal welche Sprache. Man kombiniert einfach alles was man möchte
- gute Entwicklungsumgebung
- sollte man später noch einen Entwickler ins Boot holen, wäre man hier etwas freier
- Sehr umfangreiche Bibliotheken (sehr viel im Kern was man braucht)
- alles aus einem Guss was die Entwicklung betrifft (subjektiv betrachtet - daher eher son halber Punkt)
Kontra:
Was ich an .NET gar nicht mag ist die Klammerung an Windows/Microsoft und die möglicherweise nötige Installation/Aktualisierung eines .NET Frameworks beim Kunden. Außerdem habe ich nicht das nötige Wissen bezüglich der GUI ob diese gut verwendbar, oder eher nicht so ausgereift ist. Aber ich denke das MS da schon was vernünftiges hat.

Java:
Pro:
- Für Java spricht eindeutig meine Erfahrung in diesem Sektor.
- Läuft auf vielen Systemen. Man wäre theoretisch also auf einen Linux/Mac Desktop vorbereitet. ist z.Zt. aber nirgends beim Kunden anzutreffen. Aber man weiss ja nie...
- Klasse IDE mit Eclipse
- Sehr umfangreiche Bibliotheken (viel im Kern was man braucht)
- Breite Community
Kontra:
- Ein absolutes NO-GO ist die Swing Oberfläche. Die ist mir so ein (träges) Dorn im Auge, dass sie hier für eine ernste und vor allem reaktionsfreudige Anwendung überhaupt nicht in Frage kommt.
- Speicherfressend
- Lange Ladezeiten (Applikationsstart)

c++:
Pro:
- Blitz schneller Applikationsstart
- In Verbindung mit Qt eine gute GUI und sehr gutes Framework in der Hand
- Auch für andere Systeme kompilierbar bei Verwendung Unabhängiger Frameworks
Kontra:
- Schwerer in den "Griff" zu bekommen (pointer, delete, ...). Stichwort: Speicherleaks und Sicherheit (Pufferüberlauf, etc..)
- viele Bibliotheken müssen erst extern dazugeholt werden wenn es überhaupt welche gibt (achtung Unwissenheit! Ich denke hier an Dinge wie simple String-Manipulation, RegExp, SOAP, XML, gängige Internetprotokolle wie SMTP, POP, HTTP usw, usf)


Was ich an Input bräuchte wäre ein bissl Erfahrungssatz von euch bezüglich der Kontras die mir hier so eingefallen sind.
Bei Java gäbe es z.B. SWT oder Qt-Jambi als GUI-Ersatz. Mit SWT habe ich überhaupt keine Erfahrung was die Benutzbarkeit als Entwickler betrifft (vernünftiger Designer? Performance? Erweiterbarkeit?). Qt wäre mir persönlich irgendwie lieber. Da steht ne größere Firma dahinter mit viel breiteren Einsatzgebieten (gibt ja unzählige Qt Applikationen die sehr gut funktionieren) und der Designer wird gleich mitgelierfert. Aber irgendwie ist die Zukunft von Qt-Jambi ungewiss. Wollten die da nicht mit der Entwicklung aufhören? Ungewisse Zukunft eines Frameworks ist irgendwie schlecht für ein neues Projekt :)
Bei c++ fehlt mir auch irgendwie eine vernünftige IDE mit der ich arbeiten kann. Eclipse ist mir hier einfach zu träge. Der Qt Creator macht nen gutes Bild, ist aber bei weitem nicht so komfortabel wie Eclipse oder Visual Studio. Ist ja auch noch in den Kinderschuhen. Lässt sich hier eine vernünftige IDE erwerben? Am besten wäre es ja noch, wenn sich Qt nativ darin integriert (wie bei Eclipse z.B.).

Wer irgendwas zu diesem Thema zu sagen hat, dem wäre ich Dankbar wenn ich Input bekäme. Auch wenn es jetzt doch ein Roman geworden ist von mir :) Vielleicht hat ja jemand die Lust den "wall of Text" zu lesen ;)

Beste Grüße,
Martin
 
Zum Thema Swing vs. SWT: SWT direkt benutzen kann ich nicht unbedingt empfehlen. Dafür verhält es sich manchmal zu komisch. Mit einem JFace drüber sieht das schon besser aus.

Schau dir doch mal eclipse RCP und für Web RAP an. Nicht alle Applikationen können damit gut umgesetzt werden, aber für manche ist das recht passend.
 
Schau dir doch mal eclipse RCP und für Web RAP an. Nicht alle Applikationen können damit gut umgesetzt werden, aber für manche ist das recht passend.

Verstehe ich das richtig, dass die RCP sowas wie ein Framework ist, das mir eine Basis zur Verfügung stellt, für dich die dann Plugins entwickel, um daraus meine Applikation zu erstellen?

Wenn dem so wäre, dann klingt das vielleicht interessant. Bin mir aber nicht sicher, ob es das wäre, was ich für dieses Projekt möchte. Vielleicht muss ich mal ein Tutorial lesen um die Vorteile davon vollends zu verstehen
 
Hallo,

Verstehe ich das richtig, dass die RCP sowas wie ein Framework ist, das mir eine Basis zur Verfügung stellt, für dich die dann Plugins entwickel, um daraus meine Applikation zu erstellen?

Die Eclipse RCP ist ein Framework, welches aus OSGI-Basis aufgebaut wurde. Deshalb ist es möglich eine Anwendung mit Plugins aufzubauen.
Was du dir in dem Bereich noch anschauen könntest wäre Riena.
http://www.eclipse.org/riena/


Gruß

Sascha
 
Ein absolutes NO-GO ist die Swing Oberfläche. Die ist mir so ein (träges) Dorn im Auge, dass sie hier für eine ernste und vor allem reaktionsfreudige Anwendung überhaupt nicht in Frage kommt.
Worauf begründet sich diese Annahme? Ich benutze und entwickle Swing-Applikationen jeden Tag, und das sind alles sehr ernsthafte und reaktionsfreudige Anwendungen. Es ist also möglich, wenn man ein paar grundlegende Dinge beachtet.
Es sei denn, das Ding soll später mal auf Rechnern mit 512 MB laufen.
 
@zerix: Danke, das schaue ich mir mal an!

Worauf begründet sich diese Annahme? Ich benutze und entwickle Swing-Applikationen jeden Tag, und das sind alles sehr ernsthafte und reaktionsfreudige Anwendungen. Es ist also möglich, wenn man ein paar grundlegende Dinge beachtet.
Es sei denn, das Ding soll später mal auf Rechnern mit 512 MB laufen.

Ich habe hier auch schon so einige Anwendungen mit Swing erstellt und habe festgestellt, dass komplexe Tabellen (lange Listen mit Icons und farbigen Inhalten. Evtl. auch eigene Cell-Views) langsam sein können, dass der Redraw merkbar lange dauern kann und das die Größenänderung eines Fensters ebenfalls ein Trägheitsgefühl aufwirft.
Sicherlich ist es eine Frage der Komplexität einer Oberfläche (wieviel Elemente, welcher Layout Manager, welches L&F). Aber egal welches Programm ich mir anschaue. Swing IST langsam. Sowohl meine Applikation erscheint mir träge, als auch andere Anwendungen die ich in Swing sehe sind nicht das gelbe vom Ei.
Vielleicht hält es sich in Grenzen wenn man das standard L&F benutzt - aber das möchte ich niemandem antun und ich selbst möchte mir das ebenfalls nicht 12h am Tag anschauen müssen. Als Tool für nebenher, als Applikation die man nur kurzzeitig braucht oder als Dienstprogramm das vornehmlich im Hintergrund läuft und dessen primäre Aufgabe nicht bei der Eingabe von Daten liegt wäre das kein Problem (zumindest für meinen Geschmack - möchte hier niemanden zu nahe treten). Aber wir entwickeln eine Anwendung die andere den kompletten Tag nutzen müssen und da möchte ich ein halbwegs ansprechendes Design ausweisen können. Also müsste ein vernünftiges und unverspieltes L&F her (benutze bis Dato immer TinyLaF), welches aber eben wieder besagte Nachteile mit sich bringt.

Und ja, das Programm läuft auf Rechnern mit 512MB RAM. Wir haben sogar Kunden mit Windows98. Aber denen würde ich zur Not noch ein neuen Rechner andrehen. So weit zurück soll es nicht mehr kompatibel bleiben müssen. Also ein Win2k wäre schon Minimum als Vorraussetzung. Aber alte Rechner mit wenig RAM finden sich leider sehr viele unter unseren Kunden.

Grüße,
Martin
 
Moinsen,

Also als C++ Programmierer muss ich nun ein paar ketzerische Sätze los lassen.

Mal davon abgesehen das C++ eine "echte" Programmiersprache ist, nimmt sie diesen Titel "echt" in manchen Dingen zu wörtlich. Ich spreche hier von der sehr umfangreichen und somit fehleranfälligen OOP Umsetzung. Es gibt (soweit ich das Überblicken kann) unendliche viele Wege zum Ziel (einen Objekt Orientierten Code zu erstellen). Sei es nun anhand langer Vererbungshierachien, Polimorphie Bäume, Doppelverketten Listen, virtuellen-Basisklassen, Templates, Friendklassen, Mehrfachvererbung + diverser Zugriffspezifizierer.

(Ich habe hier das Thema Pointer/Pointeraritmethik mal außen vor gelassen, denn das ist nun wirklich das einfaste an C und C++)

Kurzum ein Sammelsurium an so ziemlich allem was einem bei der Programmierung in den Wahnsinn treiben kann. Und wenn man sich selbst davor bewahren kann, ist der Spaß vorbei falls ein anderer oder mehrere C++ Programmierer (die nicht aufeinander eingespielt sind) an dem Projekt mitarbeiten.
Nun kommen noch diverse "Dialekte" derer hinzu, denn jeder C++ Programmierer entwickelt einen eigene Stiel mit den (oben genannten) Features umzugehen. Denn jeder hat C++ anders gelernt, da gibt es z.b. Die C++ Primers (Die Bibel), die „Schnellerner a la C++ in 21 -Tagen“ (So ein Quatsch C++ ist wie Kung-Fu das lernt man ein Leben lang).

Die IT-Brange hat sich aber mehr oder weniger mit diesen C++ arrangiert. In großen Software schmieden gibt es z.b. Code-Controll-Departments die genau festlegen was „Kunst“ und was „Schund“ ist. Und in Universitäten wird größtenteils darauf verzichtet, da nimmt man lieber Java.

Sun hat die Festlegung/Kontrolle und Ordnung in diktatorischer Manier übernommen und eine gute Grundlage für die Entwicklung geschaffen.

Und zu deinem Speed-Problem, würde ich dir mal eine native Kompilation ans Herz legen.

http://gcc.gnu.org/java/

Kompiliere mal testweise ein paar deiner Java-Programme und schau mal was raus kommt. Denn Binärcode ist es egal mit was er programmiert wurde. Damit würdest du jedenfalls einiges an Speed raus holen, obgleich nicht alles da Java sehr viel CallbyValued.
 
Mal davon abgesehen das C++ eine "echte" Programmiersprache ist, nimmt sie diesen Titel "echt" in manchen Dingen zu wörtlich. Ich spreche hier von der sehr umfangreichen und somit fehleranfälligen OOP Umsetzung. Es gibt (soweit ich das Überblicken kann) unendliche viele Wege zum Ziel (einen Objekt Orientierten Code zu erstellen). Sei es nun anhand langer Vererbungshierachien, Polimorphie Bäume, Doppelverketten Listen, virtuellen-Basisklassen, Templates, Friendklassen, Mehrfachvererbung + diverser Zugriffspezifizierer.

(Ich habe hier das Thema Pointer/Pointeraritmethik mal außen vor gelassen, denn das ist nun wirklich das einfaste an C und C++)

Kurzum ein Sammelsurium an so ziemlich allem was einem bei der Programmierung in den Wahnsinn treiben kann. Und wenn man sich selbst davor bewahren kann, ist der Spaß vorbei falls ein anderer oder mehrere C++ Programmierer (die nicht aufeinander eingespielt sind) an dem Projekt mitarbeiten.
In unserem Umfeld wären das nicht soo viele Entwickler. Also ich denke das wäre Überschaubar :) Aber trotzdem ist es ein interessantes Problem. Ich denke nur, dass es in meinem Umfeld ein gut kontrollierbares Unterfangen wäre.

Und zu deinem Speed-Problem, würde ich dir mal eine native Kompilation ans Herz legen.

http://gcc.gnu.org/java/

Kompiliere mal testweise ein paar deiner Java-Programme und schau mal was raus kommt. Denn Binärcode ist es egal mit was er programmiert wurde. Damit würdest du jedenfalls einiges an Speed raus holen, obgleich nicht alles da Java sehr viel CallbyValued.
Letzte News aus dem Jahr 2007. Ich meine mich auch entsinnen zu können, dass diese Binärkompelierung nur für Java 1.4 Code eingermaßen funktioniert. Und letzten endes wahrscheinlich auch alles nur ohne externe Libs. Also eher ungeeignet.

Trotzdem danke für die ausführliche Stellungnahme zu c++ und seinen Schattenseiten.
Das es nicht leicht sein würde ist mir schon klar. Der Gedankenumstieg von Java zu c++ fällt mir immer wieder etwas schwer. Was man in Java "mal so eben" tut, wird in c++ manchmal zu irgend einem echten Gewürge. Aber ich denke das ist auch nur eine Frage der Gewöhnung. Würde c++ meine Primärsprache werden, würde ich dem auch etwas anders gegenüber stehen.

Gibt es für c++ eigentlich Frameworks die einem die Client/Server Architektur erleichtern? Ich meine das Protokoll zwischen Client und Server. Unter Java könnt ich z.B. RMI nehmen, oder serialisierte Objekte benutzen.

Gruß,
Martin
 
Zurück