staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

C++ oder Java

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

sharkattack

(Themenstarter)
Avatar von sharkattack

Anmeldungsdatum:
7. April 2005

Beiträge: 444

OK, danke für die Antwort.

DrScott Team-Icon

Ehemalige
Avatar von DrScott

Anmeldungsdatum:
7. Juli 2005

Beiträge: 6018

Wenn Du in C++ dann mal gut zurechtkommst, dann solltest Du unbedingt die beiden Bücher 'Effective C++' und 'More effective C++' von Scott Meyers lesen. Danach weißt Du was man in C++ so alles falsch machen kann 😉. Ich war damals richtig geschockt... 😉

dentaku

Avatar von dentaku

Anmeldungsdatum:
31. Januar 2005

Beiträge: 3785

sharkattack hat geschrieben:

Hi

Danke erstmal für die Antworten. Ich hab mich noch nicht entschieden. Werde noch ein bisschen im Internet stöbern. Was ich bei C++ gut finde, ist, dass es lauft, ohne dass man die Software von einem Hersteller (Sun) installieren muss. Bei Java ist halt gut, dass es direkt auf allen System läuft, die Java installiert haben.

Leider stimmt keines von beiden: wenn Du nicht bei 08/15 Progrämmchen stehen bleiben willst, kommst Du nicht darum bei C++ Programmen auch zusätzliche Bibliotheken zu installieren und auszuliefern. Bei Java musst Du schon sehr spezifische Anwendungsgebiete angehen, um mal soweit zu kommen. Auch die Behauptung, dass Java auf allen Systemen läuft, die Java installiert haben ist so nicht richtig. Denn man benötigt eine Mindestversion von Java um ein Programm laufen lassen zu können. Ein in Java 1.5 geschriebenes Programm (bytecode) läuft nunmal nicht auf einem System mit Java 1.3. (Natürlich kann man mit Java 1.5 auch für kleinere Ziel-VMs kompilieren (=bytecode generieren), aber dann kann man natürlich nicht die 1.5-spezifischen features nutzen.) Also so einfach mit dem "write once run everywhere" ist es nicht - ein frommer Wunsch von Sun, der aber leider schon sehr früh geplatzt ist, da schon die 1.1 Version nicht mehr kompatibel zur 1.0 Version war. Das sieht man Heute öfter noch bei vielen Applets im Internet. Da geistern natürlich noch unzählige "alte" Applets die eben nicht mehr (alle) Binärkompatibel (=Bytecodekompatibel) zu aktuellen JVMs sind.

sharkattack hat geschrieben:

Hi

Hier bin nochmal kurz ich. Mich würde es mal interessieren mit was die meisten Gnome Programme geschrieben wurden. Ich nehme mal an mit C oder C++, oder? Ich möchte nämlich in erster Linie Programme für Linux (Gnome) schreiben.

Und was machst Du wenn demnächst ein neuer Desktop für Linux herauskommt und die Gnome Apps nicht mehr laufen? Oder Du doch noch Dein Programm für Windows und Apple Mac anbieten möchtest? Das wäre kein Problem mit Java ... das war übrigens der Hauptgrund, warum ich mich bei Erscheinen von Java (vor 10 Jahren) darauf gestürzt habe: endlich nicht mehr nur für 1 System entwickeln. Ich habe so meine Programme und Utilities von Windows nach Linux rübergerettet - die laufen alle sofort auf Ubuntu weiter. Ist das nicht toll!

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Die Diskussion hier ist echt sinnlos. Dem OP geht es darum, Programmieren zu lernen, und das heißt in erster Linie, sich eine Denkweise anzueignen. Wenn man das Programmierparadigma der objektorientierten Programmierung einmal verstanden hat ist es dann auch völlig wurscht, ob man ein Konzept nun in C++, Java, C# oder was auch immer umsetzt. Abgesehen von einigen Feinheiten wie Mehrfachvererbung (die es in Java/C# nicht gibt - *kotz*), Polymorphie (die in C++ mit dem virtual-Keyword nicht so schön ist), ist das dahinter stehende Modell immer das gleiche. Desweiteren sind Java und C++ sich syntaktisch so ähnlich, dass es einen C++-Programmierer nicht vor größere Schwierigkeiten stellt, Java zu lernen oder umgekehrt - ob man jetzt abstract void foo(); oder void foo()=0; schreibt ist reine Gewohnheitssache.
Performance-Betrachtungen sind in einem Thread wie diesem fehl am Platz. Das war vielleicht vor 20 Jahren ein Kriterium, aber heute ist ausnahmslos jede Sprache schnell genug, die Programme eines Anfängers, welche ja nicht geschwindigkeitskritisch sind, in ausreichender Geschwindigkeit auszuführen. Und bei Bedarf kann man die Sprache dann immer noch wechseln, was sehr einfach ist wenn man schon programmieren kann. Wenn ich dann noch solche Blödsinn lese wie "Von dieser unrühmlichen Ausnahme abgesehen ist Java eigentlich immer mindestens genauso schnell wie C++." kommt mir die Galle hoch. Hast Du z. B. schonmal die Geschwindigkeit trigonometrischer Funktionen in Java "bewundern" dürfen? Die sind (bzw. waren zumindest mit 1.4.2) locker 10-15x langsamer als in C++. Viel wichtiger als über die Geschwindigkeit einer Sprache zu diskutieren ist es, die richtige Sprache für ein Projekt zu wählen. Wenn ich im Bereich der Numerik arbeiten will nehme ich Fortran, welches auf diesem Gebiet alles andere im Regen stehen lässt. Wenn ich dagegen Metaprogrammierung betreiben will nehme ich LISP , für Serveranwendungen Java oder vielleicht C# und für Treiber oder Echtzeitanwendungen C++.
Zum lernen nehme ich eine Sprache mit einer klaren, verständlichen Syntax (da ist Python wohl ganz gut, C++ und Java dagegen nicht) die mich auch vor möglichst vielen Anfängerfehlern bewahrt. C++ scheidet schnell aus (z. B. warnt der g++ standardmäßig nicht vor if(a=b) und prüft keine Arraygrenzen), Java ist da eindeutig besser. Die Standardbibliothek von Java ist zwar nicht schlecht, aber Qt bietet einen vergleichbaren Umfang. Insgesamt liegt Java zum lernen in meinen Augen vor C++, C# spielt in einer ähnlichen Liga wie Java. Das Argument der Protabilität ist heute nicht mehr uneingeschränkt gültig - erstens kann man auch in C++ portabel programmieren, zweitens kann man mit Visual Studio 2005 auch aus C++-Quellcode CIL-Bytecode kompilieren, der dann mit Mono läuft.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

