Programiersprache für Anfänger



  • @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 ? 😮



  • u_ser-l schrieb:

    ...da im Objekt ein Filehandle vorkam, der nicht zweimal verwendet werden kann, mußte ich den copy Konstruktor selbst schreiben ...

    std::i/ofstream? Wenn du ein OS-abhängiges Filehandle verwendest, zähle ich das nicht mehr zu dem, was ein Anfänger so macht. OS-spezifisches Zeug ist meist etwas frickelig, da C-Interfaces auf C++-Code treffen.

    u_ser-l schrieb:

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

    Ich will nicht seriös sein 😉

    Hier mal ein Beispiel, was ziemlich verwirrend sein kann:

    A B(C)
    

    Die Bedeutung des Codes hängt davon ab, was C ist. Es kann ein Typ sein, dann ist es eine Funktionsdeklaration. Es kann aber auch eine Variable/Konstante sein, dann ist es eine Variablendaklaration. Wie hier im Thread schon gesagt wurde, ist Mehrdeutigkeit, eines der größten Probleme von Anfängern. Und davon hat C++ viele. Dass man sich um die Verwaltung seiner Ressourcen selbst kümmern, muss, gilt hingegen sogar in Sprachen, die einen Müll-Sammler haben, da der nur für die Verwaltung des dynmaischen Speichers, nicht aber für externe Ressourcen, wie Filehandles verantwortlich ist.

    Gruß
    Don06



  • Hallo zusammen
    Ich Möchte Programmieren (C) lernen.
    Kann man mir sagen was für einen software 😕 oder Programm 😕 ich brauche und wo ich das finde?
    Danke



  • Don06 schrieb:

    Dass man sich um die Verwaltung seiner Ressourcen selbst kümmern, muss, gilt hingegen sogar in Sprachen, die einen Müll-Sammler haben, da der nur für die Verwaltung des dynmaischen Speichers, nicht aber für externe Ressourcen, wie Filehandles verantwortlich ist.

    Files automatisch schließen geht im allgemeinen ja auch gar nicht. Schließlich weiß die Programmiersprache nicht in jedem Fall, ob das Programm später den Filehandle noch einmal benutzen wird - z.B. könnte man im Programm per Zufall entscheiden lassen, ob das File in Zukunft noch einmal beschrieben wird oder nicht, und da wäre es beim Compilieren unmöglich zu entscheiden, ob das Filehandle gelöscht werden kann oder nicht.

    Sonderfall: wenn keine Referenz mehr auf ein File-Objekt verweist, dann kann auch das Programm nicht mehr auf das File zugreifen (gilt für Sprachen ohne direkte Speichermanipulation per Zeiger o.ä.); dann könnte die Garbage Collection, die ja nicht-referenzierte Objekte findet, das File flushen und schließen. In einigen früheren Python-Versionen gab es das angeblich, aber es wird nicht empfohlen, sich darauf zu verlassen.

    In Sprachen mit direkter Speichermanipulations-Möglichkeit über Zeiger geht das ohnehin nicht.



  • Don06 schrieb:

    Dass man sich um die Verwaltung seiner Ressourcen selbst kümmern, muss, gilt hingegen sogar in Sprachen, die einen Müll-Sammler haben, da der nur für die Verwaltung des dynmaischen Speichers, nicht aber für externe Ressourcen, wie Filehandles verantwortlich ist.

    Was ist mit Finalizern?



  • Bashar schrieb:

    Was ist mit Finalizern?

    Wegen des probabilistischen Laufzeitsverhalten des GC sind diese de facto nutzlos. Es gibt noch nicht einmal die Garantie, daß sie überhaupt aufgerufen werden! Und daher muß man das Finally Statement verwenden.

    Das ist ja das ärgerliche an Java & Co. man fällt wieder auf den Stand von prä-RAII zurück und muß überall im Code Finally einsetzen, damit die Resourcen sauber freigegeben werden. Bei Sprachen, die RAII unterstützen, muß man nur die Klasse sauber entwerfen, und muß sich nachher nur noch Gedanken um die Lebensdauer von Objekte machen. Fehler die dabei auftreten sind meist leicht zu finden. Bei den Sprachen mit Finally muß immer daran denken wie lange soll das Objekt leben, und muß noch den eigentlich überflüssigen Finally-Block hinschreiben. Statt einmal den Code zu schreiben, muß man ihn n-mail hinschreiben - sehr sinnvoll.



  • asc schrieb:

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

    mit hardwarenähe hat es doch nix zu tun. komplizierte sprachelemente mit gefährlichen nebeneffekten, mehrdeutigkeiten, unleserliche fehlermeldungen, aushebelbare typisierung (man kann fast alles in alles casten) usw. sind alles sehr böse dinge. übrigens sagst du, dass du C und C++ gleichermassen kompliziert findest. wie verträgt sich das mit der tatsache, dass C++ C als untermenge beinhaltet?
    🙂



  • ibominka schrieb:

    Hallo zusammen
    Ich Möchte Programmieren (C) lernen.
    Kann man mir sagen was für einen software 😕 oder Programm 😕 ich brauche und wo ich das finde?
    Danke

    es tut mir leid. das ist kein thread für anfänger, sondern für jene, die meinen sie seien profis und könnten sich hier profilieren mit ihrem spezialwissen. 🙄

    du brauchst erstmal nen compiler. ne ide ist auch praktisch, weil dir die viel arbeit abnimmt. und vor allem brauchst du ein gutes buch!
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-41476.html
    http://www.c-plusplus.net/forum/viewtopic.php?t=39513
    ich persönlich bin ein absoluter eclipse fan. damit mach ich C++, java, perl, php, xml, html, css und sql in einem: http://www.eclipse.org/

    gruss



  • ibominka schrieb:

    Hallo zusammen
    Ich Möchte Programmieren (C) lernen.
    Kann man mir sagen was für einen software 😕 oder Programm 😕 ich brauche und wo ich das finde?
    Danke

    schau auch mal hier: http://www.thefreecountry.com/compilers/cpp.shtml
    🙂



  • Merci Jungs
    Das heisst ich sollte Das : (Microsoft Visual Studio 2008 Express Editions mit SP1) runteladen und instalieren ?
    wenn Ja ? und dann?
    und was für ein Buch brauche ich? 😞 😞 😞



  • also das imho beste buch zum c-programmieren lernen ist:

    C- Programmierung lernen. Anfangen, anwenden, verstehen (Addison-Wesley)
    von Andre Willms
    http://www.amazon.de/C-Programmierung-lernen-Anfangen-anwenden-verstehen/dp/3827314054

    hab bisher kein anderes buch gefunden, das alles so klar und einfach verständlich rüberbringt.

    🙂



  • ibominka schrieb:

    Das heisst ich sollte Das : (Microsoft Visual Studio 2008 Express Editions mit SP1) runteladen und instalieren ?

    naja, das ist schon ein ziemlicher klotz. es gibt schlankere alternative, die dir weniger müll auf die platte ziehen. aber klar, vs. express geht natürlich auch.
    🙂



  • Visual Studio ist ein ziemlicher Klotz, ja, dafür aber auch eine sehr gute Entwicklungsumgebung für C++ und C#.
    Für Java könnte man Netbeans und Eclipse empfehlen. Nur so nebenbei. Wurde aber vermutlich schon wo erwähnt.



  • hustbaer schrieb:

    Visual Studio ist ein ziemlicher Klotz, ja, dafür aber auch eine sehr gute Entwicklungsumgebung für C++ und C#.

    wenn ich's richtig mitbekommen habe, möchte ibominka in C programmieren, weder mit ++ noch mit #. daher ist ein grossteil des ballasts, den VS mit sich schleppt, für ihn nutzlos.
    🙂



  • u_ser-l schrieb:

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

    Unter C++ macht man File-I/O üblicherweise über Streams, und die lassen sich nicht kopieren...



  • ~fricky schrieb:

    hustbaer schrieb:

    Visual Studio ist ein ziemlicher Klotz, ja, dafür aber auch eine sehr gute Entwicklungsumgebung für C++ und C#.

    wenn ich's richtig mitbekommen habe, möchte ibominka in C programmieren, weder mit ++ noch mit #. daher ist ein grossteil des ballasts, den VS mit sich schleppt, für ihn nutzlos.
    🙂

    Intellisense, die gute Hilfe (MSDN), der wahnsinns-gute Debugger - das alles bringt ihm bei C-ohne-++ auch was. Der Debugger ist für mich einer der wichtigsten Gründe Visual-Studio zu verwenden. Und auch der Punkt wo VS sich IMO am stärksten von anderen IDEs absetzt.


Anmelden zum Antworten