Wie am Besten einsteigen?



  • Hallo zusammen,
    zuerst: Ich bin ziemlicher Programmierneuling in C++ (früher am C64 etwas Basic programmiert) und beschäftige mich in meiner Freizeit gerne mit Arduino und Co.
    Da ich nun doch etwas mehr als eine LED zum Blinken bringen und auch mal ein etwas komplexeres Projekt angehen möchte, habe ich mich entschlossen, in C++ zumindest einmal ganz strukturiert reinzuschnuppern. Ob es bei mir ausreicht um auch wirklich in die Tiefe zu gehen wird sich zeigen, mein Ehrgeiz ist aber groß 🙂
    Dafür habe ich mir die aktuelle Ausgabe von "C++ Der Programmierer" gegönnt. Etwas eingeschüchtert bin ich ja schon, 1000 Seiten geballtes Wissen die ich wahrscheinlich nie komplett verstehen werde ...
    Meine Frage wäre: Soll man so ein Buch komplett durcharbeiten oder gezielt Bereiche ansehen, die einen ins Auge stechen? Es soll ja ein recht gutes Buch sein und ich habe mich an die Empfehlungen, auch hier aus dem Forum, gehalten. Wie ist das im Informatikstudium, lernt man da C++ bis zum Abwinken oder spezialisiert man sich da frühzeitigt auf eine Sprache? Irgendwoher müssen die ganzen C++ Cracks ja kommen, die wachsen ja zumindest bei uns nicht auf den Bäumen. Warum überhaupt C++? Keine Ahnung, die Verwandtschaft zu meinem Mikrocontroller und die für mich verständliche Syntax haben wohl den Ausschlag gegeben. Und prinzipiell ist es ja erstmal egal wenn man bei fast 0 anfängt, auf welche Sprache sich man nun festlegt denke ich.

    Grüße,
    Bernd



  • Je nachdem ob dir das liegt. Wenn es dir nicht so wirklich Spaß macht, Fachbücher durchzuackern, dann such dir lieber echte Programmieraufgaben und arbeite da solange dran, bis es funktioniert und stelle dazu Fragen hier im Forum.
    Die Fachbücher nutzt du dann als Nachschlagewerk.



  • IMHO lernt man Programmieren nur durch Programmieren. Fachbücher kann man nebenbei lesen. Bei Fragen zu konkreten Programmierproblemen einfach Google nutzen. Dann landest du meistens bei Stackoverflow, wo unzählige sehr gute Lösungen zu finden sind.

    C++ ist wahnsinnig komplex. Ist halt ne Sprache für echte Freaks. Wenn dich das nicht abschreckt dann mach es. Ist halt kein Vergleich zu C64 Basic.



  • @Bernd_75 sagte in Wie am Besten einsteigen?:

    Soll man so ein Buch komplett durcharbeiten oder gezielt Bereiche ansehen, die einen ins Auge stechen?

    Ich denke bei Lehrbüchern ist es meist gut sie von Anfang bis zu Ende durchzugehen - zumindest bis zu den vertiefenden Kapiteln die es dann oft weiter hinten gibt. Bei Büchern die eher als Nachschlagwerk ausgelegt sind macht es vermutlich weniger Sinn. Mit denen zu lernen ist aber sowieso schwer.

    Wie ist das im Informatikstudium, lernt man da C++ bis zum Abwinken oder spezialisiert man sich da frühzeitigt auf eine Sprache?

    Was ich so von Bekannten mitbekomme lernt man da nur eher oberflächlich C++, wenn überhaupt. Wie überall kann es natürlich Ausnahmen geben, also Unis/FHs wo auf nem wirklich hohen Niveau C++ unterrichtet wird, aber die Regel ist es auf jeden Fall nicht.

    Irgendwoher müssen die ganzen C++ Cracks ja kommen, die wachsen ja zumindest bei uns nicht auf den Bäumen.

    Jeder "C++ Crack" den ich kenne kann nur deswegen wirklich gut C++, weil er es sich selbst erarbeitet hat. Nicht unbedingt ausschliesslich, einige haben schon in der Ausbildung "ein bisschen" C++ gelernt, aber in die Tiefe gegangen sind sie dann alle selbst, freiwillig, in der Freizeit.

    Und prinzipiell ist es ja erstmal egal wenn man bei fast 0 anfängt, auf welche Sprache sich man nun festlegt denke ich.

    Würde ich nicht unbedingt sagen. C++ ist halt schon eine der komplexesten Sprachen. C, Java, C# sind alles Sprachen die deutlich einfacher zu lernen sind.



  • @hustbaer sagte in Wie am Besten einsteigen?:

    C++ ist halt schon eine der komplexesten Sprachen. C, Java, C# sind alles Sprachen die deutlich einfacher zu lernen sind.

    C ist ziemlich Low-Level. Manche sagen, dass C schwieriger zu lernen sei als C++. Ich sehe das nicht so. C ist schlank und übersichtlich. Eigentlich ideal wenn man von Basic kommt und Assembler als zu fummelig erachtet.

    Wenn man C kann, hat man die Grundlagen von C++ (also Syntax von Deklarationen, Pointern, Schleifen usw.) auch kapiert und weiß wie Maschinennähe in einer Hochsprache abgebildet werden kann. Der Schritt zu C++ dürfte dann leichter fallen.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    Wenn man C kann, hat man die Grundlagen von C++ (also Syntax von Deklarationen, Pointern, Schleifen usw.) auch kapiert und weiß wie Maschinennähe in einer Hochsprache abgebildet werden kann. Der Schritt zu C++ dürfte dann leichter fallen.

    CppCon 2015: Kate Gregory “Stop Teaching C"



  • @manni66 sagte in Wie am Besten einsteigen?:

    @RBS2 sagte in Wie am Besten einsteigen?:

    Wenn man C kann, hat man die Grundlagen von C++ (also Syntax von Deklarationen, Pointern, Schleifen usw.) auch kapiert und weiß wie Maschinennähe in einer Hochsprache abgebildet werden kann. Der Schritt zu C++ dürfte dann leichter fallen.

    CppCon 2015: Kate Gregory “Stop Teaching C"

    Ugly girls love C++ 😂
    However, C++ should change its name so nobody thinks it's a better C.



  • @RBS2 Einer der Haupt-Selling-Points von C++ ist schon immer die Rückwärtskompatibilität, auch und besonders zu C.



  • @Bashar sagte in Wie am Besten einsteigen?:

    Einer der Haupt-Selling-Points von C++ ist schon immer die Rückwärtskompatibilität, auch und besonders zu C.

    Die nicht mehr wirklich gegeben ist. Ich wollte neulich einem char* ein String-Literal zuweisen: char *s = "hello c++"; Der Compiler fand das nicht gut und sagte, ich soll gefälligst std:string benutzen. So viel dazu.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    char *s

    Ist const char* in C verboten?



  • @manni66 sagte in Wie am Besten einsteigen?:

    @RBS2 sagte in Wie am Besten einsteigen?:

    char *s

    Ist const char* in C verboten?

    Es geht um die behauptete Rückwärtskompatibilität. In C ist die Verwendung von const optional.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    In C ist die Verwendung von const optional.

    Ja, aus historischen Gründen. Aber auch in C darf man nicht in eine Stringkonstante schreiben und sollte dringend freiwillig den C++ Regeln zu const folgen.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    @Bashar sagte in Wie am Besten einsteigen?:

    Rückwärtskompatibilität
    Ich wollte neulich einem char* ein String-Literal zuweisen: char *s = "hello c++";

    Das war lange deprecated. Ich denke man hat es in C++11 rausgeschmissen, weil man sonst die Regeln für Unicode-Literale hätte erweitern müssen und das albern fand, aber ich hab die Diskussion nicht so verfolgt. Man kann das alles hier nachlesen, wenn man Lust und Zeit hat.

    Man merkt daran, dass das Standardisierungskomittee sich solche Entscheidungen nicht leicht macht. Eine 100%iger Rückwärtskompatibilität ist nicht sinnvoll und auch nicht möglich, das wollte ich auch gar nicht behaupten.



  • @manni66 sagte in Wie am Besten einsteigen?:

    Aber auch in C darf man nicht in eine Stringkonstante schreiben und sollte dringend freiwillig den C++ Regeln zu const folgen.

    Dann würde man aber gegen den Geist von C verstoßen (totale Freiheit), wenn man sich in ein C++-Korsett zwängen lässt.
    http://beza1e1.tuxen.de/articles/spirit_of_c.html
    Auch wenn das jetzt esoterisch anmutet.

    C und C++ sind verschiedene Sprachen. Ich persönlich bevorzuge C. Da kann ich const verwenden, muss aber nicht. Wer es strikter mag, nimmt eben C++.



  • @Bashar sagte in Wie am Besten einsteigen?:

    Man merkt daran, dass das Standardisierungskomittee sich solche Entscheidungen nicht leicht macht. Eine 100%iger Rückwärtskompatibilität ist nicht sinnvoll und auch nicht möglich, das wollte ich auch gar nicht behaupten.

    Alles gut, Bro. Ich habe dich schon verstanden.



  • Bei mir war's auch BASIC, dann diverse Assembler, brauchbare C- Compiler gab's damals nicht für lau. War damals probat, heute längst nicht mehr.
    Unterm Strich ging ich immer von einer Sache aus, die so in etwa das tat und in Source vorlag, wo ich hin wollte und hab das mal so derb ausgedrückt als "Wichsvorlage" genutzt, garniert mit ein paar Büchleins und mein Zeug immer hingekriegt.
    Ich persönlich mag keine Präferenzen empfehlen, hier hat jemand "Try Haskell" in der Signatur, ich kann mit dem Kram nix anfangen, aber es kam auch keine Anforderung, die das gerechtfertigt hätte, sich da wirklich einzuarbeiten.
    "The Job is first to come", dann einen Kurzscan darüber und loslegen und lösen!
    Dann stimmt auch die Motivation.



  • @Sarkast sagte in Wie am Besten einsteigen?:

    hier hat jemand "Try Haskell" in der Signatur, ich kann mit dem Kram nix anfangen,

    Geht mir ähnlich, ebenso mit Lisp oder Forth. Wobei in einigen Embedded Systems Forth-Programme werkeln, während Haskell nun wirklich rein akademisch ist.

    Oder auch Scala, eine funktionale Sprache für die Java-VM. Rund um den Globus finden Konferenzen zu Scala statt, wo sich Computerwissenschaftler treffen, die das alles ganz toll finden. Aber richtig benutzen will diese Sprache irgendwie keiner. Zu viel erzwungene Abstraktion ist eben auch nicht gut.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    @Sarkast sagte in Wie am Besten einsteigen?:

    hier hat jemand "Try Haskell" in der Signatur, ich kann mit dem Kram nix anfangen,

    Geht mir ähnlich, ebenso mit Lisp oder Forth. Wobei in einigen Embedded Systems Forth-Programme werkeln, während Haskell nun wirklich rein akademisch ist.

    Oder auch Scala, eine funktionale Sprache für die Java-VM. Rund um den Globus finden Konferenzen zu Scala statt, wo sich Computerwissenschaftler treffen, die das alles ganz toll finden. Aber richtig benutzen will diese Sprache irgendwie keiner. Zu viel erzwungene Abstraktion ist eben auch nicht gut.

    Hmm, habe mich viel mit FORTH befaßt, ist halt ein Ansatz, so ein Zwischending von OS, Programmiersprache auf Compreterbasis (Metacompiler oder FIG- Interpreter) und IDE für wirklich kleine Hardware zu schaffen. Das ist aber auch schon eine Abstraktion auf eine virtuelle Stackmaschine, richtig häßlich wird es mit Objective FORTH. Für den Einstieg nicht unbedingt geeignet.

    Scala hab ich mir auch angeschaut, aber alles, was auf der JVM aufsetzt, hat das Problem der enormen Startup- Time, was bedeutet, daß unglaublich viel Kram, von dem ich keine Ahnung habe, initiiert wird und den ich nicht kontrollieren kann. Ähnlich geht es mir mit .NET- RTs.

    Also wenn ich überhaupt einen Tip wage, dann wär's pures C++, weil da OOP mit drin ist, die Verwandtschaft zu C auch hardwarenahes Programmieren ermöglicht und diverse erweiterte Libs und Frameworks so ziemlich alles ermöglichen.



  • @Bernd_75 sagte in Wie am Besten einsteigen?:

    Warum überhaupt C++? Keine Ahnung, die Verwandtschaft zu meinem Mikrocontroller und die für mich verständliche Syntax haben wohl den Ausschlag gegeben. Und prinzipiell ist es ja erstmal egal wenn man bei fast 0 anfängt, auf welche Sprache sich man nun festlegt denke ich.

    Grüße,
    Bernd

    Es gab früher (in der Computersteinzeit) gute Grunde zuerst mit interpretierten Programmiersprachen anzufangen, weil ein fehlerhaftes Programm den ganzen Rechner zum Absturz brachte. Da das nicht mit der Fall ist, ist es im Prinzip egal womit man anfängt zu programmieren. Es gibt mittlerweile für sehr viele Programmiersprachen die notwendigen Entwicklerwerkzeuge kostenlos und in absolut traumhafter Qualität (im Vergleich zur oben angesprochen Zeit).

    Sofern Du nicht gleich mit GUI Programmierung anfangen willst (mit C++ deutlich steiniger), spricht nichts gegen C++. Insbesondere wenn Mikrocontroller immer noch ein angedachtes Ziel sind. Denn da wäre C die einzig sinnvolle Alternative, und C muss man sich meines Erachtens noch nicht einmal auf Microcontroller unbedingt antun auf einem Raspberry Pi o.ä. ist C definitiv ein Rückschritt.

    Was die Literatur betrifft, da bin ich nicht auf dem neusten Stand was Einsteigerliteratur betrifft. Aber bloß kein zuerst C und C++. Das sorgt nur für einen Programmierstil von den jeder erfahrenen C++-Programmierer nur wegwill. C is evil.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    Oder auch Scala, eine funktionale Sprache für die Java-VM. Rund um den Globus finden Konferenzen zu Scala statt, wo sich Computerwissenschaftler treffen, die das alles ganz toll finden. Aber richtig benutzen will diese Sprache irgendwie keiner.

    🤦♂
    Solche Theorien kann man ganz einfach überprüfen, indem man z.B. mal "scala" in eine Jobbörse eingibt.

    Und Haskell ist auch nicht rein akademisch, allerdings gibt es da schon sehr wenige ausgeschriebene Stellen in Deutschland. Das meiste findet im Bereich Blockchain, Fintech usw. statt, es hilft, die richtigen Leute zu kennen und/oder einen Namen in der Open-Source-Szene zu haben, wenn man da unterkommen will.