dentaku hat geschrieben:

sharkattack hat geschrieben:

Das sieht man Heute öfter noch bei vielen Applets im Internet. Da geistern natürlich noch unzählige "alte" Applets die eben nicht mehr (alle) Binärkompatibel (=Bytecodekompatibel) zu aktuellen JVMs sind.

Alte Programme sind fast immer kompatibel mit neuen JVMs.
Ein Programm hatte ich mal, das wollte mit 1.4 nicht laufen.
Wie sich anhand des Quellcodes feststellen ließ, weil der Programmierer explizit die Vesion abgefragt hat, und nur zw. verschiedenen 1.1.er, 1.2er und 1.3er-Versionen geprüft hat.
Paßte die Version nicht, terminierte das Programm mit 'JVM too old'.
Daß es in Zukunft eine 1.4er Version geben könnte hatte er nicht bedacht. ☺

Zwischen C++ und Java würde ich Java empfehlen. Grund: Es gibt keine Zeiger, es gibt eine eingebaute Garbage-Collection, objektorientiertes Programmieren wird besser unterstützt, es gibt keine Mehrfachvererbung *grins*, das Compilat ist portabel.
So konnte ich problemlos auf Linux mehrere Programme entwickeln, die bei den Kunden fast immer unter Windows laufen mußten. Mit C++ wäre das ein enormer Act gewesen - nicht unmöglich, aber mit erheblichem Mehraufwand verbunden (und deswegen eben doch nicht möglich).
hier http://www.javabuch.de/ gibt es ein gutes Einsteigerbuch.

dentaku

Avatar von dentaku

Anmeldungsdatum:
31. Januar 2005

Beiträge: 3785

"Hello World" hat natürlich Recht: am wichtigsten ist erstmal sich zu überlegen, was man alles Programmieren möchte. Python und Java haben sehr unterschiedliche Zielgruppen. Du wirst mit Pearl viel schneller glücklich um schnell kleine Scripte und utils zu schreiben. (Meine Ausführungen sollten auch nur Falschaussagen richtig stellen.)

lacarpe

Avatar von lacarpe

Anmeldungsdatum:
21. Juni 2006

Beiträge: 340

Hello World hat geschrieben:

Die Diskussion hier ist echt sinnlos.

Das finde ich nicht. Die Diskussion ist vielleicht OT, aber nicht sinnlos. Ich habe mit diesem Thread sehr viel Neues erfahren und echt was gelernt, denke ich - auch wenn es nicht "mein" Thread ist 😉.

Ansonsten stimme ich natürlich zu. Entscheidend ist, was man programmieren möchte.

Und zur Portabilität: Das ist schon einen Gedanken wert, auch für einen Anfänger. Mir ging es damals so, dass ich meine Borland-C++-Programme nicht mal eben für Visual Studio fit machen konnte, geschweige denn für Java. Da muss man vermutlich etwas mehr Ahnung haben, wie ich als Anfänger. Ein Systemwechsel ist mit Java dagegen echt einfach. Und ich habe auch als Anfänger bereits Programme geschrieben, die ich gerne mit hinübergenommen hätte. So sind sie nach einem Systemwechsel dann auf der Halde gelandet. Was ich schade fand. Also: Für mich war auch als Anfänger das Thema Portabilität durchaus relevant.

