Wie am besten an C++ herantasten?

  • Moinsen,


    ich möchte mich gerne fortbilden und zusätzliche Programmiersprachen lernen.
    Bis jetzt habe ich mich nur mit den Shell- und PHP-Programmierung beschäftigt.
    Dazukommen soll am Ende c++, Java und Javaskript (in der Gewichtung).
    Ein Arbeitskollege sagte mir, dass man am besten vor der Programmierung in C++, Java lernen soll.
    Ist es da vlt. sinnvoll sich vorher noch Kenntnisse in Javaskript anzueignen, oder ist erst Java und dann C++ ein guter Weg?


    Wie seht ihr das?


    Greetz

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Machs umgekehrt.


    Wir haben an der FH zuerst C, danach C++ und dann erst Java programmiert.


    Von Java auf C zurück is IMHO ein schlechter weg, da man sich bei Java z.B. nicht um Speicher freigeben etc. kümmern muss...


    Da ist der umgekehrte Weg sinnvoller.


    cp

    easyVDR 0.6: VDR: Asus M2N-VM DVI, 2GB RAM, AMD A64 X2 4000+ EE, Samsung SpinPoint T166 400GB SATA II, LG Electronics GSA-H62N schwarz DVD Brenner, TT1.5 FF, TT Budget verpackt in einem Silverstone LC17 Gehäuse.
    Client: MediaMVP


    yavdr 0.3a:Asus M4A78LT-M LE, 4GB RAM, AMD Athlon II X2 240e, Asus Geforce ENGT520, 320GB Samsung Spinpoint M7 HM320II, 300W be quiet! Pure Power L7, TT-Budget S2-1600, EKL Alpenföhn Panorama, verpackt in einem Techsolo TC-380 HTPC Gehäuse


    yavdr 0.5: Intel DH67GD, Intel Pentium G620 2x 2.60GHz So.1155, 60GB Corsair Force 3 SSD, 8GB Ram, Linux4Media S2 ver 5.4, Asus ENGT 520 Silent, CoHaus CIR


    TV: Panasonic 42" Plasma TH-42PV45

  • Ich würde mir erstmal das objektorientierte Modellieren zu Gemüte führen und üben, das in C zu realisieren. Dann hat man es nämlich echt intus.


    C++ würde ich heute nur noch lernen, wenn es wirklich notwendig ist. Die mögliche Systemnähe ist selten wirklich nötig und wird mit vielen Stolperfallen erkauft. C# oder Java sind für die "normale" Anwendungsentwicklung heute eher Mittel der Wahl, ggf. sogar schlanke Sprachen wie Python oder Ruby.


    Mit letzteren programmiert man wirklich eine Ecke effizienter als in C++ oder auch C# (nicht nur eigene Erfahrung).


    Lars

  • Und da scheiden sich mal wieder die Geister :D


    Zunächst mal würde ich nicht unbedingt sagen, dass Ruby und Python schlank sind. Korrigiert mich, aber meines Wissens sind das Scriptsprachen, die ihrerseits in nativen Sprachen wie C++ geschrieben wurden. Ich persönlich würde native bzw. nativ übersetzbare Sprachen immer vorziehen. Das sehen im Übrigen meine Auftraggeber auch so, die nach dem "IL-Hype" so langsam wieder verstärkt von Sprachen wie .NET oder Java abrücken. Dass solche Sprachen effizienter im Sinne von weniger Code sind, will ich dabei garnicht abstreiten, obgleich ich denke dass ein gutes Framework das in (fast) jeder Sprache wettmachen kann.


    Bei eingefleischten C++lern wird weiterhin vermehrt davon abgeraten, zuerst C zu lernen, da man beim Umstieg von C nach C++ oft das bereits vorhandene Wissen nur allzu schwer abschütteln kann um sich auf die in C++ anerkannten Techniken einzustellen. Das liegt natürlich auch daran dass C immernoch ein Subset von C++ ist, und auch die Standardbibliothek von C in C++ vollständig zur Verfügung steht. Und nicht zuletzt ist C++ die einzige mir bekannte Sprache die ein derart mächtiges System zur Metaprogrammierung mitbringt.


    Mein ganz persönlicher Rat ist daher tatsächlich, ohne "C-Altlasten" mit C++ anzufangen, und dabei auch verstärkt auf die Standardbibliothek und deren aktuellste Erweiterungen (TR1) sowie die boost-Bibliothek (die zum großen Teil als Vorlage für aktuelle Standarderweiterungen dient) Rücksicht zu nehmen. Dabei sollte man allerdings darauf achten, ein möglichst aktuelles Werk zu Rate zu ziehen, da viele ehemals etablierte C++-Workshops mittlerweile zu Fehlern im Sinne moderner C++-Programmierung neigen.


    Ergänzung:
    Java vor C++ muss nicht schlecht sein, auch wenn Java eine rein Objektorientierte Sprache ist, was C++ definitiv nicht ist. C++ wird nur allzu gern als Multiparadigmensprache bezeichnet, und eine gesunde Mischung aus Objektorientierung und anderen Sichtweisen bringt IMHO oftmals mehr Vorteile als eine Versteifung auf ein bestimmtes Konzept wie die OO.

  • Moinsen,


    also ist der Einstieg mit Java nicht das Mittel zur Wahl?
    Am besten gleich mit C anfangen, dann ggf. C++/C# und/oder Java?


    Greetz


    EDIT:
    Den Post hab ich leider noch nicht gelesen, als ich meinen geschrieben habe.
    Somit meinst du, dass Java als Einstieg doch nicht schlecht ist?
    Danach C++ und die Sache ist geritzt?

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Ich kann nur meine persönliche Erfahrung, angereichert durch Beobachtungen bei meinen Bekannten wiedergeben ;) - und die besten C++ Programmierer die ich kenne haben mit C++ angefangen.


    Ich selbst habe mit Java nichts am Hut, habe zuerst selbst C und dann C++ gelernt und musste in den letzten zwei Jahren am eigenen Leib erfahren wie schwer es eigentlich ist die "C-Wurzeln" völlig hinter sich zu lassen. Will heissen ich dachte lange Zeit ich programmierte C++, obwohl es eigentlich nur mit C++-Elementen angereichtertes C war. Letztenendes hängt es auch davon ab was Du machen willst, denn nach der Lehre der Konsolenprogramme sollen ja sicher auch anspruchsvollere Programme folgen. Und da gebe ich offen zu, ist VDR nicht das allerbeste Beispiel für modernes C++ (da steckt eine gehörige Portion C drin). Auch viele GUI-Toolkits nutzen längst nicht alle Möglichkeiten von C++ (als Positivbeispiel für modernes C++ sei hier GTKmm zu nennen). Also wenn Du z.B. primär VDR-Plugins programmieren können willst, lerne C und C++ gleichermassen. Wenn Du modernes Anwendungsdesign lernen willst, fang mit Objektorientierung und Entwurfsmustern an, implementiert in C++ (oder anderen OO-Sprachen), willst Du primär Oberflächenprogrammierung mit Rapid Design Prinzipien, nimm besser Java oder eine der .NET-Sprachen mit entsprechenden Oberflächen-Design-Tools.


    Wie gesagt, just my 2 cents (bin immer für Meinungen anderer dankbar ;))

  • Die Reihenfolge C++ vor Java hat meiner Meinung nach noch einen Vorteil: Hast du die C++-Sprachkonstrukte erst mal gründlich verstanden, bieten andere Sprachen wie Java keine großen Überraschungen mehr, da dir fast alles schon bekannt vorkommen wird. Im Gegenteil: Durch den tieferen Einblick versteht man so manche Eigenheit höherer Sprachen erst richtig.


    Gruß,


    Udo

  • Diesen Link hatte ich mal bezüglich C++ gefunden. Ist ne nette Übersicht über die Grundzüge der Sprache.


    Gruß Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Moin,


    ich würde auch empfehlen mit C++ anzufangen, auch sehe ich keinen Nachteil C++ nicht immer streng Objektorientiert einzusetzen. Ich finde oft eine sinvolle Mischung der C++ Möglichkeiten (Objektorientierung, ..) mit althergebrachten C Bestandteilen nützlich und effizient. Im großen und ganzen stimme mit LordJaxom Beitrag überein.
    Nur zu meiner Einstellung bzw. Meinung über java möchte ich hier lieber nichts sagen ;).


    horchi

  • Hi,


    schaue dir auch einmal die Bücher von Bjarne Stroustrup selbst an http://www.research.att.com/~bs/ gibt's auch bei Amazon.


    horchi

  • Hi horchi,


    die Bücher wiedersprechen aber dem Tipp von LordJaxom möglichst aktuelle Werke zu benutzen...
    Die meisten Bücher sind aus den späten 90igern oder Anfang 2000.


    Greetz

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

  • Bei Stroustrups Werken ist nur wichtig dass sie nach dem 1998 verabschiedeten Standard geschrieben wurden, denn Stroustrup ist C++ ;) Bei anderen Werken rate ich deshalb zu Aktualität (wobei das auch nicht heisst dass sie 2006 erschienen sein müssen), weil mir in letzter Zeit oft Werke untergekommen sind die auch nach 1998 erschienen sind, in denen zum Teil veraltetes C++ gelehrt wird. Da aber die aktuellen Compiler immer penibler werden was den Standard angeht, sollte man eben dies vermeiden.


    Aber ich denke die Werke von Bjarne Stroustrup sind sowieso eher als weiterführende Literatur zu sehen.

  • Also weiterführend Stroustrup im Hinterkopf behalten.
    Dann werd ich mir morgen mal das Buch "C++ für Spieleprogrammierer" bestellen...


    Danke euch für die Tipps
    Kniepbert

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!