Wie am Besten einsteigen?



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



  • @john-0 sagte in Wie am Besten einsteigen?:

    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.

    Kannst du das genauer ausführen?
    Software kümmert sich nicht um Stil, sie soll eine Aufgabe erfüllen und die verwendete Programmiersprache eine Brücke dahin darstellen. Bestenfalls nachher lesbar sein.

    Was also hast Du gegen C oder C++?

    (Btw, C++ brauch ich fast nie)



  • @Sarkast

    C++ brauch ich fast nie

    Die Amish brauchen auch keine Autos. Ich fahre trotzdem nicht mit der Kutsche.

    Als Dennis Ritchie C vor rund 50 Jahren entworfen hat, war es eine geniale Idee. Heute ist es veraltete Technologie.





  • @manni66 sagte in Wie am Besten einsteigen?:

    @Sarkast

    C++ brauch ich fast nie

    Die Amish brauchen auch keine Autos. Ich fahre trotzdem nicht mit der Kutsche.

    Als Dennis Ritchie C vor rund 50 Jahren entworfen hat, war es eine geniale Idee. Heute ist es veraltete Technologie.

    Witzig. Ich schreibe fast nur hardwarenahes Zeug, aber es läuft so runtime- optimiert, daß ich mir keine Gedanken machen muß, die Compiler sind verdammt gut geworden, gilt bei größeren Sachen auch für C++. Es ging ja um die Einsteiger- Frage und nicht um den Ferrari. Da ist C++ keine dumme Wahl. Wie alt der Ansatz ist, spielt für mich eine untergeordnete Rolle, er muß zweckdienlich sein.
    Mit C(++) kann ich alles machen, aber schreib mal in Haskell einen Systemtreiber. 🤔



  • @Sarkast sagte in Wie am Besten einsteigen?:

    Kannst du das genauer ausführen?
    Software kümmert sich nicht um Stil, sie soll eine Aufgabe erfüllen und die verwendete Programmiersprache eine Brücke dahin darstellen. Bestenfalls nachher lesbar sein.

    Es geht darum wie man C++ lernen sollte. C++ ist eine eigenständige Programmiersprache, und es haben sich mittlerweile so viele Unterschiede in C++ zu C entwickelt, dass man mit zuerst C lernen und danach C++ lernen sich die Sache unnötig schwer macht.

    Ein wesentlicher Unterschied ist, dass C++ eine deutlich strenger typisierte Sprache als C ist. Das hat Konsequenzen. Dazu benutzt man in C++ so gut war keine nackten Pointer mehr. Man macht das nur, wenn es sehr triftige Gründe dafür gibt. Der Regelfall ist daher unique_ptr, shared_ptr, array oder vector zu nutzen. RAII funktioniert in C nun einmal nicht.

    Was also hast Du gegen C oder C++?

    Ich habe weder gegen das eine noch das andere etwas. Aber C zu lernen, um C++ zu lernen, ist kontraproduktiv. D.h. man lernt in C massenhaft Dinge, die man sich bei C++ gleich wieder abgewöhnen sollte. Z.B. was nützt das Wissen über malloc & free, wenn man es in C++ nie nutzen wird? Ok, man weiß wie man etwa numa_alloc_on_node nutzen kann, aber das ist doch schon sehr speziell. Zumal dann auch noch wissen muss wie man ein placement new auf dem freien Speicher ausführen muss.



  • @RBS2 sagte in Wie am Besten einsteigen?:

    C ist sexy.
    https://thebittheories.com/advantages-of-c-over-c-f31f61873997
    🐱

    Ich hätte einen Smiley hinzufügen sollen. P.S. Der Link ist wieder einmal …
    Dan Saks cppcon 2016 Vortrag



  • @john-0 sagte in Wie am Besten einsteigen?:

    Es geht darum wie man C++ lernen sollte. C++ ist eine eigenständige Programmiersprache, und es haben sich mittlerweile so viele Unterschiede in C++ zu C entwickelt, dass man mit zuerst C lernen und danach C++ lernen sich die Sache unnötig schwer macht.

    Ein wesentlicher Unterschied ist, dass C++ eine deutlich strenger typisierte Sprache als C ist. Das hat Konsequenzen. Dazu benutzt man in C++ so gut war keine nackten Pointer mehr. Man macht das nur, wenn es sehr triftige Gründe dafür gibt. Der Regelfall ist daher unique_ptr, shared_ptr, array oder vector zu nutzen. RAII funktioniert in C nun einmal nicht.

    Was also hast Du gegen C oder C++?

    Ich habe weder gegen das eine noch das andere etwas. Aber C zu lernen, um C++ zu lernen, ist kontraproduktiv. ...

    Ich habe das auch nicht behauptet, wollte auch eigentlich keinen Tip abgeben. Meine Vorliebe für C ruht darin, daß ich gerne verstehe, was nach Compiler- und Linkerlauf in der CPU landet. Bei C ist mir das klar, bei C++ nicht mehr, wie Klassen aufgelöst/instantiiert werden. Eine Art Kontrollverlust, die ich nicht mag.
    Nur, als Performance- Süchtiger kann ich mittlerweile sagen, daß gegen C++ als Einsteiger nichts spricht. Ist so ne Art Schweizer Armeemesser. Nur brauch ich persönlich weder Schere, noch Feile, Zahnstocher, Angelhaken nebst Nylonschnur im Gehenk.
    Aber man kann's problemlos nachordern bei C++, bei C wird's deutlich schwerer.