Warum wird C mehr benutzt als C++?



  • ;fricky schrieb:

    volkard schrieb:

    Kein Bange, die hätten das auch in C vergeigt.

    das kann man nicht verallgemeinern. pc()'s erfahrung kann ich insofern bestätigen, als dass ich auch einige vollkommen vergurkte C++ projekte gesehen habe, aber noch nie C-programme, die schon im kern dermaßen kaputt waren, dass es kaum rettung gab. konkret: zwei hatten speicherhunger und kopierorgien beliebter c++-konstrukte unterschätzt (embedded system), ein anderer hat mit kreuz-und-quer mehrfachvererbung im generalisierungswahn ein unwartbares chaos geschaffen. wenn du sagst, dass das alles c++anfänger waren, dann hast du vieleicht recht, aber wie oft muss einer mit c++ auf die nase fliegen, um nicht mehr als anfänger zu gelten?
    🙂

    Er kann tausendmal auf die Nase fliegen und nicht "Effektiv C++ programmieren" oder ein anderes gutes C++-Buch lesen und hundert Jahre lang C++-Anfänger bleiben.
    Das scheint mir gerade bei den embedded-Programmierern auch sehr üblich zu sein, daß man sich für den C-Gott hält, und andere Sprachen kraft Göttlichkeit zu beherrschen wähnt. Dir nehme ich aber nichmal mehr ab, daß Du gut in C bist.

    Und wenn der Bauer nicht schwimmen kann, ist die Badehose dran schuld.



  • volkard schrieb:

    Er kann tausendmal auf die Nase fliegen und nicht "Effektiv C++ programmieren" oder ein anderes gutes C++-Buch lesen und hundert Jahre lang C++-Anfänger bleiben.

    ja, ich befürchte auch, dass es ohne viel gute literatur garnicht möglich ist, dem c++ anfängertum zu entfleuchen. aber man muss das gelesene auch in der praxis sinnvoll anwenden können, was auf c++ bezogen scheinbar eine grosse hürde ist. erst wenn das einigermassen klappt, lässt man das embryonale stadium so langsam hinter sich.

    volkard schrieb:

    Das scheint mir gerade bei den embedded-Programmierern auch sehr üblich zu sein, daß man sich für den C-Gott hält, und andere Sprachen kraft Göttlichkeit zu beherrschen wähnt.

    nee, ganz im gegenteil. die embedded-leute sind eigentlich grösstenteils sehr empfänglich für kritik, was ihre programmierkünste angeht. sie lernen gern voneinander und sind sehr hilfsbereit, wenn z.b. mal einer nicht weiterkommt oder wissenslücken hat. vielleicht liegts daran, dass sie für ihr selbstwertgefühl nicht die tatsache brauchen, ein toller coder zu sein, sondern weil programmiererei nur ein teil des jobs ist. je weniger code einer schreiben muss, um sein ziel zu erreichen und je einfacher der code wird, desto mehr freut ihn das. wenn er dabei noch hilfe bekommt - umso besser.

    volkard schrieb:

    Dir nehme ich aber nichmal mehr ab, daß Du gut in C bist.

    stimmt ja auch. ich hab' schon mehr als einmal extremen mist programmiert, bei dem ich mich am nächsten tag gefragt habe, wie das überhaupt funktionieren konnte.
    🙂



  • ;fricky schrieb:

    volkard schrieb:

    Er kann tausendmal auf die Nase fliegen und nicht "Effektiv C++ programmieren" oder ein anderes gutes C++-Buch lesen und hundert Jahre lang C++-Anfänger bleiben.

    ja, ich befürchte auch, dass es ohne viel gute literatur garnicht möglich ist, dem c++ anfängertum zu entfleuchen. aber man muss das gelesene auch in der praxis sinnvoll anwenden können, was auf c++ bezogen scheinbar eine grosse hürde ist. erst wenn das einigermassen klappt, lässt man das embryonale stadium so langsam hinter sich.

    Das erinnert mich an die Mathematik. Fehlgeleitete berechnen mit ihr auch viel Mist. Aber ob das ein Grund ist, immer beim Schätzen zu bleiben?



  • ;fricky schrieb:

    volkard schrieb:

    Das scheint mir gerade bei den embedded-Programmierern auch sehr üblich zu sein, daß man sich für den C-Gott hält, und andere Sprachen kraft Göttlichkeit zu beherrschen wähnt.

    nee, ganz im gegenteil. die embedded-leute sind eigentlich grösstenteils sehr empfänglich für kritik, was ihre programmierkünste angeht.

    ..., wie du immer wieder zeigst, du vorbild an kritikempfänglichkeit und einsicht.



  • volkard schrieb:

    ;fricky schrieb:

    volkard schrieb:

    Er kann tausendmal auf die Nase fliegen und nicht "Effektiv C++ programmieren" oder ein anderes gutes C++-Buch lesen und hundert Jahre lang C++-Anfänger bleiben.

    ja, ich befürchte auch, dass es ohne viel gute literatur garnicht möglich ist, dem c++ anfängertum zu entfleuchen. aber man muss das gelesene auch in der praxis sinnvoll anwenden können, was auf c++ bezogen scheinbar eine grosse hürde ist. erst wenn das einigermassen klappt, lässt man das embryonale stadium so langsam hinter sich.

    Das erinnert mich an die Mathematik. Fehlgeleitete berechnen mit ihr auch viel Mist. Aber ob das ein Grund ist, immer beim Schätzen zu bleiben?

    naja, das ist wohl bei allen nicht-trivialen gebilden so: grundlagen lernen - anwenden - fehler machen - verstehen - weiterlernen- anwenden - fehler machen - noch mehr verstehen - usw...
    das trifft eigentlich auf alle programmiersprachen zu, aber ich behaupte mal, dass diese kette bei c++ unverhältnismässig lang ist. man bedenke dabei auch, dass c++ keine wissenschaft ist, bei der es um erkenntnisgewinn geht (wie in der mathematik z.b. die du eben erwähnt hast), sondern eine programmiersprache. und programmiersprachen sollten doch eingentlich werkzeuge sein, also ein möglichst einfach zu handhabendes bindeglied zwischen mensch und computer.

    volkard schrieb:

    ..., wie du immer wieder zeigst, du vorbild an kritikempfänglichkeit und einsicht.

    wie meinste denn das?
    🙂



  • Mathematik ist bei Dir kein Werkzeug!, sondern eine Wissenschaft, bei der es im Gegensatz zu Werkzeugen wie Programmiersprachen angebracht ist, sich einzuarbeiten. Aha.

    Dabei besteht die Einarbeitung in die Mathematik (wie bei allen nichttrivialen Sachen) aber nur in Versuch-und-Irrtum und gelegentlichem weiterlernen, wenn das Anwenden nicht so klappt. Aha.



  • Entschuldigt bitte, wenn ich mich hier als Nicht-C-oder-C++-Profi einbringe.
    Aber sollte es nicht Aufgabe einer Programmiersprache sein, einen für Menschen normal fast unleserlichen Maschinencode, möglichst einfach und verständlich zu machen, um somit funktionierende Programme zu schreiben und später auch wieder verwenden zu können. Hier spielt Objektorientiertheit wohl auch eine große und wichtige Rolle. In Performance scheinen sich rein theoretisch beide Sprachen nicht viel zu nehmen.

    Kann es nicht sein, dass C++ eine gut gemeinte Verbesserung ist, die vllt. nicht optimal und nur halbherzig umgesetzt ist? Zumindest scheint mir das so und hat mich eher dazu bewogen C dazuzulernen.



  • Kann es nicht sein, dass C++ eine gut gemeinte Verbesserung ist, die vllt. nicht optimal und nur halbherzig umgesetzt ist? Zumindest scheint mir das so und hat mich eher dazu bewogen C dazuzulernen.

    🙄 🙄 🙄 🙄 🙄 🙄



  • ahojnnes schrieb:

    Kann es nicht sein, dass C++ eine gut gemeinte Verbesserung ist, die vllt. nicht optimal und nur halbherzig umgesetzt ist?

    Eugentlich nicht. C++ geht konsequente Wege bis weit über das hinaus, was sich Java-Sprachen trauen.

    ahojnnes schrieb:

    Zumindest scheint mir das so und hat mich eher dazu bewogen C dazuzulernen.

    Warum eigentlich? Hast Du Dir die Sprachen eingehend angeschaut, oder hast Du auf Idioten wie fricky gehört?



  • volkard schrieb:

    Mathematik ist bei Dir kein Werkzeug!

    hab letztens mal sowas gelesen wie: 'mathematik versucht, möglichst viele nicht-triviale aussagen über irgendwelche objekte und deren beziehungen zueinander zu gewinnen.' von daher ist sie schwerpunktmässig kein werkzeug. dass man teile davon auch als werkzeuge gebrauchen kann, tut der tatsache keinen abbruch, dass mathe hauptsächlich 'ne wissenschaft ist.

    ahojnnes schrieb:

    Kann es nicht sein, dass C++ eine gut gemeinte Verbesserung ist, die vllt. nicht optimal und nur halbherzig umgesetzt ist?

    das kommt hin, trifft es sogar ziemlich gut.
    🙂



  • Wie bei allen Wollmilcheierlegenden-Säuen ist auch C++ dadurch das alles möglich ist auch, im Vergleich zu anderen Programmiersprachen, extrem schwer zu beherrschen. Wie sieht es mit Objective-C aus, ist dort Erweiterung auf OOP in eurem Sinne „besser“ gelungen? Mal davon abgesehen das OOP nur in ganz wenigen großen Projekten wirklich Sinn macht.



  • _jsb schrieb:

    Wie bei allen Wollmilcheierlegenden-Säuen ist auch C++ dadurch das alles möglich ist auch, im Vergleich zu anderen Programmiersprachen, extrem schwer zu beherrschen.

    Was ist dieses "alles möglich"? C++ kann nichtmal wirklich viel (wenn man sich vom Vergleich mit C löst) auch wenn Sprachüberladung, Templatemetaokkultismus und die ganzen shared-auto-yetanother-pointer etc. etwas anderes suggerieren wollen, und das was es kann ist historisch drangeschweissschraubklebt.

    _jsb schrieb:

    Wie sieht es mit Objective-C aus, ist dort Erweiterung auf OOP in eurem Sinne „besser“ gelungen?

    "Besser" ist subjektiv, aber zumindest war man dort konsequent. Ob das heute noch so ist, da bin ich mir nicht sicher.



  • Warum versteift ihr euch so darauf, daß C++ nur eine OOP-Erweiterung ist.
    C++ ist eine Multi-Paradigmen-Programmiersprache, d.h. es unterstützt u.a OOP (mittels Klassen, Polymorphie, etc.), Funktionale Programmierung (besonders in C++0x), Wiederverwendbarkeit (z.B. mittels templates), Streaming und diverse andere Methoden.
    Eine der gängigsten C++-Mittel, nämlich die Operatorüberladung von '>>' und '<<' hat nichts mit OOP zu tun.

    Und gute C++-Programme lassen sich erst dann schreiben, wenn man je nach Aufgabenstellung die richtige Methode verwendet (daran scheitern generell viele Programmierer, egal welche Programmiersprache sie verwenden !!!).

    Ich bin jedenfalls froh, daß ich bei C nicht hängengeblieben bin, sondern auch andere Programmierparadigmen kennengelernt habe (damit meine ich jetzt auch andere Sprachen als C++, insbesondere die Funktionalen PS, wie z.B. Miranda und Gofer - die heute bekannteste Sprache ist wohl Haskell).

    Ein Ziel bei meiner ganzen Programmierung war und ist jedenfalls die Reduzierung von (unnötigem) Programmcode, und da habe ich mich oft über C geärgert.
    Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.

    In neu codiertem C++ wäre dieses Programm sicherlich auch kürzer (da es die vorhandenen Typen aus der STL verwenden könnte) und man den Hauptcode auf die Umsetzung der Algorithmen beschränken könnte.

    Mir wäre es auch lieber, wenn nur die Profis mit C++ programmieren würden und nicht immer wieder versucht wird C-Code mit einem C++ Compiler zum Laufen zu bringen -)



  • Was ist dieses "alles möglich"?

    Mit "alles" möglich bezog ich mich auf die Möglichkeit sowohl prozedural, objektorientiert und oder auch generetisch programmieren zu können, das deckt für mich schon ziemlich viel von dem ab was eine imperative Programmiersprache können muss.

    Mir ist allerdings auch noch keine Programmiersprache unter die Finger gekommen, bei der man so viel "falsch" machen kann, vom Programmdesign mal abgesehen, wie bei C++.

    Ich denke das Objective-C, durch z.B. IPhone-Apps, einiges an Zulauf für sich verzeichen wird und bin mal auf die Entwicklung gespannt. Vielleicht ist das ja wirklich mal eine würdige OOP-Erweiterung für C.



  • Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.

    Ich denke es lässt sich nicht pauschal sagen ob mit anderen Programierpradigmen weniger oder auch leichter zu versteheneder Quellcode entsteht.
    Wenn Jemand alle Datenstrukturen und Algorithmen selbst implementiert anstatt auf bewährte Bibliotheken zurückzugreifen kann man das nicht C im allgemeinen in die Schuhe schieben. Dadurch das C so schlank gehalten wurde ist es relativ einfach zu lernen und auch auf fast jeder Plattform verfügbar und somit auch immer noch populär. Das es nicht sinnvoll ist alles in C zu machen versteht sich von selbst, unsere Welt besteht ja auch nicht nur aus guter Handarbeit 😉



  • _jsb schrieb:

    Ich denke das Objective-C, durch z.B. IPhone-Apps, einiges an Zulauf für sich verzeichen wird und bin mal auf die Entwicklung gespannt. Vielleicht ist das ja wirklich mal eine würdige OOP-Erweiterung für C.

    Yep, hat mir gefallen, was ich da gesehen habe und gibt's auch als Objective Pascal. Man hat nicht versucht, OOP in eine C-like- Syntax zu pressen, sondern ganz klar einen Extender drangebaut. Einzig ärgerlich, daß ich nichts für meine Controller gefunden habe.

    _jsb schrieb:

    ... Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). ...

    Ich denke es lässt sich nicht pauschal sagen ob mit anderen Programierpradigmen weniger oder auch leichter zu versteheneder Quellcode entsteht ... Dadurch das C so schlank gehalten wurde ist es relativ einfach zu lernen und auch auf fast jeder Plattform verfügbar und somit auch immer noch populär. Das es nicht sinnvoll ist alles in C zu machen ... 😉

    Wenn das Konzept blöd ist, hilft keine Programmiersprache oder Paradigma. Vielleicht war auch einfach keine Zeit oder Geld mehr für's Refactoring drin.

    Wenn man's richtig anfängt, kriegt man auch eine GUI in Assembler hin (sh. GEOS) - ich wür's mir nicht antun.

    Was bei dem obig zitierten Fallbeispiel los war, ist leicht zu erklären: Die haben eine firmeneigene Vektorbibliothek zugelinkt, ohne zu beachten, daß nur orthogonale Berechnungen stattfinden werden, was dazu führt, daß weitgehend mit 0ern gefüllte Matrizen mulipliziert werden, während ich nur mit den interessanten Vektorkomponenten hantiert habe. Daß mein Code "nur" zehnmal so schnell ist, schulde ich dem Umstand, daß ich portabilitätshalber nicht RAM- basierend arbeiten wollte, sondern Filebasierend.

    Es gibt keinen Maßanzug von der Stange, die Code- Wiederverwerterei führt oft zu grotesken Ergebnissen. Daß durch Konzepte wie die STL dies dem C++- Programmierer näher liegt mag durchaus zu schlechten Ergebnissen und Ruf der Sprache beitragen, ist aber sicher auch in C möglich.

    Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
    Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.

    Ja, so lieben wir unsere C++ Profis, die gelebte Reklame für die Features einer Sprache. Aber eigentlich werden Trolle hier eher gekickt ... oder? 😃



  • pointercrash() schrieb:

    Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
    Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.

    Ja, so lieben wir unsere C++ Profis, die gelebte Reklame für die Features einer Sprache. Aber eigentlich werden Trolle hier eher gekickt ... oder? 😃

    Zerst generalisiert hat die C++-Bashing-Fraktion, die allen C++-Programmierern unterstellt, nur Mist und lahme Programme zu bauen, oder? Und daß fricky nach Kosenamen bettelt, da bin ich einfach zu weichherzig und gebe ihm gelegentlich welche.
    Außerdem steige ich immer erst ein, nachdem irgendwelche Banausen völlig unhaltbare Gerüchte über C++ verbreiten, und eine an sich feine Sprache schlechtreden, ohne davon Ahnung zu haben.



  • pointercrash() schrieb:

    Daß durch Konzepte wie die STL dies dem C++- Programmierer näher liegt mag durchaus zu schlechten Ergebnissen und Ruf der Sprache beitragen, ist aber sicher auch in C möglich.

    Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
    Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.

    👍



  • pointercrash() schrieb:

    Es gibt keinen Maßanzug von der Stange, die Code- Wiederverwerterei führt oft zu grotesken Ergebnissen.

    In C nennt sich das "Plattformunabhängerei". 🙂



  • Th69 schrieb:

    Ein Ziel bei meiner ganzen Programmierung war und ist jedenfalls die Reduzierung von (unnötigem) Programmcode, und da habe ich mich oft über C geärgert.
    Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.

    warum eigentlich? für allerwelts-datenstrukturen wie listen usw. gibt auch für C genügend fertige und getestete implementationen. C wird zu unrecht vorgeworfen, dass man jedesmal 'das rad neu erfinden' muss.

    pointercrash() schrieb:

    Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
    Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.

    naja, es ist nun mal nicht leicht, mitzukriegen, wie etwas, in das man viel zeit und kraft investiert und dem man eine grosse zukunft vorhergesagt hat, so langsam den bach runtergeht und immer mehr an akzeptanz verliert. wenn dann noch welche darauf rumhacken, passieren schon mal, vor lauter frust, ein paar aussetzer und man pfeift auf jede sachlichkeit. so'n verhalten ist sogar ziemlich normal und menschlich.
    🙂


Anmelden zum Antworten