Programiersprache für Anfänger



  • unglaublich, wie man sich in was reinsteigern kann, da vergeht ja jedem anfänger die lust auf c und c++ 😃

    ich muss ehrlich sagen, dass ich c++ einiges leichter fand um einzusteigen. vor allem aus dem grund, weil die meisten c tutorials die sache mit den zeigern und dynamisch allociertem speicher nur schlecht erklären und die stringbearbeitung per char array erklären statt mit library funktionen. das erfordert doch schon relativ viel vorstellungsvermögen. c++ macht es einem da leichter mit new und delete und der string klasse. es ist sicher nicht schlecht, solche dinge zu lernen, aber für anfänger halt erschlagend. da sollte man erstmal lernen was 'schlaufen' sind 🤡

    [flame]bezüglich syntax komplexizität und kontext sensitivität sind ja beide sprachen pillepalle, perl ist da vieeeel schöner.[/flame]

    my @array = ("eins", "zwei", "drei");
    print @array;
    print "\n";
    print "@array\n";
    print @array."\n"; 
    foreach(@array) { print; }
    print "\n";
    
    einszweidrei
    eins zwei drei
    3
    einszweidrei
    

    soll mal einer nem anfänger erklären 😉



  • Bashar schrieb:

    Nein, ich will einen Beleg dafür, dass die "Mehrdeutigkeit" von static für Anfänger ein Problem darstellt.

    Solange du >>Mehrdeutigkeit<< in Zusammenhang mit den verschiedenen Bedeutungen von static in Anführungszeichen setzt, verstehen wir uns nicht. Es ist de facto eine Mehrdeutigkeit.

    Aber meinetwegen kannst Du gerne glauben, eine static globale Variable mit dateiweiter Gültigkeit wäre dasselbe wie eine static lokale Variable, die zwischen zwei Funktionsaufrufen ihren Wert behält. Du bist damit ohnehin in zahlreicher Gesellschaft.



  • Was hat eine *Klassenvariable* damit zu tun, daß eine *lokale* Variable zwischen zwei Funktionsaufrufen ihren Wert behält ??

    Ob eine *lokale* Variable ihren Wert zwischen Funktionsaufrufen,
    oder eine Variable ihren Wert über allen Instanzen beibehält, ist zwar ein Unterschied, aber ähnlich sind sie sich dennoch.
    Im Grunde kann man für static sagen: Die Variable gibts nur einmal für den Kontext, in dem sie deklariert wurde. Und schon haste ne Vereinhetlichung.



  • uber perle schrieb:

    unglaublich, wie man sich in was reinsteigern kann, da vergeht ja jedem anfänger die lust auf c und c++ 😃

    Beide Sprachen sind imho auch nicht Einsteigerfreundlich.

    Aber es kommt auch darauf an, was man mit einer Sprache erreichen möchte (Einfach irgendeine Sprache als Einstiegssprache zu nennen halte ich für Fehl am Platz, siehe auch meine Empfehlungen in Zusammenhang mit der Zielsetzung, ziemlich weit vorne im Thread). Unter umständen kann auch Assembler, Cobol, Natural & Co für einen Einsteiger geeignet sein, wenn er genau dies später braucht.

    uber perle schrieb:

    [flame]bezüglich syntax komplexizität und kontext sensitivität sind ja beide sprachen pillepalle, perl ist da vieeeel schöner.[/flame]

    OMG - Da ist mir C++ jedenfalls logischer xD.

    cu André



  • Für Anfänger gibt es einfachere Programmiersprache als C/C++, z.B. BASIC. Nur empfehlenswerter bleibt C/C++. Damit zu programmieren macht für den Einstieg mehr Mühe. Man kann aber länger damit leben und braucht nicht mehr umzusteigen, wenn man mehr will oder soll.



  • @u_ser-l:
    Was ich über static glaube oder nicht ist nicht der Gegenstand der Diskussion. Kommt jetzt von dir mal was anderes als Geblubber?



  • Blub Blubblub 🙂

    hast' Recht - ich will mich auch nicht dazu verleiten lassen persönlich zu werden, es geht ja schließlich nur um

    static
    

    🙄

    Ciao



  • asc schrieb:

    OMG - Da ist mir C++ jedenfalls logischer xD.

    versuch dich mal in einen absoluten anfänger zu versetzen. welchen code würde er wohl eher kapieren? den perl-code oder einen c++ code, der gleiches macht?
    🙂



  • ~fricky schrieb:

    versuch dich mal in einen absoluten anfänger zu versetzen. welchen code würde er wohl eher kapieren? den perl-code oder einen c++ code, der gleiches macht? 🙂

    Ganz ehrlich: Ich tippe sogar auf den C++ Code, der aber wesentlich mehr Codezeilen hätte. Das Perlzeugs finde ich jedenfalls von allen mir bekannten Sprachen bisher das kryptischste (Von Mehrdeutigkeiten die ja Gegen C++ genannt werden ebenso abgesehen).



  • uber perle schrieb:

    [flame]bezüglich syntax komplexizität und kontext sensitivität sind ja beide sprachen pillepalle, perl ist da vieeeel schöner.[/flame]

    perl ist schöner, aber APL ist kürzer 😃



  • asc schrieb:

    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...

    Ich hab zwar noch nicht soviel mit C gemacht, aber mir kommt es um einiges einfacher vor als C++. Einige C Libraries mögen ja fehleranfälliger sein, aber ein std::transform um einen String in Uppercase zu convertieren ist auch nicht einfach und intuitiv. Außerdem hat C auch weniger Sprachfeatures z.B. keine Exceptions und Operatorüberladung, welche in C++ große Fehlerquellen sind (siehe safe bool und assignment operator).



  • Ich denke es sollte hier unterschieden werden zwischen "wie einfach ist es eine sprache zu lernen (alle relevanten sprachfeatures zu kennen und zu wissen wie man sie anwendet)" und "wie einfach ist es in einer bestimmten zeit eine sprache zu lernen und dann brauchbare programme (also ohne viele grobe fehler) damit zu entwickeln".

    was den ersten punkt angeht ist C viel einfacher als C++. was den zweiten angeht IMO nicht. obwohl C++ einem mehr möglichkeiten gibt dinge falsch zu machen, nimmt einem C++ (wenn man es auch nur halbwegs richtig einsetzt) auch viele dinge ab wo man viel falsch machen könnte wenn man sie immer "zu fuss" machen muss (container, smart-pointer etc.). und sobald man beide sprachen mal gut kann ist es in C++ denke ich einfacher, d.h. man kommt schneller zu einem brauchbaren ergebnis als mit C.

    im allgemeinem. spezialfälle wie embedded-systems, treiberentwicklung etc. mal ausgenommen.

    p.S.: was jetzt nicht heissen soll dass ich C oder C++ für eine sprache halte mit der man besonders leicht einsteigen kann. da eignen sich sprachen wie python, java oder auch PHP/Perl vermutlich besser, auch wenn ich mich mit keiner dieser sprachen selbst besonders anfreunden konnte (am ehesten noch java) - aber das ist wieder rein subjektiv.



  • hustbaer schrieb:

    obwohl C++ einem mehr möglichkeiten gibt dinge falsch zu machen, nimmt einem C++ (wenn man es auch nur halbwegs richtig einsetzt) auch viele dinge ab...

    das ist es, was ich weiter oben ansprach: man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    hustbaer schrieb:

    ...auch wenn ich mich mit keiner dieser sprachen selbst besonders anfreunden konnte (am ehesten noch java)...

    ich dachte immer, du kommst aus der windows-welt. daher hätte ich auf C# getippt.
    🙂



  • man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    Mit den "meistens viel fieseren" Fehlerquellen bekommt man IMO nur zu tun wenn man sich überschätzt, Dinge verwendet wo man sich nicht ganz sicher ist bzw. die man einfach nicht richtig verstanden hat etc. Lässt sich IMO recht einfach vermeiden. Ist aber natürlich nur meine persönliche Meinung.

    ich dachte immer, du kommst aus der windows-welt. daher hätte ich auf C# getippt.

    Ich komme aus der Amiga 500/3000 Welt und bin mittlerweile in der Windows Welt zuhause. Was aber nicht heisst dass ich C# so toll finde. Für gewisse Dinge (RAD, GUI-Kram etc.) ist es nett, für andere Dinge wieder der Horror. Und gerade auf C# bzw. das .NET Framework trifft IMO das zu was du über C++ schreibst: man kann sehr schnell was auf die Beine stellen, handelt sich dabei aber Probleme/Fehlerquellen ein die zumindest der typische C# Programmierer überhauptnichtmehr versteht. Das .NET Framework hat einige Fallstricke parat wo man sich schön Memory-Leaks bzw. allgemein Resource-Leaks einfangen kann. Und andere Probleme wie verfrühte Finalisierung die in bestimmten Situationen möglich ist, die man mit Hand verhindern muss. Alles andere als schön und anfängerfreundlich. Und bestimmt noch viele andere Dinge.



  • hustbaer schrieb:

    Was aber nicht heisst dass ich C# so toll finde. Für gewisse Dinge (RAD, GUI-Kram etc.) ist es nett, für andere Dinge wieder der Horror. Und gerade auf C# bzw. das .NET Framework trifft IMO das zu was du über C++ schreibst: man kann sehr schnell was auf die Beine stellen, handelt sich dabei aber Probleme/Fehlerquellen ein die zumindest der typische C# Programmierer überhauptnichtmehr versteht.

    ach du schreck! und ich dachte, .NET wär (unter win) eine ernstzunehmende alternative zu Java. etwas, mit dem auch 'schlechte' programmierer was halbwegs stabiles auf die beine stellen können.
    🙂



  • hustbaer schrieb:

    man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    Mit den "meistens viel fieseren" Fehlerquellen bekommt man IMO nur zu tun wenn man sich überschätzt, Dinge verwendet wo man sich nicht ganz sicher ist bzw. die man einfach nicht richtig verstanden hat etc. Lässt sich IMO recht einfach vermeiden.

    Man kann sich halt schon beim Assignment-Operator überschätzen.



  • ~fricky schrieb:

    das ist es, was ich weiter oben ansprach: man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    Das konnte ich bislang nicht feststellen - vor allem nicht "viel fiesere". Zumindestens wüsste ich jetzt nicht wo ich mir - sofern es sich um "echte" C++ Programmierung geht - jemals den Speicher zerschossen habe. Aber vielleicht hat da auch jeder andere Erfahrungen.

    Wenn man es so betrachtet würden sich aber vermutlich alle Sprachen für einen Anfänger ausschließen. Beispielsweise hat man sowohl bei C# als auch Java eine mächtige Bibliothek, die so sehr gekapselt ist das einige Fehler sich einen Anfänger nicht erschließen. Aber grundsätzlich ist Programmierung, wenn es den über wenige Zeilen hinaus geht, ohnehin eine komplexe Thematik die zumindestens ein grundlegenes logisches Denkvermögen erfordert.

    cu André



  • asc schrieb:

    ~fricky schrieb:

    man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    Das konnte ich bislang nicht feststellen - vor allem nicht "viel fiesere".

    ich schon. Beispiel: Copy-Konstruktur einer Klasse muß überschrieben werden, sobald die Objekte dieser Klasse Daten enthalten, die nicht einfach kopiert und dann weiterbenutzt werden können. Sonst erlebt man bei der pass-by-value-Übergabe von Objekten dieser Klasse bei Funktionsaufrufen sein blaues Wunder.

    Eine typische Anfänger-Falle. Der Anfänger muß dabei wissen, daß bei Funktionsaufrufen Kopien von Objekten hergestellt werden, die dann als Argument übergeben werden, und daß und wie man den Kopier-Mechanismus mit dem copy-Konstruktur "customisiert".



  • @u_ser-l: Einen eigenen copy-constructor zu schreiben mag zwar sehr früh in vielen Tutorials und Büchern vorkommen. Tatsächlich benötigt das ein Anfänger aber kaum bis nie. Selbst ein fortgeschrittener Programmierer verwendet das nur um RAII-Klassen für Ressourcen zu schreiben. Dann erledigt der Kompiler den Rest. Ein Anfänger sollte aber keine eigenen RAII-Klassen schreiben.

    Du greifst hier einen Punkt von C++ an, den man wenig kritisieren kann, da gibt es viel bessere Beispiele. Gerade in Flame-Wars ist es erstaunlich, dass man meist nur sehr schwache Gegenargumente findet, obwohl es wesentlich bessere gibt. Ich will dir nichts unterstellen, aber das zeigt meist, dass Leute gegen etwas flamen, dass sie nicht mal genau kennen.

    Gruß
    Don06



  • asc schrieb:

    ~fricky schrieb:

    das ist es, was ich weiter oben ansprach: man kann mit C++ unsicherheiten vermeiden, die man sich mit eingehandelt C hätte, holt sich im gegenzug aber andere (und meistens viel fiesere) mögliche fehlerquellen an bord.

    Das konnte ich bislang nicht feststellen

    andere aber schon: http://www.horstmann.com/cpp/pitfalls.html
    🙂


Anmelden zum Antworten