Programiersprache für Anfänger



  • asc schrieb:

    Und das ist die typische Arroganz von jemanden der aus der C-Schiene kommt, und das konzept von C++ nicht verstanden hat.

    hatte ich wirklich ein bißchen hart formuliert.

    asc schrieb:

    Der Ursprungsposter hat nur einen Satz ohne Anwendungsfeld beschrieben, in der Hinsicht kann ich jedenfalls keine Empfehlung aussprechen.

    Goethe schrieb:

    Ein jeder, weil er spricht, glaubt auch über die Sprache sprechen zu können.

    er hat ein anwendungsgebiet beschrieben:
    er will was lernen.

    und da ist mir eingefallen, _wie_ lange ich die std-b von C++
    studieren mußte, um "erfolgserlebnisse" zu haben.
    ich würde heute anders anfangen.

    Wenn es um eine Sprache in der Anwendungsentwicklung, mit späterer Zielsetzung mittlere/große Projekte geht, würde ich wohl am ehesten zu Java oder C# tendieren. Bei kleinen Anwendungen gehen aber ebenso Scriptsprachen etc..

    es ist einfach nicht wahr, dass "scriptsprachen" nur mehr für
    kleine anwendungen was taugen.

    ANSI C ist genauso wenig schwer wie C++ oder Java

    aber man braucht ein wenig, bis man manches durchschaut hat,
    außer vielleicht bei java.



  • besseres Beispiel:

    &
    

    hat je nach Kontext wieviele verschiedene Bedeutungen in C++ ?

    1. logisches "und"
    2. Adreßoperator
    3. unabhängige Referenzen (int& a)
    4. pass-by-reference bei Argumentübergabe in Funktionsaufrufen
    5. Referenzrückgabe von Funktionen

    (habe ich noch welche vergessen?)

    das ist für Anfänger schlicht eine Menge zu lernen, und intuitiv erkennbar sind diese Bedeutungen, abgesehen vom logischen "und", auch nicht.



  • Ich habe die letzten drei Seiten mit Antworten nur überflogen, aber da bei so einer Grundsatzfrage überhaupt eine Diskussion von der Länge entstand, nehme ich an, dass es mal wieder darum geht, ob C/C++ gute Anfängersprachen sind.

    Ich sage, das kommt auf das Grundverständnis an. Wenn man weiß, dass jede Programmiersprache eine gewisse Grundlogik verfolgt (...naja fast jede...;), dann spricht überhaupt nichts dagegen, mit C/C++ anzufangen. Ich persönlich hab das auch versucht, bin aber zunächst daran gescheitert. Trotzdem war es ein Erfolg, weil ich das Gelernte auf andere Sprachen anwenden konnte, durch die ich dann kurze Zeit später einen besseren Zugang zu C/C++ aufbauen konnte.

    Mit Geduld geht alles. Und wenn man zunächst die vermeintlich kryptischen Aspekte der Sprache ignoriert, dann ist das genauso simpel wie Java. Übrigens hab ich mit Java größere Probleme gehabt als mit C, weil mich die etwas restriktivere Umgebung zunächst irritierte, aber das ist nur meine Erfahrung.

    Merke: C++ kocht auch nur mit Wasser.

    Bashar schrieb:

    asc schrieb:

    Wenn es einen heiligen Gral an Sprache gäbe, würde es eh nur noch diese auf dem Markt geben 😉

    Nein, dann würden die, die ihn gefunden haben, in einen heiligen Kreuzzug gegen die Anhänger anderer Sprachen ziehen. Moment mal ...

    Darüber hinaus würde jeder Prozess ewig leben...



  • u-ser_l schrieb:

    besseres Beispiel:

    &
    

    hat je nach Kontext wieviele verschiedene Bedeutungen in C++ ?

    Richtig! Je nach Kontext, und somit eindeutig. Es klingt hier bei einigen so, als würde die Syntax nur auf gut Glück funktionieren. Tut sie aber nicht. Sie funktioniert nach bestimmten Regeln. Sogar besser geregelt als in der deutschen Sprache, wo man erst beim Lesen und nicht beim Hören den Sinn erfährt ("Ein paar Schuhe" und "Ein Paar Schuhe").

    Wo ist also in C++ da das Problem, wenn selbst ein dummer Compiler versteht, was gemeint ist? Ein Mensch kann das noch besser verstehen, so wie du ja sogar selber gesagt hast: je nach Kontext.

    u-ser_l schrieb:

    das ist für Anfänger schlicht eine Menge zu lernen, und intuitiv erkennbar sind diese Bedeutungen, abgesehen vom logischen "und", auch nicht.

    Ehm, und? Er ist Anfänger. Ein Anfänger kann per Definition nicht so viel vom Fach, wie ein Fortgeschrittener oder ein Profi. Aaaaanfäääääängeeeer. Ja, das ist sowas wie ein Lehrling. Und eine Programmiersprache muß man lernen. Wer hätte das gedacht?! 😃 Es ist aber nicht so schwer zu lernen, wie es hier einige verkaufen wollen. Weiterhin muß man auch nicht jede Einzelheit von C++ wissen, um damit zu programmieren. Vieles kann man bei Bedarf nachschlagen oder auch nochmal nachschlagen. Es ist nichts geheimes, wo einem Informationen vorenthalten werden.
    Z.B. liefert einem der MS-Compiler immer Fehlercodes, und die kann man in der MSDN nachschlagen und bekommt sogar mögliche Lösungen spendiert. Darüber habe ich z.B. sehr viele Unverständlichkeiten verstanden... durch Fehler lernt man.



  • 3. unabhängige Referenzen (int& a)
    4. pass-by-reference bei Argumentübergabe in Funktionsaufrufen
    5. Referenzrückgabe von Funktionen

    Ahja, das sollten natürlich alles unterschiedliche Zeichen oder Schlüsselwörter sein, wär ja auch viel klarer.



  • Bulli schrieb:

    Yo, ich kann auch eine Gegenkritik schreiben. Jeder kann eine Kritik schreiben. Muß aber deshalb nichts heißen. 😉

    Ach ja? Dann mach mal!



  • tfa schrieb:

    Ach ja? Dann mach mal!

    Wie wäre es wenn du einfach das Netz bemühst. Für bislang jede Sprache mit der ich gearbeitet habe gab es im Netz mehrere Kritikseiten.



  • Immer wieder erstaunlich...



  • asc schrieb:

    tfa schrieb:

    Ach ja? Dann mach mal!

    Wie wäre es wenn du einfach das Netz bemühst. Für bislang jede Sprache mit der ich gearbeitet habe gab es im Netz mehrere Kritikseiten.

    Warum sollte ich denn? Hier wollte jemand eine Gegenkritik schreiben. Also bitte!
    Wenn du mehrere Kritikseiten im Netz kennst, verrat sie uns doch einfach. Aber sie sollten schon ansatzweise so ausführlich, fundiert und kompetent sein wie die Seite, die ich gepostet habe. "Rants" von irgendwelchen Fanboys eignen sich vielleicht für Flamewars, sind aber sonst uninteressant.

    Zur Inspiration noch zwei zu C++: 1 2
    Zugegebenermaßen weniger fundiert. Die fallen eher in die Sparte Flamewar-Fanboys 😃

    Zum Thema find ich dieses Zitat noch passend:

    Der Große B.S. schrieb:

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg.

    Wobei man über "makes it harder" natürlich auch wieder streiten kann...



  • LordJaxom schrieb:

    aber mich würde interessieren, wo Du hier (mindestens zwei! :D) neue Problemchen findest:

    printf("%d", "hallo, welt");
    // vs.
    cout << "hallo, welt";
    

    problemchen 1: 'cout' interpretiert seine eingabe. das kann schief gehen bzw. anders aussehen als gewünscht (hier gabs mal 'nen thread, in dem 'cout' in verbindung mit volatile sich ziemlich seltsam verhielt).
    problemchen 1.5: deine printf-zeile enthält einen fehler.
    problemchen 2: ein 'cout'-ausdruck, der mehrere objekte formatiert ausgeben soll, wird sehr lang und hässlich, jedenfalls im vergleich zu 'printf'.

    Bulli schrieb:

    Wo ist also in C++ da das Problem, wenn selbst ein dummer Compiler versteht, was gemeint ist?

    mensch Artchi, poste doch wieder unter deinem richtigen namen.
    🙂



  • Bulli schrieb:

    Wo ist also in C++ da das Problem, wenn selbst ein dummer Compiler versteht, was gemeint ist?

    das *ist* das Problem: Was für einen "dummen" Computer oder Compiler gut verständlich ist, ist in der Regel für den Menschen schwer verständlich, und umgekehrt. Man denke an Binärcode.

    Abgesehen davon finde ich es auch komisch, daß ich in C++ alle Typen selbst vereinbaren muß, aber sobald ich einen Typ-Fehler begehe, mich der Compiler ermahnt, und sogar hinweist, wie der richtige Typ lauten würde a la "expected: int*, got: int**" - warum typisiert er nicht einfach selber, statt dem Programmierer diese fehlerträchtige Arbeit aufzuhalsen - offenbar kann er es ja ?

    Bulli schrieb:

    Es ist aber nicht so schwer zu lernen, wie es hier einige verkaufen wollen.

    das hängt vom Background ab. Als ich C lernte, konnte ich schon mehrere Assemblersprachen, da war C also kein Problem.

    Mir scheint, daß die Gewöhnung an logisches Denken ein Hindernis beim Lernen von C++ ist. C++ ist teilweise nicht logisch, es gibt keine eindeutige Zuordnung zwischen Syntax-Elementen und Konzepten, viele Symbole und Schlüsselwörter sind mehrfach überladen mit Bedeutungen, die teilweise nichts miteinander zu tun haben.



  • asc schrieb:

    Der Name ist Programm... Wenn du C++ als " Unlogisch und kompliziert" betrachtest, gilt dies erst recht für C.

    http://www.artima.com/cppsource/safebool.html
    Kannst du mal schnell das mit dem safe bool idiom und dem Rückgabewert bool oder void* erklären, ich hab das noch nicht ganz verstanden. Sollte doch auch einfach, logisch und unkompliziert ohne 3 Seiten Text gehen, da C++. Und wie war das mit dem assign operator und exception safety?



  • naja, da jetzt meine anfängliche frage zur diskussion über c bzw. c++ wurde kann das thema auch geschlossen werden weil es keinen sinn mehr hat. ich werde mir jetzt einfach mal 2-3 bücher über c++ holen und bin gerade dabei mir phyton anzugucken. ich hoffe es klappt aber erwarte auch nicht von mir selbst, das ich in 1 monat programmieren kann. trotzdem vieln dank für eure beiträge und vll. bis bald mal wieder... 🙂



  • isklar schrieb:

    asc schrieb:

    Der Name ist Programm... Wenn du C++ als " Unlogisch und kompliziert" betrachtest, gilt dies erst recht für C.

    http://www.artima.com/cppsource/safebool.html
    Kannst du mal schnell das mit dem safe bool idiom und dem Rückgabewert bool oder void* erklären, ich hab das noch nicht ganz verstanden. Sollte doch auch einfach, logisch und unkompliziert ohne 3 Seiten Text gehen, da C++. Und wie war das mit dem assign operator und exception safety?

    Interessantes Problem, aber es erklärt nich nicht warum C weniger Kompliziert ist als C++, da es die gleichen Probleme hat, weniger Typsicherheit besitzt...

    Und nur das zweifel ich hier an. Ich habe niemals gesagt das C++ unkompliziert ist, aber mehr als C (Alleine die vielen Zusatzbedingungen die man in der C-Bibliothek wissen muss um Funktionen aufzurufen, ohne in Laufzeitfehler zu rennen, die in der C++ Bibliothek zum Großteil dank Typsicherheit, Klassen etc. bereits in der Compilezeit aufgedeckt werden können).

    Ich lobe weder C++ in den Himmel, noch ziehe ich C die Existenzberechtigung ab. Nur von der Komplexität sind beide ähnlich. Und beide ebenso schwer für ein Anfänger zu lernen.

    fricky schrieb:

    problemchen 1: 'cout' interpretiert seine eingabe. das kann schief gehen bzw. anders aussehen als gewünscht (hier gabs mal 'nen thread, in dem 'cout' in verbindung mit volatile sich ziemlich seltsam verhielt).
    problemchen 1.5: deine printf-zeile enthält einen fehler.
    problemchen 2: ein 'cout'-ausdruck, der mehrere objekte formatiert ausgeben soll, wird sehr lang und hässlich, jedenfalls im vergleich zu 'printf'.

    Zu 1 & 1.5: cout interpretiert seine Aussage wenigstens typsicher. Der Fehler in der C-Zeile soll wohl nur auf die Leichtigkeit hinweisen wie man in C einen Laufzeitfehler hinbekommt. Und Anfänger werden mit volatile (Das ich übrigens bislang nur sehr selten -eher nie- in Anwendungsprogrammen begegnet bin) wohl nur wenig bis garnicht in Kontakt kommen.
    Zu 2: Wenn ich dafür die Fehler zur Compilezeit statt zur Laufzeit geliefert bekomme, ist es zumindestens mir das wert.

    u-ser_l schrieb:

    Mir scheint, daß die Gewöhnung an logisches Denken ein Hindernis beim Lernen von C++ ist.

    Das mag dir so gehen, ich finde C++ in vielen Bereichen logischer und vor allem auch sicherer als seine C-Altlasten...

    cu André



  • ~fricky schrieb:

    problemchen 1.5: deine printf-zeile enthält einen fehler.

    Ja, mit voller Absicht, um direkt eines der Probleme von printf aufzuzeigen.

    problemchen 2: ein 'cout'-ausdruck, der mehrere objekte formatiert ausgeben soll, wird sehr lang und hässlich, jedenfalls im vergleich zu 'printf'.

    Der Formatstring von printf ist hässlich, jedenfalls im Vergleich zu cout. Oder anders: Geschmacksfragen sollten wir entweder aussen vor lassen oder gegeneinander aufwiegen :p



  • asc schrieb:

    ich finde C++ in vielen Bereichen logischer und vor allem auch sicherer als seine C-Altlasten...

    ich finde C++ auch angenehmer als C, vor allem wegen Strings, STL-Containern und wegen der Datenkapselung durch das OO-Modell.

    Logischer finde ich C++ deswegen aber nicht - eher unlogischer. Hatte man bei C nur eine Art von Referenzen (nämlich Zeiger), so hat man jetzt zwei. Und schon hat das '&'-Zeichen drei weitere Bedeutungen, zusätzlich zu den zweien, die es schon in C hat. Der Programmierer muß in C++ einfach zu viel Verwaltungskram selbst machen, den auch der Compiler erledigen könnte: Prototypen, Typisierung, Garbage Collection (klar - geht nicht, wenn man Zeiger zuläßt), ...

    Die Seitenzahl der Referenzbücher spricht da eine deutliche Sprache - je mehr erklärt werden muß, umso weniger intutiv muß eine Sprache wohl sein.



  • asc schrieb:

    Zu 1 & 1.5: cout interpretiert seine Aussage wenigstens typsicher. Der Fehler in der C-Zeile soll wohl nur auf die Leichtigkeit hinweisen wie man in C einen Laufzeitfehler hinbekommt. Und Anfänger werden mit volatile (Das ich übrigens bislang nur sehr selten -eher nie- in Anwendungsprogrammen begegnet bin) wohl nur wenig bis garnicht in Kontakt kommen.
    Zu 2: Wenn ich dafür die Fehler zur Compilezeit statt zur Laufzeit geliefert bekomme, ist es zumindestens mir das wert.

    Warnung: format »%d« erwartet Typ »int«, aber Argument 2 hat Typ »char *«
    

    ...

    u_ser-l schrieb:

    Und schon hat das '&'-Zeichen drei weitere Bedeutungen, zusätzlich zu den zweien, die es schon in C hat.

    Zähl mir doch bitte mal alle Mehrdeutigkeiten von static in C auf...



  • u_ser-l schrieb:

    ich finde C++ auch angenehmer als C, vor allem wegen Strings, STL-Containern und wegen der Datenkapselung durch das OO-Modell.

    Warum diskutieren wir dann überhaupt?

    u_ser-l schrieb:

    Logischer finde ich C++ deswegen aber nicht - eher unlogischer. Hatte man bei C nur eine Art von Referenzen (nämlich Zeiger), so hat man jetzt zwei.

    Die aber unterschiedliche Bedeutung haben, und zusätzlich je nach Verwendung vom Compiler auch anders umgesetzt werden können (Referenzen können intern Zeiger sein, können aber ebenso gänzlich wegoptimiert werden).

    u_ser-l schrieb:

    Und schon hat das '&'-Zeichen drei weitere Bedeutungen, zusätzlich zu den zweien, die es schon in C hat.

    Es ist klar das wenn man einerseits weitgehen C-Kompatibel sein will, anderseits aber neue Möglichkeiten eröffnen will, eine Sprache mehr Befehle oder Zeichen verwenden muss (bzw. Zeichen auch noch mehrere Kontextspezifische Bedeutungen gibt).

    Nichts desto trotz spart man sich in C++, sofern man auch wirklich C++ und nicht C Programmiert, viele Fallstricke aus C. Daher sehe ich beides von der Komplexität gleich an. Ansonsten müsste man sagen das C#/Java komplexer als C/C++ ist, weil der Bibliotheksumfang größer ist.

    Man kommt als Anfänger immer nur mit einem Teil in Berührung. Und nicht nur als Anfänger. Ich frage mich wieviele C++ Programmierer (prozentual) jemals direkt mit der Templatemetaprogrammierung zu tun haben. Ich tippe eher wieder auf die 90:10 Regel (90 Prozent werden es niemals direkt verwenden, indirekt über Bibliotheken vielleicht).

    u_ser-l schrieb:

    Der Programmierer muß in C++ einfach zu viel Verwaltungskram selbst machen, den auch der Compiler erledigen könnte: Prototypen, Typisierung, Garbage Collection (klar - geht nicht, wenn man Zeiger zuläßt), ...

    Und wo bitte ist da C besser (Ich habe niemals gesagt das C++ besser, leichter... als andere Sprachen ist, verwehre mich nur dagegen das C weniger Komplex sein soll. Für einen Anfänger eher nicht.

    u_ser-l schrieb:

    Die Seitenzahl der Referenzbücher spricht da eine deutliche Sprache - je mehr erklärt werden muß, umso weniger intutiv muß eine Sprache wohl sein.

    Dann sie bitte auch meine (Anwendungsfallspezifische) Empfehlung an. Siehst du dort an vielen Stellen C++?

    cu André



  • Tim schrieb:

    asc schrieb:

    ...Zu 2: Wenn ich dafür die Fehler zur Compilezeit statt zur Laufzeit geliefert bekomme, ist es zumindestens mir das wert.

    Warnung: format »%d« erwartet Typ »int«, aber Argument 2 hat Typ »char *«
    

    ...

    Das klappt aber nur wenn der C-Compiler komplexes Parsing betreibt, und das machen beileibe nicht nicht alle. Ich weiß noch wieviele Laufzeitfehle ich wegen falscher Benutzung von C-Funktionen in Programmen suchen durfte (und nein, die C-Funktionen habe nicht ich eingebaut, ich durfte sie nur ausbaden).

    cu André



  • asc schrieb:

    Das klappt aber nur wenn der C-Compiler komplexes Parsing betreibt, und das machen beileibe nicht nicht alle.

    Sollen wir darüber diskutieren wieviele C++ Compiler nicht komplett z.B. Templates umsetzen?
    Ich wollte lediglich andeuten, dass die Beispiele die hier gegeben werden nicht sonderlich sinnvoll sind. Aber durchaus passend zur Diskussion...


Anmelden zum Antworten