new, arrays statt vector, char* statt string - warum?



  • Hallo! Täglich sieht man hier Fragen und Codeausschnitte von Leuten, die vorgeben C++ zu programmieren, aber im Prinzip nur C-Code in C++-Syntax schreiben. Warum ist das wohl so? Wie kommen die vielen Leute darauf, die Standard-Bibliothek einfach komplett zu ignorieren?

    Lustigerweise werden C-funktionen (z. b. strcpy, strcmp, malloc, etc.) meistens ohne weiteres hinterfragen eingesetzt, während die C++-Äquivalente oft kategorisch abgelehnt werden. Wenn man nach den Gründen fragt, kommt selten eine nachvollziehbare Begründung.
    Anscheinend schreibt man lieber 10 Zeilen umständlichen, fehlerhaften und hässlichen Code mit new (noch besser: malloc), strcpy und strcmp, inklusive off-by-one Fehlern und 'vergessenem' delete, als 2 Zeilen einfach und fehlerfrei mit std::string.

    Ich glaube ja, dass das in erster Linie an inkompetenten und ignoranten Lehrern liegt, die ihren Unterricht mit Lehrmaterialien aus dem Mittelalter abhalten und aus ihren festgefahrenen Ansichten nicht herauszuholen sind.

    Habt ihr Theorien zu den Ursachen?



  • phänomenal schrieb:

    Hallo! Täglich sieht man hier Fragen und Codeausschnitte von Leuten, die vorgeben C++ zu programmieren, aber im Prinzip nur C-Code in C++-Syntax schreiben. Warum ist das wohl so? Wie kommen die vielen Leute darauf, die Standard-Bibliothek einfach komplett zu ignorieren?

    Lustigerweise werden C-funktionen (z. b. strcpy, strcmp, malloc, etc.) meistens ohne weiteres hinterfragen eingesetzt, während die C++-Äquivalente oft kategorisch abgelehnt werden. Wenn man nach den Gründen fragt, kommt selten eine nachvollziehbare Begründung.
    Anscheinend schreibt man lieber 10 Zeilen umständlichen, fehlerhaften und hässlichen Code mit new (noch besser: malloc), strcpy und strcmp, inklusive off-by-one Fehlern und 'vergessenem' delete, als 2 Zeilen einfach und fehlerfrei mit std::string.

    Ich glaube ja, dass das in erster Linie an inkompetenten und ignoranten Lehrern liegt, die ihren Unterricht mit Lehrmaterialien aus dem Mittelalter abhalten und aus ihren festgefahrenen Ansichten nicht herauszuholen sind.

    Habt ihr Theorien zu den Ursachen?

    Oft sind es (leider) die Lehrer, die irgendwann mal C gelernt haben und dann dazu verdonnert wurden, C++ zu unterrichten. Dann wird da eben so ein komisches "C in Klassen" draus.
    Auch einige Lehrbücher sind eher mäßig. Ich habe hier z.B. einen dicken Schinken von Data Becker rumliegen (C++, Das Grundlagenbuch von 2001) in dem die Header noch in der Form

    #include <iostream.h>
    

    eingebunden werden.
    Die STL wird nur im Anhang erwähnt. Templatas? Fehlanzeige.
    Dafür werden C-Arrays bis zum Erbrechen durchgekaut. Auch die ganzen C-Stringfunktionen. Ulkigerweise wird für die Ausgabe cout benutzt (nicht jedoch, wenn die Ausgabe formatiert erfolgen soll).
    Naja, und wenn man es nicht besser weis, und dann so ein Buch kauft (was ja auch Lehrer erwischen kann), dann lernt man eben Schrott.



  • Meistens haben zwei Seiten schuld: die Lehrer aber auch die Schüler. Wobei ich Schüler jetzt nicht im Sinne von "Schüler in der allgemein bildenden Schule" rede. Nein, auch Studenten, Arbeitnehmer und auch Hobby-Programmierer. Warum? Weil die meisten zu geizig sind, aktuelle C++-Bücher zu kaufen. Ich kenner Leute, die sind so geizig, die kaufen sich garkeine Bücher... die schwören auf schlecht gemachte Online-Tutorials, die seit 10 Jahren im Web rumgammeln.

    Dann braucht man sich nicht über schlechtes Wissen zu wundern, wenn man nicht in Wissen investiert!

    Die einzigen denen ich keine Selbstschuld zuweisen kann, sind die, die in ein aktuelles Buch investiert haben, aber leider (trotzdem) zu einem schlechten Buchtitel gegriffen haben. Hier kann man einem C++-Unwissenden keine Schuld geben, um ein Buch zu beurteilen, ob es gutes C++-Knowhow vermittelt.

    Aber es gibt auch genug Forumsmitglieder, die schlechte Bücher empfehlen... kommt auch noch dazu.



  • Tachyon schrieb:

    C++, Das Grundlagenbuch von 2001

    Bei einer kurzen Recherche habe ich quasi nur Lobeshymnen auf das Buch gefunden. Das erklärt schon einiges. 🙂



  • phänomenal schrieb:

    Tachyon schrieb:

    C++, Das Grundlagenbuch von 2001

    Bei einer kurzen Recherche habe ich quasi nur Lobeshymnen auf das Buch gefunden. Das erklärt schon einiges. 🙂

    Jo, das ist eben ein Problem. Das Buch ist noch relativ aktuell (2001, da war C++ zumindest schon so lange standardisiert, dass man Ungereihmtheiten hätte glattziehen können). Man kauft es und denkt: "jetzt habe ich was fundiertes zum Lernen".
    Man weiss es als Anfänger eben nicht besser. Und gerade Lehrer an allgemeinbildenden Schulen sind ja selbst oft Anfänger, die erst mit dem vermittelten Unterricht wachsen. Wenn die sich dann solche Bücher kaufen...

    PS: Das Buch hat durchaus seine Stärken. Es werden sehr viele fundamentale Mechanismen wirklich sehr gut erklärt. Aber für C++ mit Sicht auf OOD/OOP ist es nur sehr mäßig.



  • Hmm.
    Also ich bin wohl so ein Fall, der mehr C-Programmiert als c++ und muss auch sagen dass es zum größten Teil am Lehrer liegt...
    Ich würde liebendgerne mehr mit c++ Befehlen machen, aber wenn man kA hat woher man die informationen zu den Sachen kriegt ist es auch wiederrum blöd.
    ja ich könnte hier im Forum fragen, aber dann denk ich mir auch, dass es doch nicht von nöten ist, wenn ich so Befehle wie strcmp() habe die genau das erfüllen, was ich will....
    Und neue Bücher... Ich habe hier 7 Bücher zum Thema C/C++ rumliegen und muss sagen, dass ich ehrlich gesagt kein Bock mehr habe noch mehr Geld für ein weiteres Buch auszugeben.
    Also wäre es auch ganz hilfreich wenn ihr mal Links posten könntet.

    mfg



  • Ich würde mich auf etwas festlegen und kein Mischmasch schreiben.

    http://www.cplusplus.com/

    Hier findest du alles, was dein Herz begehrt. (Fast alles).

    Das ist aber lediglich eine Referenz. Wenn du professionell C++ Programmieren willst, wirst du kaum darum rumkommen noch ein paar Bücher zu kaufen. 😉



  • ich glaube mal, das beste, das man dir empfehlen kann, ist bruce eckels Thinking in C++ (1 und 2) aus den jahren 2001 und 2003 - vorteil: ist gratis zum download und in englisch; nachteil: ist in englisch.
    geht auch auf unterschiede ein, was C code und was C++ code "ausmacht". damit hab ich selbst z.b. angefangen, richtig in C++ einzusteigen.



  • Thunaer schrieb:

    ...Ich habe hier 7 Bücher zum Thema C/C++ rumliegen...

    Na, das wäre ja schon eine ganze Menge ... was fehlt Dir denn noch, was diese Bcher nicht abdecken ?

    Gruß,

    Simon2.



  • Simon2 schrieb:

    ... was fehlt Dir denn noch, was diese Bcher nicht abdecken ?

    Vermutlich fehlt ihm ein Buch was sich wirklich mit C++ beschäftigt, und wo es nicht nur ein Stichwort auf dem Umschlag ist 😉



  • Simon2 schrieb:

    Thunaer schrieb:

    ...Ich habe hier 7 Bücher zum Thema C/C++ rumliegen...

    Na, das wäre ja schon eine ganze Menge ... was fehlt Dir denn noch, was diese Bcher nicht abdecken ?

    Na. Ein Freund von mir wollte C++ lernen und hat mitbekommen, dass ich ein wenig Ahnung habe. Also hat er sich ein Buch nach dem anderen gekauft, und zu mir geschleppt, um meine Meinung zu hören. Ich habe die Bücher aufgeschlagen, etwas à la „void main“ oder „#include <iostream.h>“ gelesen und habe den Kopf geschüttelt.

    Besagter Freund hat mindestens ein Dutzend Bücher bei mir angeschleppt, bis da ein halbwegs aktuelles, halbwegs gutes dabei war. Von daher: bei C++-Büchern kann man richtig Pech haben.



  • Konrad Rudolph schrieb:

    Besagter Freund hat mindestens ein Dutzend Bücher bei mir angeschleppt, bis da ein halbwegs aktuelles, halbwegs gutes dabei war. Von daher: bei C++-Büchern kann man richtig Pech haben.

    Lehrer nennen ihren Schülern auch meistens Bücher die sie zum Einlernen gekauft haben, oder die sie gut finden. Diese sind in der Regel aber nicht Aktuell...

    Das Problem ist auch das Lehrer scheinbar auch weitgehend resistent gegen Empfehlungen oder Angebote sind. Ich habe z.B. schon mehrfach Angeboten kostenfrei im Rahmen meiner Freizeit über Übungsaufgaben/Unterlagen etc. zu schauen und dann anzumerken was man besser machen könnte. Falls die Angebote überhaupt bis zu einem Lehrer vorgedrungen sind (meist war das Angebot an Schüler gerichtet um es weiterzuleiten), so sind sie alle untergegangen.

    cu André



  • asc schrieb:

    ...Vermutlich fehlt ihm ein Buch was sich wirklich mit C++ beschäftigt, und wo es nicht nur ein Stichwort auf dem Umschlag ist 😉

    Konrad Rudolph schrieb:

    ...bei C++-Büchern kann man richtig Pech haben.

    Meine Frage zielte auf deutlich Konkreteres: Wenn er etwas Konkretes benennen kann, was er vermisst (bzw. wo etwas unklar ist), kann man ihm hier helfen.
    ... und vielleicht können wir ihm hier helfen, aus den 7 Büchern das "brauchbarste" herauszufinden....

    Gruß,

    Simon2.



  • asc schrieb:

    ...Das Problem ist auch das Lehrer scheinbar auch weitgehend resistent gegen Empfehlungen oder Angebote sind...

    Stimmt.
    Ich denke, dass da 2 Faktoren zusammenkommen:
    1.) Allgemeine "Weiterbildungsfaulheit". Da will ich mich gar nicht ausschließen: Ich brenne nicht mehr in JEDEM Aspekt meiner Berufstätigkeit darauf, das Neueste vom Neusten zu lernen - das war zu Beginn meines Berufslebens noch anders.
    Und ich denke mal, dass es recht vielen Leuten so geht - auch mein Friseur fährt nicht auf 20 Weiterbildungskongresse im Jahr ....

    2.) Lehrer haben oftmals ein Selbstverständnis als "Wissenquelle in einem Umfeld von lauter Senken" und nicht selten halten ein solches Image sogar für lebensnotwendig. Das verbietet ihnen nahezu, Ratschläge von Außenstehenden (erst Recht vermittelt und erkennbar für Schüler) anzunehmen.

    Gruß,

    Simon2 (dessen Vater selbst Lehrer mit 0% von 1.) und 100% von 2.) ist) 😉



  • Simon2 schrieb:

    1.) Allgemeine "Weiterbildungsfaulheit"...

    Das scheint inzwischen fast überall eher die Regel als Ausnahme zu sein. Und teilweise verstehe ich es auch (O-Zitat eines Chefs: "...mich interessiert es nicht was du in deiner Freizeit machst..."). Und wenn man sich selbst weiterbildet wird das von Seiten der Chefs teilweise sehr negativ aufgefasst (Im Sinne: er könnte dann ja vielleicht überqualifiziert für den Posten sein).

    Wenn ich bedenke was ich in den letzten 4 Jahren an privaten Mitteln in meine Fortbildung gesteckt habe, muss ich sagen ich kenne nicht wenige Leute die das in ihrem Leben nicht selbst investieren. Und dann bekommt man ggf. auch noch Kritik von oben. Nee Danke, für eine solche Firma nie wieder (Wobei es bei mir nicht ein Einstellen der Weiterbildung, sondern ein Einstellung des Arbeitsverhältnis bei meiner aktuellen Firma ist)...

    Simon2 schrieb:

    2.) Lehrer haben oftmals ein Selbstverständnis als "Wissenquelle in einem Umfeld von lauter Senken" und nicht selten halten ein solches Image sogar für lebensnotwendig. Das verbietet ihnen nahezu, Ratschläge von Außenstehenden (erst Recht vermittelt und erkennbar für Schüler) anzunehmen.

    Wenn man das (eher schlechte) Image nimmt das Lehrer haben, frage ich mich ob dies noch gerechtfertigt ist.

    cu André



  • Naja ich bin immer noch der Meinung, das C++ lernen nicht einfach daraus besteht STL container zu verwenden etc. Und ddas wissen ab dieser ebene auszubauen... ich selber verwende die STL Container echt gern, aber ich will auch wissen was dahinter passiert bzw. was auf einer tieferen ebene passiert.

    Mal ab gesehen von den schlechte Büchern, sollte jeder wissen wie man in C speicher allokiert bearbeitet etc.

    Oft ist es gewohnheit , routine von frühr das man oft viel selber machen will. Ich verwende gern fertige bibliotheken , container etc. aber ich will auch wissen was dahinter geschieht:)



  • BorisDieKlinge schrieb:

    Mal ab gesehen von den schlechte Büchern, sollte jeder wissen wie man in C speicher allokiert bearbeitet etc.

    Weiss jeder JAVA-Programmierer, wie die JAVA-Collections im Hintergrund in C Speicher allokieren?

    Und selbst wenn man das wissen müssen sollte: Bestimmt nicht zu Anfang.

    Es aus Interesse wissen zu wollen ist eine andere Sache. Aber vorher muss ich wissen, wie ich es benutze. Ein Automechaniker wird schließlich auch nicht lernen, wie man einen Ottomotor baut, bevor er selbst einen Führerschein hat. (Wobei ich nicht weiss, ob Automechaniker tatsächlich zwangsweise einen Führerschein haben müssen)



  • BorisDieKlinge schrieb:

    Naja ich bin immer noch der Meinung, das C++ lernen nicht einfach daraus besteht STL container zu verwenden etc. Und ddas wissen ab dieser ebene auszubauen... ich selber verwende die STL Container echt gern, aber ich will auch wissen was dahinter passiert bzw. was auf einer tieferen ebene passiert.

    Mal ab gesehen von den schlechte Büchern, sollte jeder wissen wie man in C speicher allokiert bearbeitet etc.

    Oft ist es gewohnheit , routine von frühr das man oft viel selber machen will. Ich verwende gern fertige bibliotheken , container etc. aber ich will auch wissen was dahinter geschieht:)

    Ja?
    Also mich interessiert nicht die Bohne, wie die STL tut, was sie tut. Mal davon abgesehen, kann sie auf viele verschiedene Arten und Weisen tun, was sie tut.
    Ich benutze Bibliotheken, weil sie mir das Leben erleichtern. Wenn ich jedes Mal noch die kompletten Interna einer Bibliothek verstehen muss, geht das für mich irgendwie am Zweck vorbei. Und nicht selten habe ich erlebt, das Leute ihr Wissen über die Interna ausnutzen, um irgendwelchen Scheiss damit zusammen zuschreiben.
    Dich interessiert doch bestimmt auch nicht, wie printf Pixel auf den Bildschirm zaubert, oder wie malloc genau den Speicher allokiert, oder?

    Klar, sollte man Wissen, was ein Pointer ist, und wie man ihn benutzt. Sonst könnte man auch die STL vergessen, weil man Iteratoren nicht versteht. Man sollte auch die Basics verstanden haben. Aber es ist eine Sache, die Dinge verstanden zu haben. Eine andere Sache ist es, sie ständig zu benutzen. Entweder wider besseren Wissens (besonders schlimm) oder weil man es nicht besser weiß.

    Das Problem (das der Op auch angesprochen hatte) ist doch viel mehr, dass viele Leute die STL komplett liegen lassen, und dann irgendwas super umständliches für eigentlich banale Dinge zusammen schreiben. Oder noch schlimmer, dass die erweiterten Möglichkeiten die C++ gegenüber C bietet nur dazu benutzt werden, alten C Code in schicke Kleider zu packen.



  • BorisDieKlinge schrieb:

    ich selber verwende die STL Container echt gern, aber ich will auch wissen was dahinter passiert bzw. was auf einer tieferen ebene passiert.

    Man merkt nahezu allen deinen Beispielen auch deine C-Vorliebe an. Dennoch benötigt man keinerlei C-Kenntnisse. Die STL kann gänzlich mit C++ Mitteln umgesetzt werden, und man braucht dazu auch nicht zu wissen wie...

    BorisDieKlinge schrieb:

    Mal ab gesehen von den schlechte Büchern, sollte jeder wissen wie man in C speicher allokiert bearbeitet etc.

    ... unter C Speicher alloziert wird.

    Ein C++ Buch sollte auch C++ beibringen und nicht C. Wenn ich eine Anleitung für das Austauschen einer Grafikkarte schreibe, muss ich auch nicht erst schreiben wie ich eine Soundkarte zusammenbaue um dann über Umwege a) zur Grafikkarte und b) zu dem eigentlichen Umtausch zu kommen.

    cu André



  • Ja, wenn du aus eigenem Antrieb mehr wissen willst, als nötig ist, dann ist das ja deine persönliche Einstellung. Aber viele Bücher zwingen den C++-Anfänger dazu, sich mit Hintergrundwissen zu beschäftigen, obwohl ihn das nur daran hindert, C++ zu benutzen. Denn darum geht es ja ein einem Anfängerbuch: wie benutze ich C++?! Und nicht wie arbeitet ein Allokator auf Hardware-Ebene. DAS kann sich jeder später aneignen, wenn er will.

    Die wenigsten Java oder C# Programmierer wissen, was im Hintergrundpassiert. Sie wissen es auch nur abstrakt, weil sie mal ein paar Skizzen gesehen haben. Warum muß aber ein C++ler wissen, wie der Allokator arbeitet? Wenn er doch eh schon funktioniert?


Log in to reply