Der Java-Umstieg von Win auf Linux hat mich jüngst jedenfalls begeistert.

Lieber Gruß,
lacarpe

dentaku

Avatar von dentaku

Anmeldungsdatum:
31. Januar 2005

Beiträge: 3785

Für mich ist Portabilität auch am wichtigsten. Das ist auch ein Grund, warum ich viele meiner kleinen Utilities nicht auf Windows mit Windows Scripten geschrieben habe, sondern als ein ANT Script mit verschiedenen Targets. Beim Umstieg auf Linux musste ich nur ANT auf Linux installieren und schon hat alles wieder funktioniert.

Das ist auch der allgemeine Trend in der Softwarebranche: selbst Microsoft ist nun auf den Zug gesprungen und entwickelt selbst seine virtuellen Maschinen. Schliesslich will auch Microsoft auf dem stetig wachsenden Linux Markt mitverdienen. Und da soll dann auch Microsoft Office drauf laufen, weil es ja "viel besser" (...) ist als OpenOffice & Co. 🙄

lacarpe

Avatar von lacarpe

Anmeldungsdatum:
21. Juni 2006

Beiträge: 340

Entschuldigung, wenn ich noch einmal OT gehe, aber das interessiert mich jetzt:

dentaku hat geschrieben:

Ein Fractalprogramm würde ich z.B. stets mit der Server HotSpot VM laufen lassen statt mit der (voreingestellten) Client HotSpot VM.

Ich habe ein Java-Programm mit GUI-Oberfläche programmiert. Es gibt hier eine Funktion, die per Button aufgerufen wird und dann 5 Minuten lang nur rechnet, also Daten aus Dateien ausliest und dann verschiedene Operationen vornimmt, ohne dass die GUI wesentlich dabei angesprochen wird. Würde so ein "reiner" Rechenprozess um einiges schneller werden, wenn ich die Server HotSpot VM laufen lasse? Um welchen Faktor schätzungsweise? Und unterstützt diese Server HotSpot VM trotzdem das GUI?

Für eine kurze Erklärung wäre ich dankbar.
lacarpe

sharkattack

(Themenstarter)
Avatar von sharkattack

Anmeldungsdatum:
7. April 2005

Beiträge: 444

Hi

Also erstmal vielen Dank für die Hilfe und Erklärungen. Ich werde mit C++ anfangen, obwohl ich weiss, dass es ein ziemlich harter Brocken ist. Später kann ich ja dann immer noch Java lernen. Dann ist es sicher nicht mehr so schwer wie wenn ich neu anfangen müsste.

lacarpe

Avatar von lacarpe

Anmeldungsdatum:
21. Juni 2006

Beiträge: 340

@dentaku:

Danke für den Tipp. Ich werde es ausprobieren und bin schon gespannt.

Gruß,
lacarpe

sharkattack

(Themenstarter)
Avatar von sharkattack

Anmeldungsdatum:
7. April 2005

Beiträge: 444

Hi

Noch eine Frage. Kann mir jemand ein gutes Buch empfehlen, um in die Welt des C++-Programmierens einzusteigen?

CiRecT

Avatar von CiRecT

Anmeldungsdatum:
13. Juni 2006

Beiträge: 334

Also ich bringe mir seit einiger Zeit C selber bei. Dazu habe ich mir das Buch "C von A bis Z" von Jürgen Wolf gekauft. Eine Open-Book Version gibts auf www.pronix.de. Dies kann ich nur jedem C-Programmierer egal ob Anfänger oder Fortgeschrittener empfehlen. Auf dieser Seite gibts auch n OpenBook zur Linux/Unix-Systemprogrammierung wo nur mit C abgehandelt wird. Vorher habe ich mit Qbasic geproggt hat mir aber langsam nicht mehr gereicht ☺ Dann habe ich mir überlegt ob ich mit C oder C++ anfangen soll. Ich habe mich für C entschieden weil ja alles was C auch C++ kann bis halt auf OOP, die ich ja sowieso als Anfänger eigentlich nicht benötige. Außerdem habe ich mir überlegt, lieber C zu lernen und dann einige Zeit dazu bleiben und wenn ichs dann perfekt beherrsche lerne ich dann C++. Da ich sowieso dann vorwiegend Programme für die Konsole bzw später dann für GNOME (GTK) schreibe brauche ich ja C++ nicht verpflichtend.

MFG
CiRecT

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

CiRecT hat geschrieben:

... weil ja alles was C auch C++ kann bis halt auf OOP, die ich ja sowieso als Anfänger eigentlich nicht benötige.

hört, hört.

sharkattack

(Themenstarter)
Avatar von sharkattack

Anmeldungsdatum:
7. April 2005

Beiträge: 444

Hi

Hey was macht ihr hier aus meinem Thread? 😀 Es geht doch hier nicht um Java. Da meine Frage in dem Java Streit untergegangen ist, frage ich nochmal, ob mir jemand ein gutes Buch für Anfänger zu C++ empfehlen kann.