• also ich kenn c++ zwar net, aber die senior-programmierer unserer agentur meinen alle des wäre doch irgendwo das gleiche...
    die c-schiene ist näher am betriebssystem und etwas schneller als java.
    java ist recht einfach zu erlernen und programming-patterns sind ja sprach-unabhängig

    generell sagen viele dass man java für sichere businesslösungen hernehmen sollte und wenn etwas nah am OS sein soll und für games sollte man sich c oder c++ zur brust nehmen, evtl delphi.
    bücher kann ich dir net empfehlen, aber ich kann dir gerne unsere schul-pdf für den start in java geben

  • Also ich kann C++ empfehlen:
    C++ bietet eben alle Möglichkeiten, sowohl die systemnahe Programmierung als auch die sehr viel abstrahiertere. Das Verhalten lässt sich viel feiner steuern als in Java, sollten bestimmte Daten im Speicher etwa ein bestimmtes Verhalten beim Löschen oder kopieren aufweisen, lässt sich dies in C++ modifizieren, wenn man das jedoch schlecht macht, gibt es ein Speicherleck und der Speicher wird voll. Ich muss allerdings sagen: Es war ein funktionierendes Java-Programm, bei dem seit einigen Wochen immer wieder Speicherlecks beobachte - wirklich ernsthaft, also es füllt den ganzen Speicher - nicht wie wenn man in C++ mal eine Speicherstelle vergisst, was wiederum schneller als in Java passiert. C++ bietet mehr Konstrukte, die die Entwicklung einfacher oder (vom Quelltext her) sinnvoller machen.
    Die C++-Standardbibliothek bietet sehr gute Sachen, zum Speichern von Variablen in verschiedenen Array-Typen oder auch zur Ein-/Ausgabe auf Kommandozeile und in Dateien. Wenn du hiervon noch mehr braucht, also noch ausgereifter, solltest du die Boost-Bibliothek verwenden. Damit kannst du dann auch Netzwerkprogrammierung betreiben und Verzeichnisse auf der Platte handeln sowie einiges mehr. Um graphische Programme zu erstellen (mit Buttons und so) solltest du zur Bibliothek Qt, damit kannst du sehr komfortable GUIs erstellen, mit Drag-and-Drop, und allem. Außerdem werden auch weitere Funktionen geboten: Ander Möglichkeiten zur Netzwerkprogrammierung, HTTP- und FTP-Zugriff, ein paar praktische Container für deine Variablen, einen Designer, mit dem du das Aussehen des Programms per wysiwyg bestimmen kannst, Malen in 2D und, und, und... Wenn du ein Spiel o. ä. machen möchtest, ist es sinnvoll, in das Qt-Programm die Bibliothek SFML einzubinden, sie bietet effizientes 2D-Rendering - auch von Bildern - Musik und Ton, noch mehr Netzwerkprogrammierung und eben einige Low-Level-Sachen, wenn man direkt auf Eingaben von Tastatur, Maus und Joystick zugreifen möchte. Wenn es an 3D geht, kann man in diese Kombination noch die Bibliothek OpenGL einbinden.
    Alle Bibliotheken sind plattformunabhängig konzipiert, das heißt du kannst mit dem selben Quellcode das Programm für Linux, Windoof und Mac erstellen, das bekommen eben viele Spieleentwickler nicht so mit und verwenden DirectX und die WinApi, naja, da muss ich nichts zu sagen, außer dass ich das assozial und etwas dumm finde...
    Als Buch kann ich den C++-Primer von Addsion-Wesley empfehlen, für Tutorials schau mal in den Ankündigungen des Forums.
    Delphi und C# sind übrigens so ziemlich das Gegenteil von platformunabhängig, Java ist sehr plattformunabhängig, also die gleichen Dateien laufen auf allen Systemen, was aber auf Kosten der Performance geht, er kann da zwar gut optimieren, allerdings muss die reinterpretation jedes Befehls zur Laufzeit einfach mehr Performance kosten. Die Standard-Bibliothek von Java hat gleich GUI-Funktionen etc., ist aber - auch auf Grund von Limitierungen in der Sprache - weniger schlüssig aufgebaut, und ist im Low-Level bereich fast schon unkomfortabel, Qt, Boost und SFML sind wirklich beinahe ebenso schlüssig wie die stdlib aufgebaut, was keine Selbstverständlichkeit, vorallem bei älteren Bibliotheken ist.
    Als C++-Compiler benutzst du am besten einfach die gcc, unter Windoof heißt das MinGW, die macht das schon gut. ;) Aber du brauchst wohl auch noch eine graphische IDE mit einem guten eingebauten Editor, Dateimanagement usw.. Hierfür empfehle ich Kdevelop, das setzt jedoch die Installation der Kdelibs voraus. Wenn du wirklich effektiv in C++ programmieren möchtest (gilt eigentlich auch für Java), würde ich auf Linux umsteigen: Bibliotheken lassen sich dort leichter installieren und kofigurieren, viele wichtige Sachen sind vorinstalliert (der Compiler z. B., oft auch ein paar Bibliotheken), und ein Blick in anderer Leute Quellcode, der hier einfacher ist, hilft auch.
    Ein letzter Punkt:
    C lernen lohnt sich nicht, du wirst in C++ mehr Möglichkeiten haben, und falls du wirklich einmal reines C brauchst, wirst du das bei C++ gleich "mitgelernt" haben. ;)

    Viele liebe Grüße
    The User

  • was stimmt nicht?
    ich hab da lediglich von erfahrungen und erlebnissen berichtet und auch betont, dass ich kein c oder c++ kann...

    und man kann mit jeder hochsprache eigentlich alles programmieren, man muss nur entsprechende schnittstellen haben

  • Hm, laut http://de.wikipedia.org/wiki/Jogl kannst du wohl auch mit Java auf OpenGL zugreifen. Solche Wrapper bieten einen riesen Vorteil: das Ausschließen von vielen Fehlermöglichkeiten.
    Generell sollte man sich den Einsatzzweck überlegen, denn du fährst ja auch nicht mit dem 10t-LKW zum Einkaufen, oder?
    Ich würde mir zuerst Java anschauen und C++ kannst du dann gegebenenfalls immer noch nachlernen, falls das wirklich notwendig sein sollte.
    Und natürlich kannst du deine Anwendungen auch unter Windows und Mac schreiben. Einzig, wenn du beim C++-Programmieren einen ganzen Rattenschwanz von Abhängigkeiten hast, ist ein Paketmanager ganz hilfreich. Bei Java ist das meiste schon in der mitgelieferten Klassenbibliothek dabei, sodass du nur in den seltensten Fällen zusätzliche Jars brauchst (die sich auch recht komfortabel verwalten lassen, da eine Datei).

  • synaptic
    Und wer programmiert die Schnittstellen? Na einer der C++ kann. ;)
    Einige Sachen gehen natürlich auch mit Java:
    interatkive GUI- und Konsole-Anwendungen
    Applets (zum Beispiel in Websites, ist mit C++ eher schwierig bis kaum möglich)
    Andere Sachen gehen nur ein C++, genau genommen geht damit alles:
    Sehr leistungshungrige Applikationen
    Betriebssystem, Sachen wie Desktopumgebung sind in Java auch kaum möglich
    Maschinennahe Programme (inline Assembler)
    Treiber
    Programme oder Bibliotheken, die auf Systemkomponenten zugreifen wollen

    Ansonsten biete die Sprache C++ an sich einfach mehr Möglichkeiten, aber jetzt ei paar Fachwörter aufzuzählen würde abschrecken, dadurch kann man auf jeden Fall optimieren, leichter modulare Programme schreiben, leichter Debuggen oder Fehler ausschließen.
    Für Java gibt es einen OpeGL-Wrapper, da man sonst nicht mit Java drauf zugreifen könnte, ganz einfach, solche Sachen gibt es natürlich auch in C++.

    vbtricks
    Das mit der Java stdlib ist klar, die bietet von Hause aus mehr Grundfunktionen, aber ich würde mal behaupten, das C++-Programme auf Grund ihrer Möglichkeiten eher auf externe Programme zugreifen und die allerwenigsten ohne eine der Bibliotheken Boost/Gtk+/Qt/SDL/OpenGL auskommen. Ich spreche einfach aus Erfahrung, dass die Entwickler in Linux auch auf die Wünsche von Entwicklern besonders eingehen und es einfacher ist, bis das komplett eingerichtet ist, aber das gehört wohl in einen anderen Thread.^^

  • C# wie wärs damit?


    Schöne Programmiersprache, teilweise eleganter sogar als Java. plattformunabhängig dank der freien Mono-Implementierung (vor kurzem in Version 2 erschienen) unter Linux und Mac ist die IDE MonoDevelop aber leider noch nicht ganz so ausgereift wie unter Windows (Visual Studio).

    Treiber, Betriebssysteme und Desktopumgebungen kann man damit nicht schreiben (aber wir hatten ja schon das Beispiel von wegen LKW und Einkaufen).

    Und die Performance-Einbußen gegenüber C++ sind marginal. Bei heutigen Systemen ist das bis auf wenige Anwendungen zu vernachlässigen (was bringt es dir, wenn deine Anwendung statt nach einer Millisekunde nach zwei Millisekunden wieder reagiert, so schnell bist du gar nicht :D )

  • Naja vbtricks, Performance hat schon etwas:
    1. Man hat nicht immer nur ein Programm laufen, die Millisekunde mehr belastet die anderen Programme
    2. Programme enthalten auch Teile, die Sekunden in Anspruch nehmen, je nach Programm kann es auch sehr komplexe Berechnungen geben, die viele Sekunden in Anspruch nehmen oder etwas vielfach in der Sekunde aufgerufen werden
    3. Ältere Systeme werden noch mehr belastet

    Ich verweise mal auf eine Benchmark mit mehr oder minder primitiven Berechnungen (naja, ob man die Ackermannfunktion primitiv nennen darf...):
    http://shootout.alioth.debian.org/gp4/benchmark.…ursive&lang=all
    Java braucht doppelt so lang mit 10mal mehr Speicher, und das C++ Programm ist generisch, also der Speicheraufwand in C++ ließe sich noch reduzieren, ein Standard-Java braucht dann schon mehr als dreimal länger, Mono fast viermal länger.
    Jedes umfassendere Programm rechnet an der ein oder anderen Stelle mal über Sekunden, beim Starten, Speichern und Laden, ausführen von Skripts oder einer blöden Berechnung.

    Naja, der C#-Standard wird von einem gewissen Unternehmen kontrolliert.

    Aber ich kann noch einmal betonen:
    Ich finde C++ an sich schöner, also eleganter und vielseitiger als Java.
    Ich kann auf jeden Fall nicht bestätigen, dass C++ komplizierter ist, in Java wird man vom Hello-World-Programm erschlagen und die weiteren Möglichkeiten halten sich in Grenzen.

    Edit:
    @goldeneye
    Du kannst in Java kein Vista programmieren (wenn man das überhaupt will), WoW geht prinzipiell aber nicht Resourcen-technisch, ein Webbrowser ginge schon, würde aber vielleicht durch manches Javascript ins Schwitzen kommen.

  • Mit welcher Programmiersprache wurden denn die Betriebssysteme/Spiele programmiert?



    Betriebssysteme sind meist mit C/C++ geschrieben worden. Spiele, keine Ahnung.

    Wie schon TheUser erwähnt hat, Qt kann ich nur empfehlen, diese Klassenbibliothek ist schon sehr gut.

    Zu den Compilern unter Windows: Qt kann man auch mit den Expess-Versionen von MS nutzen.

  • Es gibt auch einige Spiele, die in Java programmiert sind, aber die aufwendigeren und umfangreicheren sind in C++ gemacht. Eine Sache hab ich noch vergessen: Microcontroller kannst du auch mit C++ programmieren, falls du mal einen Taschenrechner bauen möchtest, oder einen Wecker.^^
    Für Code::blocks gibt es anscheinend auch eine Qt-Integration, ansonsten gibt es eben QDevelop und KDevelop, die haben wohl die beste Qt-Integration.

  • The User: ich finds schade, dass java bei dir einen so geringen stellenwert hat, schleisslich gibt es mittlerweile lego-bausätze, die nen java-betriebssystem haben.
    will sagen java ist weiter auf dem vormarsch ;)

    und ich finde auch, dass java ein wunderbarer einstieg in die welt des programmierens ist, wenn man dazu noch javascript vorab kannte is es noch einfacher.

    @goldeneye:
    bücher kann ich dir nicht empfehlen, nur den rat mitgeben selber zu gucken was dir am ehesten liegt...
    und gar keine ahnung zu haben und direkt nach spiele- oder betriebssystemprogrammierung zu fragen is schon nen grosser schritt...
    schliesslich musste eh erstma syntax und zusammenhänge kennen bevor du dich an patterns machen kannst.
    ich hab den eindruck du willst das schnitzel braten, bevor dat schwein gross genug zum schlachten is

  • Ich kann auch Java, aber ich finde das nicht so schön, eingeschränkt ist man auch, ich habe Freude an mehrfacher Vererbung, Speicherzugriff, Templates und Operatorüberladung. ;)
    Ich ziehe Java aber immernoch irgendwelchen Sonderlingssprachen oder C# oder Delphi vor. Die Plattformunabhängigkeit ist ja auch schön, ab und an braucht man auch ein Applet. Aber von der Sprache selbst und den Möglichkeiten...

    @goldeneye
    Schau mal in dem "Wichtig" markierten Thread. ;)

  • Ich kann auch Java, aber ich finde das nicht so schön, eingeschränkt ist man auch, ich habe Freude an mehrfacher Vererbung, Speicherzugriff, Templates und Operatorüberladung. ;)


    Das klingt für einen Anfänger vielleicht toll, weil er nicht weiß, was das ist. Mit mehrfacher Vererbung, Speicherzugriff und Operatorüberladung begibst du dich aber auf Glatteis. Und wenn du nicht weißt, was du tust, geht das sehr schnell in die Hose. Auch bei vermeintlichen Profis, wie uns Sicherheitslücken durch Überlaufe fast täglich eindrucksvoll beweisen.

    @TheUser
    Jetzt würde mich ja schon mal interessieren, was du für Software schreibst, wenn es da auf das letzte Quäntchen CPU-Leitung ankommt.

  • @TheUser
    Jetzt würde mich ja schon mal interessieren, was du für Software schreibst, wenn es da auf das letzte Quäntchen CPU-Leitung ankommt.

    Ich beantworte mal die Frage für Usi aus meiner Sicht.
    Ich selbst nehme derzeit an einer Software Challenge teil, wo es zur Berechnung eines Zuges eine maximale Zeit gibt, die man einhalten muss, da man sonst verloren hat.
    In diesem Fall muss man schon ziemlich viel berechnen, so dass es oft ziemlich eng wird und da gefällt mir C++ einfach besser.

    Btw. kann man auch Speicherlecks etc. in Java erzeugen, das ist nicht wirklich schwerer :)

  • Ich beantworte mal die Frage für Usi aus meiner Sicht.
    Ich selbst nehme derzeit an einer Software Challenge teil, wo es zur Berechnung eines Zuges eine maximale Zeit gibt, die man einhalten muss, da man sonst verloren hat.
    In diesem Fall muss man schon ziemlich viel berechnen, so dass es oft ziemlich eng wird und da gefällt mir C++ einfach besser.


    Naja, aber ob sich da gleich ein Anfänger ran wagt? Und mit normaler Software-Entwicklung hat das wohl eher weniger zu tun :p

    Btw. kann man auch Speicherlecks etc. in Java erzeugen, das ist nicht wirklich schwerer :)


    Richtig, gar keine Frage. Aber du darfst immer nur auf den Speicher zugreifen, den du auch selbst reserviert hast. Und Sicherheitslücken durch Speicherüberläufe sind damit weitestgehend ausgeschlossen.

  • In Java gibt es Speicherüberläufe durch gewisse Datenstrukturen, weil sich die Sachen eben nicht gezielt löschen lassen, ein blödes Objekt blockiert dann das Löschen, obwohl man das garnicht mehr braucht. In C++ würdest du dann einen anderen Zeigertypen nehmen und fertig. Achso: Ich hab auf diese blöden Wörter erstmal gezielt verzichtet, aber ihr wollt es ja wissen. ;)

  • In Java gibt es Speicherüberläufe durch gewisse Datenstrukturen, weil sich die Sachen eben nicht gezielt löschen lassen, ein blödes Objekt blockiert dann das Löschen, obwohl man das garnicht mehr braucht. In C++ würdest du dann einen anderen Zeigertypen nehmen und fertig. Achso: Ich hab auf diese blöden Wörter erstmal gezielt verzichtet, aber ihr wollt es ja wissen. ;)


    Das setzt voraus, dass du die Speicherlecks selbst auch alle findest. Und gerade die, die der Garbage Collector nicht findet, sind natürlich besonders leicht zu erkennen...

    Und eine Beantwortung der Frage

    @TheUser
    Jetzt würde mich ja schon mal interessieren, was du für Software schreibst, wenn es da auf das letzte Quäntchen CPU-Leitung ankommt.


    steht immer noch aus...

  • Ähhm nein, ich habe das bereits beantwortet:
    Java-Software belastet das Gesamtsystem viel stärker. Du hast von 2millisekunden statt 1 millisekunde geredet, was glaubst du wie das andere Programme bremst?

  • Ok, same procedure wie im anderen Thread:
    Eine weitere Diskussion mit dir ist zwecklos. Du scheinst dich auf die Themen Linux und C++ eingeschossen zu haben und akzeptierst keinerlei andere Meinungen. Auf Argumente und Fragen reagierst du nicht, sondern ziehst zweifelhafte Belege (sry, aber die Ackermann-Fkt hat mal sowas von wenig mit realer Anwendungsentwicklung zu tun) zur Untermauerung deiner "Argumente" heran.
    Während deine Diskussionspartner die von dir favorisierte Lösung nicht gleich von vorn herein ausschließen, sondern lediglich aufführen, dass diese nicht allen Fällen das allein selig machende sind, akzeptierst du aber auch überhaupt gar keine Argumente.

    Ich hoffe, du argumentierst in deinen Deutsch-Aufsätzen etwas differenzierter...