Mit welcher Sprache anfangen?



  • Boh, ey! Gibts hier keine Woche ohne Java vs. C++??? Liebe C++ Kollegen: bitte gewöhnt euch daran, niemals das Wort Java in irgendeinem Bezug zu C++ nehmen. Ruckzuck sind die Java-Freaks im Anmarsch.



  • Simon2! Niemand will eine Mauer bauen. 😃 Im ernst, wo steht das C++ keine GC nutzen kann. Es gibt ja GCs für C++, und wer sie nutzen will, soll das bitte auch tun. Niemand will eine Maue... ehm, niemand will GC verhindern. Weiterhin wird im C++2009 offiziell ein GC als Option reinkommen. (ist zwar noch nicht abgesegnet, wird aber schon schief gehen) Ähnlich wie in C++/CLI, kann man sich dann entscheiden, ob man GC nutzen will oder nicht.

    Dieses GC-Geheule unter C++ geht mir irgendwie auf den Senkel, weil niemand die Möglichkeit annimmt, und sich Hans Boehms GC runter lädt. Benutzt ihn doch, wenn ihr GC haben wollt. Gut, kommen wieder ein paar Schlauberger an, und haben an der Hans Boehmischen Implementierung rum zu nörgeln. Dann kann man ihnen auch nicht weiter helfen. Dann benutzt einfach eine andere Sprache (ich sage nicht welche, weil das gibt wieder Flamewar) und gut ist. 😃



  • Artchi schrieb:

    Boh, ey! Gibts hier keine Woche ohne Java vs. C++??? Liebe C++ Kollegen: bitte gewöhnt euch daran, niemals das Wort Java in irgendeinem Bezug zu C++ nehmen. Ruckzuck sind die Java-Freaks im Anmarsch.

    Und du giest noch schön Spiritus drauf 😉



  • Ohje der arme McKing wird keine der beiden Sprachen anfassen, wenn ihr so weiter macht.. 🙄

    <auchmalgernflamenmöchte> Wozu braucht C++ nen gc? es gibt doch den gcc </möchtegernflameende> 🤡



  • Ich plädiere dafür, das die Wörter Java und C++ zensiert werden, sobald sie in einem Posting auftauchen. 💡 ⚠ 😃



  • Artchi schrieb:

    Ich plädiere dafür, das die Wörter Java und C++ zensiert werden, sobald sie in einem Posting auftauchen. 💡 ⚠ 😃



  • Artchi schrieb:

    Simon2! Niemand will eine Mauer bauen. ...

    😕
    Ich glaube, zu diesen "XvsY"-Flamewars kommt es eher, weil Dinge mißverstanden werden ... und teilweise auch mißverstanden werden w/sollen.

    Ich habe überhaupt nicht über C++ oder Java gesprochen (und auch GC nur als Beispiel genommen).

    Ich wage halt nur zu bezweifeln, dass man heutzutage noch große Schwierigkeiten als Programmierer bekommt, wenn man das Programmieren ohne GC nicht gewohnt ist.
    Anders gesagt: Ist es wirklich noch wichtig, "Programmieren ohne GC" gelernt zu haben ?
    Bis vor einiger Zeit hätte ich das noch absolut bejaht ... aber inzwischen bin ich da zunehmend skeptischer.
    (Und das sage ich als jemand, der das so gelernt - und fast noch nie einen GC benutzt hat)

    Gruß,

    Simon2.



  • Simon2! Dann hast du mein Posting nicht verstanden. Ich habe dich doch in deiner Frage sogar bestärkt! Nein, ich habe dir sogar einen Lösungsweg gezeigt. tntnet hat sogar geschrieben, das er seine Objekte nicht mehr selber aufräumt, in dem er zwei andere Lösungen genannt hat.

    Lösungswege in C++, um seine Objekte nicht mehr selber aufzuräumen: 3.
    Wer da immer noch über eigenes verpflichtendes Objekt-Management motzt, ist blind.

    Also, um deine Frage noch mal zu beantworten: Nein, niemand muß heute lernen, selber Objekte aufzuräumen.

    Und das völlig Sprachübergreifend gesehen. 😉



  • Artchi schrieb:

    ...ich habe dir sogar einen Lösungsweg gezeigt...

    Ich hatte doch nichtmal ein "zu lösendes Problem".
    Und tntnet hat eben das Statement aufgestellt, das ich hinterfragte und dem Du widersprichst mit:

    Artchi schrieb:

    ...
    Also, um deine Frage noch mal zu beantworten: Nein, niemand muß heute lernen, selber Objekte aufzuräumen.
    Und das völlig Sprachübergreifend gesehen. 😉

    Dann ist doch alles gut, oder ? 🙂

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Ich wage halt nur zu bezweifeln, dass man heutzutage noch große Schwierigkeiten als Programmierer bekommt, wenn man das Programmieren ohne GC nicht gewohnt ist.

    ich glaube schon...



  • Artchi schrieb:

    Ich plädiere dafür, das die Wörter Java und C++ zensiert werden, sobald sie in einem Posting auftauchen. 💡 ⚠ 😃

    seconded!



  • tntnet schrieb:

    Und zum Schluß nochmals die Bitte: macht keinen Flame-war draus.

    Zu einem Flamewar gehören immer mehrere Leute und i.d.R. reagiere ich nur. Ich stelle vergleichende Aussagen von anderen Leuten in Frage oder sage dazu meine Meinung. Vielleicht solltest Du Dir also lieber selbst an die Nase fassen, wenn Du plötzlich derartige vergleichende Aussagen bringst. Wenn überhaupt, dann wärst DU der Auslöser des Flamewars. Wenn Du eine Meinung vertittst, dann musst Du auch damit rechnen, dass jemand darauf reagiert und die gegenteilige Meinung vertritt. Da bringt auch ein "Aber das soll jetzt kein Flamewar werden" nichts mehr. Glaubst Du, Du kannst durch so eine Aussage andere dazu bringen, eine Meinung einfach so stehen zu lassen, obwohl sie den Sachverhalt möglicherweise ganz anders sehen?

    BTW: Die Frage nach der Nutzung von "new" usw.. ist eigentlich keine Frage danach, von wo man kommt, sondern eher eine Frage danach, wann man sich C++ beigebracht hat. Guck Dir mal ältere C++ Bücher an. Die Art, C++ zu programmieren, hat sich über die Jahre hinweg massiv weiterentwickelt. ...durchaus in eine sehr interessante Richtung. Entsprechend kann man auch vergleichende Codestücke in der Javainsel oder so sehen: Die sind von Buchversion zu Buchversion einfach mitgezogen worden, ohne dass sie nochmal besonders beachtet oder verändert wurden. Und: In welcher Reihenfolge sich der Autor mit den beiden Sprachen beschäftigt hat, ist mir nicht auf Anhieb klar. Ich vermute eher, dass er C++ früher gemacht hat als Java. ...aber ok: Lassen wir das.



  • @Gregor: und ich soll Deine Kommentare unkommentiert lassen? Das kannst Du nicht erwarten. Wir sind hier schliesslich in einem Diskussionsforum.

    Ich versuche, meine Aussagen stets sachlich und ohne Seitenhiebe, wie z. B. "...umgekehrt stimmt das übrigens auch." zu formulieren (oh - das könnte ein Seitenhieb gewesen sein 😉 ).

    Daß Java-Programmierer ihre liebe Not damit haben, sich das new abzugewöhnen, ist meine persönliche Erfahrung. Das wollte ich hier einfach mal einwerfen. Ich glaube nicht, daß das unbedingt einen Flame-war auslösen muß.

    Wobei ich diesen Thread gar nicht so auffassen möchte. Hier kommt doch wieder einmal eine sachliche Diskussion rüber, die den originalen Frager, der sich über verschiedene Programmiersprachen informieren möchte, helfen sollte.

    Und nun wieder zum Flame-war. Oh sorry - ich meinte natürlich zum Thema.

    Was ich an C++ sehr schätze sind Destruktoren. Die gab es auch schon von anfang an. Daher ist die Verwendung von "new" ausserhalb von engen Grenzen (eine Klasse nämlich) in der Regel nicht notwendig. Das hat nichts damit zu tun, wann man C++ "sich beigebracht hat", bzw. gelernt hat (eigentlich komisch, daß man andere Dinge lernt und Programmieren bringt man sich bei 🤡 ),

    Bevor Templates in C++ einzug gehalten haben, habe ich mir 2 Makros geschrieben: DEFINE_ARRAY und DECLARE_ARRAY, welches typsichere dynamische Vektoren definiert haben. Das war so ca. 1992. Auch eine String-Klasse habe ich geschrieben. Von daher sehe ich es noch nicht mal so, daß sich die Programmierung in C++ so massiv verändert hat. Natürlich verwende ich heute std::vector und std::string. Aber das Grundprinzip ist gleich geblieben. Und auch das schätze ich an C++.

    Diese Konstanz der Sprachdefinition ist doch einfach Klasse. Programme, die vor 15 Jahren geschrieben wurden, kann man mit modernen C++-Compilern noch compilieren und ausführen. Und ich denke, daß wir die Programme, die wir heute schreiben auch in 15 Jahren noch verwenden können. Diese Konstanz müssen andere Programme erst mal beweisen. Da habe ich so meine Bedenken.

    Tntnet



  • Gregor schrieb:

    In welcher Reihenfolge sich der Autor mit den beiden Sprachen beschäftigt hat, ist mir nicht auf Anhieb klar. Ich vermute eher, dass er C++ früher gemacht hat als Java.

    ich kann mir auch gut vorstellen, das für oop-fans, die sich einst mit c++ herumgequält haben, java oder C# wie eine offenbarung sein muss 🙂



  • Also ich denke schon, dass es prinzipiell immer noch wichtig ist zumindest zu wissen wie Ressourcenverwaltung (also new/delete usw...) funktioniert. Vielleicht ändert sich das mal, aber im Moment finde ich nicht. Man kann übrigens auch in Java mit GC Memory Leaks erzeugen. Wenn man aber etwas darüber bescheid weiß kann man sowas evtl. vermeiden.
    Deshalb find ich es prinzipiell auch nie verkehrt wenn jemand z.B. mit C++ anfängt zu programmieren. Selbst wenn man dann später mal eine andere Sprache benutzen wird, wird das Wissen dass man sich mit C++ angeeignet hat, sicherlich nicht unnütz sein



  • ten schrieb:

    Gregor schrieb:

    In welcher Reihenfolge sich der Autor mit den beiden Sprachen beschäftigt hat, ist mir nicht auf Anhieb klar. Ich vermute eher, dass er C++ früher gemacht hat als Java.

    ich kann mir auch gut vorstellen, das für oop-fans, die sich einst mit c++ herumgequält haben, java oder C# wie eine offenbarung sein muss 🙂

    Also ich quäle mich mit C++ nicht herum. Ich quäle mich eher mit Java rum, da mir in Java so vieles fehlt, was ich in C++ zu schätzen gelernt habe. Java ist für mich persönlich keine Offenbarung sondern ein Rückschritt.

    Was immer wieder vergessen wird ist, daß es noch andere Resourcen ausser Speicher, die frei gegeben werden müssen, wie z. B. Locks, Transaktionen, Filehandles, temporäre Dateien usw. . All das kann ich automatisch im Destruktor der Klasse implementieren, welche dafür zuständig ist. Fehlt mir der Destruktor, wie in modernen Sprache, die GC verwenden, muß ich die Resourcen explizit frei geben.

    Tntnet



  • nep schrieb:

    ...
    Deshalb find ich es prinzipiell auch nie verkehrt wenn jemand z.B. mit C++ anfängt zu programmieren....

    Ich auch nicht.
    Aber es ist IMO auch kein Drama, mit Java anzufangen - bzw. inzwischen unterscheide ich zwischen Leuten, die schnell was auf die Beine stellen wollen/müssen und solchen, die sich lieber gründlich mit einem Thema beschäftigen wollen. Ersteren rate ich eher zu Java, letzteren zu C++. (allerdings sage ich Ersteren auch, dass sie das, was sie an Anfang sparen hinterher doppelt "nachzahlen" müssen).

    nep schrieb:

    ...
    ...wird das Wissen dass man sich mit C++ angeeignet hat, sicherlich nicht unnütz sein

    "Unnütz" sowieso nicht. Es ist auch nicht unnütz, was mein Kollege in Host-ASM und PL1 weiß ... aber es wird zunehmend zu Spartenwissen, das immer weniger Leute beherrschen müssen. Das wird bei uns nur noch in der Systemprogrammierung gebraucht - und das machen in unserer Firma vielleicht 10-20 von 600 Leuten. Von den Anderen programmieren der Großteil nur Java, ein kleinerer Mal Java, mal Cobol und vielleicht 80 Leute C oder C++.
    D.h. nur ein 6tel unserer Programmierer haben jemals Erfahrung mit manueller Ressourcenverwaltung gemacht (die "alten" Programmiersprachen wie Cobol haben das ja alles auch nicht) - und da sind beileibe nicht nur Programmiergurken dabei.

    EDIT: Hier war tntnet mit dem Argument schon schneller:
    Ach ja: GC wird IMO in beiden Richtungen überschätzt -

    tntnet schrieb:

    ...
    Was immer wieder vergessen wird ist, daß es noch andere Resourcen ausser Speicher, die frei gegeben werden müssen, wie z. B. Locks, Transaktionen, Filehandles, temporäre Dateien usw. ...

    D.h.
    - das müssen sie genauso machen (also nix mit "Mit GC kann nichts mehr passieren") aber auch:
    - Dadurch haben auch Java-und Cobol-Programmierer Erfahrung mit Ressourcenverwaltung (wenn auch nicht mit so schönen Sprachmitteln wie bei C++ 😉 ).

    Ich denke einfach, dass dieses Thema an Gewicht verlieren wird, weil einem immer mehr von OS, Runtime, ... abgenommen und es deswegen irgendwann nur noch von Leuten gebraucht wird, die sowas programmieren.

    Gruß,

    Simon2.

    P.S.: Mein "Host-ASM-Kollege" ist übrigens sehr gefragt mit seinem Spezialwissen und hat sehr lukrative Jobs - auch ein Argument, was man bei der Frage, ob man sich mit "alten Techniken" beschäftigt, mal durch den Kopf gehen lassen sollte.



  • tntnet schrieb:

    Was immer wieder vergessen wird ist, daß es noch andere Resourcen ausser Speicher, die frei gegeben werden müssen, wie z. B. Locks, Transaktionen, Filehandles, temporäre Dateien usw. . All das kann ich automatisch im Destruktor der Klasse implementieren, welche dafür zuständig ist. Fehlt mir der Destruktor, wie in modernen Sprache, die GC verwenden, muß ich die Resourcen explizit frei geben.

    das stimmt natürlich.
    ich hatte mal eine java-klasse gebastelt, die automatisch eine netzwerkverbindung aufmacht und sich anmeldet. kurz vor ende der objektlebenszeit musste noch was über's netz geschickt werden. eigentlich eine aufgabe für einen destruktor. ich hab' dann einfach 'finalize()' überschrieben (in einen try/catch block mit super.finalize(), wie sich das gehört) und das klappte problemlos. der einzige nachteil ist, dass man es nicht ganz exakt zeitlich steuern kann (genau jetzt musst du dich abmelden).
    🙂



  • Ihr mit eueren Destructoren...

    Was immer wieder vergessen wird ist, daß es noch andere Resourcen ausser Speicher, die frei gegeben werden müssen, wie z. B. Locks, Transaktionen, Filehandles, temporäre Dateien usw. . All das kann ich automatisch im Destruktor der Klasse implementieren, welche dafür zuständig ist. Fehlt mir der Destruktor, wie in modernen Sprache, die GC verwenden, muß ich die Resourcen explizit frei geben.

    In C++ musst du externe Ressourcen auch explizit freigeben, seit wann macht das der Destructor automatisch? Du musst auch in C++ einen Destruktor definieren, in dem steht: Gibt mir die Ressource frei. Das ist in Java nur an einer anderen Stelle.

    Du hast die Möglichkeiten: a) finallize() und b) eine Methode dispose() oder so zu definieren. Ein Destruktor ist auch nichts weiter als eine Methode, die aber halt implizit aufgerufen wird, wenn du das Objekt zerstörst.

    Ein GC soll einem nur dir Speicherverwaltung von spracheigenen Ressourcen abnehmen, nicht mehr und nicht weniger.

    das stimmt natürlich.
    ich hatte mal eine java-klasse gebastelt, die automatisch eine netzwerkverbindung aufmacht und sich anmeldet. kurz vor ende der objektlebenszeit musste noch was über's netz geschickt werden. eigentlich eine aufgabe für einen destruktor. ich hab' dann einfach 'finalize()' überschrieben (in einen try/catch block mit super.finalize(), wie sich das gehört) und das klappte problemlos. der einzige nachteil ist, dass man es nicht ganz exakt zeitlich steuern kann (genau jetzt musst du dich abmelden).

    Auf die Idee eine Methode disconnect() zu definieren bist du nicht gekommen?

    Daß Java-Programmierer ihre liebe Not damit haben, sich das new abzugewöhnen, ist meine persönliche Erfahrung. Das wollte ich hier einfach mal einwerfen. Ich glaube nicht, daß das unbedingt einen Flame-war auslösen muß.

    Das ist ja auch nachvollziehbar, alle Objekte in Java werden mit new erstellt, und ist auch für die Sprache Java o.k.

    inzwischen unterscheide ich zwischen Leuten, die schnell was auf die Beine stellen wollen/müssen und solchen, die sich lieber gründlich mit einem Thema beschäftigen wollen. Ersteren rate ich eher zu Java, letzteren zu C++. (allerdings sage ich Ersteren auch, dass sie das, was sie an Anfang sparen hinterher doppelt "nachzahlen" müssen).

    Also das ist ja Blödsinn hoch 3. Auch in C++ kann man "mal schnell was auf die Beine stellen" und dann hinterher Designfehler ausbügeln. Hast du vor 10 Jahren auch Leuten geraten in Assembler zu programmieren, weil man in Asm ja so viel effezientere Programme schreiben kann?



  • DEvent schrieb:

    das stimmt natürlich.
    ich hatte mal eine java-klasse gebastelt, die automatisch eine netzwerkverbindung aufmacht und sich anmeldet. kurz vor ende der objektlebenszeit musste noch was über's netz geschickt werden. eigentlich eine aufgabe für einen destruktor. ich hab' dann einfach 'finalize()' überschrieben (in einen try/catch block mit super.finalize(), wie sich das gehört) und das klappte problemlos. der einzige nachteil ist, dass man es nicht ganz exakt zeitlich steuern kann (genau jetzt musst du dich abmelden).

    Auf die Idee eine Methode disconnect() zu definieren bist du nicht gekommen?

    nö, das wollte ich nicht.
    das objekt sollte alles selbständig machen (es hat dafür auch einen eigenen thread), verbindung aufbauen, daten in eine queue schieben...und wenn es fertig ist, sich abmelden und tschüss.


Anmelden zum Antworten