Java oder C++?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java oder C++?

    Hallo liebe Gemeinde!

    Bin grad am überlegen... lerne ich Java oder C++? Die Grundlagen beider Sprachen kenne ich ziemlich gut (auch Objektorientierung), aber ich weiß nicht was besser ist.
    Hab gehört Java hat ne übel schlechte Performance, im Vergleich zu C++, ist das wahr? Und ist C++ wirklich SO viel besser zur Spieleprogrammierung geeignet?

    Danke im Voraus,
    -Hox

    PS: Ich weiss, "google ist dein freund", hab aber, auch mit verschiedenen Stichworten, nichts brauchbares gefunden, da die meisten dieser Fragen mit
    Religionskriegsmäßigen Antworten von Java/C++- "Extremisten" beantwortet wurden :D
  • Ich würde immer zu C++ raten, denn im Gegensatz zu Java ist diese Sprache wesentlich verbreiteter und beliebter, speziell bei der Spieleprogrammierung.
    Außerdem ist Java wirklich buggy und alt, wenn solltest du dir C# ansehen, dies ist der passende Ersatz und das, was Java eig. hätte werden sollen.
    Wenn du aber offen für neues bist kann ich dir absolut zu Python raten, in C++ brauchst du sehr sehr lange bis du damit wirkliche 2D oder gar 3D Spiele entwickeln kannst, mit Python ist das schon in ca. 3 - 4 Wochen für absolute Anfänger möglich.
    Wenn du dir dennoch sicher bist, was C++ angeht, weil du vllt. schon Erfahrungen hast wie du ja auch sagst, kann ich dir zu einer Alternative raten, eine Art modernes C++ welche die Stärken von Java und C++ vereint: D. D ist sozusagen modernes C++, es hat die gleiche Syntax wie C++ und es erlaubt dir imperativ (im Gegensatz zu Java) wie auch Objektorientiert zu programmieren, hat aber (im Gegensatz zu C++) einen Garbage Collector und ist wesentlich anwenderfreundlicher und leichter zu lernen als C++.
  • rswhite schrieb:

    Ich würde immer zu C++ raten, denn im Gegensatz zu Java ist diese Sprache wesentlich verbreiteter und beliebter, speziell bei der Spieleprogrammierung.
    Außerdem ist Java wirklich buggy und alt, wenn solltest du dir C# ansehen, dies ist der passende Ersatz und das, was Java eig. hätte werden sollen.
    Wenn du aber offen für neues bist kann ich dir absolut zu Python raten, in C++ brauchst du sehr sehr lange bis du damit wirkliche 2D oder gar 3D Spiele entwickeln kannst, mit Python ist das schon in ca. 3 - 4 Wochen für absolute Anfänger möglich.
    Wenn du dir dennoch sicher bist, was C++ angeht, weil du vllt. schon Erfahrungen hast wie du ja auch sagst, kann ich dir zu einer Alternative raten, eine Art modernes C++ welche die Stärken von Java und C++ vereint: D. D ist sozusagen modernes C++, es hat die gleiche Syntax wie C++ und es erlaubt dir imperativ (im Gegensatz zu Java) wie auch Objektorientiert zu programmieren, hat aber (im Gegensatz zu C++) einen Garbage Collector und ist wesentlich anwenderfreundlicher und leichter zu lernen als C++.
    Ein Beitrag aus der Reihe "Keine Ahnung von Java, aber hauptsache irgendwas dagegen rumgerülpst"

    1. Was genau ist an Java "buggy"? Nenn mal ein paar konkrete Beispiele.
    2. Schon mal was von webbasierten Enterprise-Applikationen gehört? Soviel zum Thema Verbreitung ...
  • jp schrieb:

    Ein Beitrag aus der Reihe "Keine Ahnung von Java, aber hauptsache irgendwas dagegen rumgerülpst"

    1. Was genau ist an Java "buggy"? Nenn mal ein paar konkrete Beispiele.
    2. Schon mal was von webbasierten Enterprise-Applikationen gehört? Soviel zum Thema Verbreitung ...


    Als Buggy würd ich z.B. die Container bzw. Wrapper Klassen wie Integer, Boolean etc. bezeichnen die man für ArrayList etc. braucht. Jede andere Sprache versteht mit primitiven Typen als Template Parametern umzugehen, außer Java ;)
    Aber buggy war auch eher eine Definition von Nachteil.
    Als da wären
    - Keine Operatorüberladung möglich (daher auch dieses stumpfe String.equals statt ==)
    - Java akzeptiert keine numerischen Werte als Wahrheitswerte
    - keine default Parameter Werte
    - keine unsigned Typen, dadurch doppelter Aufwand beim überprüfen solcher Werte
    - veraltete switch-case Abfrage
    - keine Möglichkeit per for-range bzw- for-each Schleife Werte zu verändern; also keine Ref. Werte möglich

    Aber wollt keinen Programmierkrieg ausbrennen lassen^^ sind halt Nachteile die man, wenn man einmal dieses Luxus erlebt hat, sehr stark vermisst. Musst aber nicht gleich ordinär werden ;)

    Was deine Verbreitung angeht: ich sagte ja: speziell bei der Spieleprogrammierung, kam vllt. falsch rüber, aber was Spiele angeht (und damit meine ich keine Apps oder sonstiges) dann hat Java wohl eindeutig keinen größeren Marktanteile, im Vergleich zu C++.

    @Topic: ich würde dir zu SFML raten, die hat die Vorzüge, das sie im Background OpenGL nutzt welches Hardware Beschleunigung ausnutzt. Zudem ist die SFML wirklich sehr modern und komfortabel. SDL ist eig. veraltet.
  • jd schrieb:

    Jetzt musst du nur noch erklären was Einschränkungen im Sprachumfang und fehlender syntaktischer Zucker mit Bugs zu tun haben ...

    Aber buggy war auch eher eine Definition von Nachteil.
    Ich zitiere doch gerne für dich ;)
    buggy war, zugegeben, evtl. das falsche Wort. Bis auf die leidigen Wrapper Klassen und andere Kleinigkeiten existieren keine "Bugs" bzw. "schlechte" fixes des Sprachumfangs.
    Also entschuldige das Wort und ersetze es doch durch Sprachliche-Nachteile.
  • Ich bins mal wieder :D Hab jetzt auch mal mit beidem aktiv rumgeproggt... ich hab gemerkt, C++ ist "cooler". Weiss nicht ob mir das was bringt, aber es ist einfach naja, "cool" :D. Gibt es eigentlich irgendeinen vernünftigen Curses-Ersatz für Java? Wollte evtl. mal ein Roguelikespiel machen, und hab mich das so gefragt...
  • Was hindert dich daran beides zu nutzen?
    Da wo es nicht auf das letzte Fitzelchen bei der Geschwindigkeit ankommt, Java, und da wo Speed gefragt ist, C++.
    Grosse Projekte werden öfter mit mehreren Programmiersprachen realisiert.

    Wenn du dein Handy mit Programmen versorgen willst, geht ohne Java zur Zeit nicht viel.

    Aber so viele wollen hier in die Spieleprogrammierung einsteigen. Nur die, die eine wirklich gute Idee haben, werden da erfolgreich sein.

    Wenn ihr jetzt 20 seid und die Entwicklung bei der Software so weiter geht wie bisher, müsst ihr etwa alle 10 Jahre eine neue Sprache lernen.
    Also bis zur Rente noch etwa 4 oder 5 Programmiersprachen :D

    MfG bcc-fan
  • bcc-fan schrieb:

    Aber so viele wollen hier in die Spieleprogrammierung einsteigen. Nur die, die eine wirklich gute Idee haben, werden da erfolgreich sein.

    Das Problem ist nicht die Spielidee. Denn für die ist der Softwareentwickler in einem Spieleprojekt eh nicht zuständig. Das Problem sind vielmehr die seltsamen Vorstellungen, die diese ganzen Spielkinder von der Softwareentwicklung haben, gepaart mit fehlender Lernbereitschaft und Durchhaltewillen. Softwareentwicklung ist nunmal ein lebenslanger Lernprozess und bedeutet viel, viel Arbeit.

    Wenn ihr jetzt 20 seid und die Entwicklung bei der Software so weiter geht wie bisher, müsst ihr etwa alle 10 Jahre eine neue Sprache lernen.
    Also bis zur Rente noch etwa 4 oder 5 Programmiersprachen :D

    Ja und? Wer sich als Softwareentwickler nicht in kurzer Zeit neue Sprachen und Technologien aneignen kann hat eindeutig seinen Beruf verfehlt.
  • Die Frage ging ja ursprünglich in die Richtung Java exclusiv-oder C++.
    Mein Hinweis mit den Sprachen, die noch auf Jugendliche zukommen, wenn sie eine Berufslaufbahn als Programmierer vorhaben, sollte darauf hinweisen das:
    Java und C++ die bessere Idee ist, als Java exclusiv-oder C++.
    Als Beispiel zur anderen Seite gibt es im realen Leben auch noch Programmiersprachen, die heute nicht mehr vielen bekannt sind - Beispiel: Fortran

    MfG bcc-fan
  • Danke für die vielen Antworten, ich werde versuchen beides mal zu verfolgen... einfach so.
    Und bitte dichtet mir keine abstrusen "falsche Vorstellung"-sdinger an... ich mache das schon ein bisschen und weiss dass das ganze Spieleentwickeln ein verdammt langwieriger Pfad ist. Ich muss in nächster Zeit versuchen meinen Code vernünftig zu kommentieren, vielleicht gibt mir das dann die möglichkeit was eingefrorenes wieder auszupacken ;)

    Ich wollte nur wissen ob beides IM PRINZIP dazu geeignet WÄRE, da ich nur das Javaklischee in erster Linie kannte, aber wenn es mit beidem gut möglich ist alles mögliche (Spiele, Tools und sonst noch so Kram) zu machen, dann muss ich mich wohl doch nicht exklusiv entscheiden. Ausnahme: Swing/Java, für gui anwendungen unschlagbar, wie ich finde :D

    Grüße,
    -Polar
  • Ich muss in nächster Zeit versuchen meinen Code vernünftig zu kommentieren, vielleicht gibt mir das dann die möglichkeit was eingefrorenes wieder auszupacken

    Wenn du das Problem hast, dass du älteren Code nicht mehr verstehst, würde ich dir eher empfehlen, dich mal zu objektorientierten Architektur- und Designprinzipien zu belesen, und deinen Code einem Refactoring zu unterziehen. Es ist besser die Ursachen zu bekämpfen (schlecht lesbarer und wartbarer Code) als an den Symptomen rumzudoktern (Gebrauch von Kommentaren um den immer noch schlecht lesbaren Code zu erklären).
  • hallo zusammen,

    wie ihr warscheinlich richtig vermutet bin ich neu hier ;)

    kurz zu meiner geschichte:
    habe 4 sem. maschinenbau ,in denen mein interesse fürs programmieren geweckt wurde und 1 sem. informatik studiert.nun würde sich die möglichkeit einer programmierer-ausbildung ergeben. diese beinhaltet entweder
    - Anwendungsprogrammierung C/C++, VB.Net, Java
    - Anwendungsprogrammierung Java.

    im studium haben wir mit c++ matheformeln bearbeitet weshalb ich eher dahin tendiere da es das einzige ist was ich bisher in der richtung gemacht habe. nun stellen sich mir die fragen:
    - was soll ich tun und
    - was wäre den auf dauer gesehen "besser" ???!!!

    p.s. habt rücksicht und geduld mit mir :D
  • primeseb schrieb:

    hallo zusammen,

    wie ihr warscheinlich richtig vermutet bin ich neu hier ;)

    kurz zu meiner geschichte:
    habe 4 sem. maschinenbau ,in denen mein interesse fürs programmieren geweckt wurde und 1 sem. informatik studiert.nun würde sich die möglichkeit einer programmierer-ausbildung ergeben. diese beinhaltet entweder
    - Anwendungsprogrammierung C/C++, VB.Net, Java
    - Anwendungsprogrammierung Java.

    im studium haben wir mit c++ matheformeln bearbeitet weshalb ich eher dahin tendiere da es das einzige ist was ich bisher in der richtung gemacht habe. nun stellen sich mir die fragen:
    - was soll ich tun und
    - was wäre den auf dauer gesehen "besser" ???!!!

    p.s. habt rücksicht und geduld mit mir :D
    Naja die frage ist, wohin dich dein weg führt?
    Wenn du z.b weiter in dem bereich Maschinenbau/Maschinen Programmierung/Mikrocontroller bleiben willst, dann würde ich dir zu C/C++ raten.
    Wenn es dich aber mehr in die Industrie treibt, wo du Programme für Firmen machst die einen PC nie verlassen (also damit mein ich einfach Buchhalter Software, Berechnung usw.) dann würde ich dir mehr zu .Net und Java raten.

    Natürlich ist es mit beiden bereichen möglich teilweise den anderen bereich abzudecken(Z.b Mikrocontroller die in Java Programmiert werden können) aber auch nur begrenzt.
  • Willst du sehr nahe an der Hardware arbeiten? Treiber? Betriebssystemprogrammierung? ...
    Dann würde ich dir zu C++ raten, da hier der Geschwindigkeitsgewinn von C++ relevant ist.

    Bei Anwendungssoftware ist der Geschwindigkeitsunterschied quasi egal. Hier sind es zu 99% dein eigener Code der die Ursache eventueller Probleme ist.
    In Java erspaart man dir das Pointerhandling. Du musst dich nicht darum kümmern, dass allokierter Speicher wieder frei geräumt wird. Es ist (meiner Meinung nach) besser dokumentiert. Zudem ist es enorm viel leichter deine Anwendung auf verschiedenen System zum laufen zu bringen (Windows, Linux, Mac). Bei einfachen Anwendungen geht das praktisch automatisch. Java unterstützt sauberes Programmieren etwas besser als C++. So gibt es hier z.B. gar keinen goto-Befehl und eine objektorientierte Struktur ist quasi vorgegeben. Ich denke die direkte Konkurenz für Java ist weniger C++ sondern mehr C# (das einiges von Java abgekupfert hat).
  • In Java erspaart man dir das Pointerhandling. Du musst dich nicht darum kümmern, dass allokierter Speicher wieder frei geräumt wird. .


    Und doch verwendet Java intern selber Pointer. Und das sollte Grund genug sein sich mit der Thematik von Pointer auseinander zusetzen, wofür C++ gut wäre.
    Zumindest um Pointer zu verstehen. Mal abgesehen davon ist es leichter eine Sprache zu lernen wenn man schon eine andere beherrscht. Vor allem da sich Java und C++ syntaktisch gesehen kaum unterscheiden.
    Mfg
    Nobody
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Java verwendet Referenzen. Immer, außer bei den Basistypen, die man aber gleich erkennt. Eine Referenz unterscheidet sich von einem Pointer dadurch, dass ein Pointer auch einen anderen Pointer referenzieren kann, während eine Referenz immer das Objekt referenziert. In meinen Vareablen habe ich zudem immer Referenzen. Das sorgt dafür, dass man nicht Datenobjekte ausversehen clont, wenn man sie (statt ihrem Pointer) einer Methode übergibt. Man musss in Java überhaupt nicht mit * und & hin und her rechnen oder (wie bei C++) überlegen ob man gerade einen . oder -> verwenden muss. Die ganze Pointerrechnung verbirgt Java vor dem Programmierer. Wenn man genau das tun will, ist Java sicherlich die falsche Sprache aber bei Anwendungsprogrammen möchte man in der Regel keine Pointerrechnung betreiben sondern eher bei Treibern und Betriebssystemprogrammierung. Durch dieses Verbergen fallen haufenweise Fehlerquellen weg oder willst du mir erzählen, dass du noch nie ausversehen einen Pointer incrementiert hast anstatt den Wert der dahinter steht?
  • Hm, da muss ich aber mein Prof. nochmal fragen, wieso er sagt das es Pointer sind.

    Und ich hab dir auch nicht widersprochen. Pointer bleiben einem im Java wirklich erspart. Ich wollt nur drauf hinweisen das die in Java trotzdem vorkommen (bzw. Referenzen ;) ).
    Klar ist mir schon mal sowas passiert. Hab ja auch nie behauptet das ich da noch nie Fehler gemacht hab^^
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."