Programiersprache für Anfänger



  • 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
    🙂



  • u_ser-l schrieb:

    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.

    Neben den Kommentar von Don06 möchte ich mal wissen aus welchen Quellen du lernst. Alle Bücher die ich kenne und die sich auch ernsthaft mit C++ befassen (also nicht nur C-mit-Klassen) weißen sehr früh darauf hin wann man den einen Kopierkonstruktor braucht und wann nicht. Zudem setze zumindestens ich in C++ nicht viele Zeiger direkt ein.

    Davon abgesehen ist einer der aller ersten Fehler die ich zu C sehe, der Versuch mal wieder Strings zu kopieren, zuzuweisen, anzuhängen... Also komm mir nicht mit diesen Zeigerproblematiken unter C++ an.

    Nenn mir mal bitte Probleme die C im Gegensatz zu C++ nicht hat, und auf die ein C++ Anfänger schnell stößt. Auch das Kopieren von Werten bei Übergaben (nehmen wir mal strukturen als Wertübergabe) kann man ebenso in C machen. Nur hast du in C++ wenigstens die Möglichkeit dort speziell beim Kopieren vorzugehen. Ja C++ ist komplex, ohne Frage - ich spreche aber auch C die gleiche Complexität zu.

    Wenn aber jemand ins Blaue programmiert ohne sinnvolles Buch oder ähnliches wird er in JEDER Programmiersprache scheitern. Und da sind Sprachen die nah an der Hardware sind (Assembler, C, C++...) zwar stärker betroffen, aber auch die ach so sicheren Sprachen wie beispielsweise VB, C#, Java und Co sind ebenso betroffen.



  • Don06 schrieb:

    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.

    Ja gut, ich rede hier nicht von "hello, world".

    Ich benötigte das (copy Konstr.) gleich bei meinem *ersten* größeren Programm (10k+ Zeilen), und da im Objekt ein Filehandle vorkam, der nicht zweimal verwendet werden kann, mußte ich den copy Konstruktor selbst schreiben. Das fiel aber erst auf, als Objekte per-value übergeben wurden, und Objekte per-value übergeben ist für einen Anfänger das natürlichste der Welt - kaum einAnfänger rechnet damit, daß er mit Referenzen arbeiten muß, nur um ein Objekt an eine Funktion zu übergeben.

    Don06 schrieb:

    Ich will dir nichts unterstellen, aber das zeigt meist, dass Leute gegen etwas flamen, dass sie nicht mal genau kennen.

    Es würde entschieden seriöser wirken, wenn Du sachlich geblieben wärest 🙄



  • asc schrieb:

    Nenn mir mal bitte Probleme die C im Gegensatz zu C++ nicht hat, und auf die ein C++ Anfänger schnell stößt.

    C ist für Anfänger schon deshalb einfacher, weil übersichtlicher, andererseits verlangt es etwas mehr technischen Background, sonst kann man sich unter Zeigern oder dem Sinn der Gleichsetzung von Array und Zeiger schwer etwas vorstellen - es ist auch nicht ein Anfänger wie der andere.

    Aber mal ganz konkret gefragt: bist du allen Ernstes der Meinung, eine Sprache wie C++, deren Beschreibung hunderte von Seiten benötigt, die Bibliotheken noch nicht eingerechnet, wäre genauso einfach zu lernen wie bspw. Smalltalk, deren Syntax man auf einer halben Seite darstellen kann, oder Python, das man lesen kann, ohne die Sprache überhaupt genauer zu kennen ? 😮


Anmelden zum Antworten