Scala und c++



  • Xin schrieb:

    kantaki schrieb:

    Naja ich werde C++ dann auch irgentwann anfangen zu lernen, mal schauen wie die sprache mit dann gefällt.

    Hmm... joah, wie könnte das wohl aussehen...

    Du wirst sie hassen, weil sie kompliziert ist und fehleranfällig und außerdem hat sie viel zu viel Boilerplate, außerdem funktioniert alles ganz anders als Du es gewohnt bist und für richtig empfindest und Du wirst damit nicht nur recht haben, Du wirst auch aufhören sie zu lernen, lange bevor Du verstehst, was sie eigentlich auszeichnet und warum es den Aufwand trotzdem wert ist.

    PS: irgenDwann... scnr

    Was zeichnet C++ denn aus? Warum C++ anstatt zB Scala?

    ps: In c++11 kamen ja Threads für Concurrency. Wie schwer ist es in c++ concurrent zu programmieren?



  • kantaki schrieb:

    Was zeichnet C++ denn aus? Warum C++ anstatt zB Scala?

    Ich schichte Dir bereits einen entsprechenden Link.

    Ich halte C++ für die derzeit ausgefeilteste Sprache für große und sehr Projekte. Darum - und nur darum - mache ich Webentwicklung in C++. Für eine Seite mit zwei, drei Funktionen würde ich das auch nicht tun.

    Es gibt einige Dinge, die - imho - für C++ sprechen. Es beginnt damit, dass C++ zu den Mainstream-Sprachen gehört und Scala eben nicht: Es ist durchaus von Vorteil, wenn man mit der Masse der Entwickler zusammenarbeiten kann. Ausgefallenere Sprachen, wie Scala, sind hier eher ein Bonus, selten die Grundvoraussetzung.

    C++ ist, wie soll man das beschreiben, eine grundsätzliche Sprache. Ein Fundament. Es gibt keinen Putz an den Wänden, man muss die Toilette selbst mit dem Eimer spülen, es ist eben nicht "schick". Aber Du kannst alles selbst sehen, begreifen, Einfluss nehmen und ausprobieren. Du kannst lernen, aus diesem scheinbaren Rohbau, ein Zuhause zu machen und Du bekommst dafür qualitatives Werkzeug an die Hand. Vor allem - und das halte ich für das wichtigste - Du lernst, was nicht geht. Dynamit sieht cool aus, ist aber meistens unpraktisch beim Häuserbau. Pointerarithmetik wäre so ein Dynamit. In C++ darfst Du damit spielen. Du musst nicht, aber wenn Du es mal eilig hast, ein Haus umzubauen, ist Pointerarithmetik das schnellste Mittel mal ein paar Wände zu versetzen - wenn man damit umgehen kann. In vielen anderen Sprachen ist Pointerarithmetik verboten, da gefährlich. Wenn Du Sprengmeister werden willst, wenn Du wirklich lernen willst, dann ist C++ Dein Spielplatz. Du lernst was nicht geht, weil das Programm explodiert - nicht weil das die Sprache es Dir verbietet.

    Wenn Du lernen willst, halte ich selbst Anzupacken für richtig, wenn Du alles selbst machen kannst, kannst Du auf Hilfswerkzeuge wie Java oder Scala umsteigen, die Dir Arbeit abnehmen. Du verstehst, aber welche Arbeiten diese Sprachen Dir abnehmen und was das für Deine Programmierung bedeutet. Und wenn das so nicht passt, kannst Du eine richtige Lösung in C++ formulieren, statt einen Workaround in Java oder C#.

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen. Genauso wie Dir Sprachen mit ausschließlich konstanten Objekten zuwider sind. Du wirst Templates Bauen, die Templates bauen, Du wirst Dir einen eigenen Werkzeugkasten mit Werkzeug füllen und Dich daraus wie aus einer Legobox bedienen und Dir über Mehrfachvererbung und generischen Typen in fünf Zeilen die Lösung für Dein Problem typsicher und ohne weiteren Implementierungsbedarf generieren lassen.

    Du fängst in einem dreckigen Rohbau an, aber Deine Werkzeuge arbeiten zuverlässig mit, wenn Du ein Hochhaus baust, die semantische Analyse des C++ Compilers hilft Dir, nachdem Du verstanden hast, Const-Correctness, Mehrfachvererbung und Templates richtig einzusetzen, den Überblick über sehr große Projekte zu behalten. Das lernt man nicht in Sprachen, die diese Konzepte nicht unterstützen.

    Ich zitiere dazu gerne Benjamin Lee Whorf: "Language shapes the way we think, and determines what we can think about."

    Ich lerne Scala als Bonus und ich werde Dich auf keinen Fall davon abhalten, Scala zu lernen - zumal ich von Scala nicht genug Ahnung habe, das überhaupt sinnvoll zu begründen. Der wichtigste Grund ist eben: Lerne von der Pike auf, wenn Du begreifen willst, was Du tust und was es bedeutet irgendwas zu tun. C++ tut nichts, ohne dass Du es explizit forderst. Damit lernst Du eben zu erkennen, was für eine Anweisung gefordert ist - auch in Sprachen, die diese Dinge implizit für Dich erledigen, ohne dass Du es bewusst mitbekommst.
    Die Programmiersprache bestimmt auch, was du als Programm formulieren und damit denken kannst. Und hier setzt Dir C++ kaum Grenzen, die über die Beschränkung der Maschine hinausgehen.

    Du kannst in C++ alles gestalten, was Du in Scala formulieren kannst. Eventuell musst Du mehr tippen, aber Du kannst jederzeit auch auf Werkzeuge wechseln, die Dir in Scala gar nicht angeboten werden.

    kantaki schrieb:

    ps: In c++11 kamen ja Threads für Concurrency. Wie schwer ist es in c++ concurrent zu programmieren?

    Habe ich in C++11 noch nicht ausprobiert, auch sonst habe ich das Problem bisher kaum. Eine qualifizierte Antwort kann ich Dir also nicht geben.
    Es gibt sicherlich Sprachen, die besser sind als C++ vor C++11, das bezweifle ich nicht entferntesten. Ob C++11 hier 'gut' ist, weiß ich nicht.

    Mein Webservice forkt derzeit einfach, das Verhalten ist definitiv nicht optimal, aber schnell implementiert, keine 10 Zeilen. Ich würde das als "einfach" bezeichnen. Hier müssen aber auch keine Ergebnisse wieder zusammengeführt werden. Da müsstest Du mich fragen, wenn ich an dieser Baustelle das aktuelle Provisorium abreiße.



  • Ich halte C++ für die derzeit ausgefeilteste Sprache für große und sehr Projekte. Darum - und nur darum - mache ich Webentwicklung in C++. Für eine Seite mit zwei, drei Funktionen würde ich das auch nicht tun.

    Ach, und wieviele Sprachen kennst du? Schon vergleichbares ich Scheme, Lisp oder Clojure probiert?

    Du lernst, was nicht geht.

    Was geht denn nicht?

    Wenn Du lernen willst, halte ich selbst Anzupacken für richtig

    Und was ist mit C oder gar ASM?

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen

    Nein, ich hasse C nicht. So emotional gehe ich da nicht heran.

    "Language shapes the way we think, and determines what we can think about."

    Wieviel Sprachen kennst du und kannst du? Ach verdammt, ich drehe mich im Kreis.

    Verstehe mich nicht falsch, aber gegen fast jeden deiner Punkte koennen leicht Gegenargumente gefunden werden.

    In c++11 kamen ja Threads für Concurrency. Wie schwer ist es in c++ concurrent zu programmieren?

    Die Sprache nimmt dir das Denken nicht ab. Deswegen: Genauso schwer.



  • Xin schrieb:

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen. Genauso wie Dir Sprachen mit ausschließlich konstanten Objekten zuwider sind. Du wirst Templates Bauen, die Templates bauen, Du wirst Dir einen eigenen Werkzeugkasten mit Werkzeug füllen und Dich daraus wie aus einer Legobox bedienen und Dir über Mehrfachvererbung und generischen Typen in fünf Zeilen die Lösung für Dein Problem typsicher und ohne weiteren Implementierungsbedarf generieren lassen.

    Du fängst in einem dreckigen Rohbau an, aber Deine Werkzeuge arbeiten zuverlässig mit, wenn Du ein Hochhaus baust, die semantische Analyse des C++ Compilers hilft Dir, nachdem Du verstanden hast, Const-Correctness, Mehrfachvererbung und Templates richtig einzusetzen, den Überblick über sehr große Projekte zu behalten. Das lernt man nicht in Sprachen, die diese Konzepte nicht unterstützen.

    All diese Konzepte werden in Scala auch oder in ähnlicher Form angeboten (einzige Ausnahme: Fundament verändern). Seiteneffektfreies Programmieren z.B., das durch const-correctness ermöglicht wird, gehört bei Scala zu einem der Grundkonzepte der Sprache (funktionale Programmierung). Allgemein kann man bei funktionalen Programmiersprachen verdammt viel lernen (vor allem Programmierkonzepte) was einem das Leben sehr erleichtern kann. Das Wissen kann man dann auch ohne Probleme in anderen Sprachen wie C++ anwenden und sich daran erfreuen.
    Ich bezweifle, dass man all den Nutzen von const-correctness vollständig verstehen kann ohne eine funktionale Programmiersprache, wie Scala oder Haskell, richtig zu beherrschen. Auf der anderen Seite, stimme ich dir zu, dass man Probleme bekommen dürfte die Abstraktionen von Scala oder Haskell lieben zu lernen oder gar nur zu verstehen wenn man sich noch nie mit einer Sprache beschäftigt hat, mit der man mehr low-level programmieren kann.

    Es fällt mir daher schwer eine Empfehlung auszusprechen ob man (speziell der TO) eher mit Scala oder C++ weiterarbeiten sollte. C++ ist noch ein klein weniger mächtiger als Scala (da man eben Zugriff auf die Bit und Bytes des Rechners hat, auf die man mit Scala nicht zugreifen kann) und vor allem viel mehr verbreitet und angesehen. Auf der anderen Seite sieht C++ einfach kacke aus. 😉 Scala erlaubt kürzeren, schöneren und deswegen vermutlich auch wartbareren Code. Scalas Macros und Typsystem ist reines Scala - C++ Templates dagegen sind mehr eine eigenen Programmiersprache bzw. DSL in C++. Scala wirkt somit mehr wie aus einem Stück gegossen.

    Weiterhin muss ich hier auch einfach sagen, dass es unglaublich lange dauern wird jemals all diese Features auszureizen. Es wird vermutlich nur sehr wenigen gelingen ernsthaft zu sagen, dass sie C++ oder Scala "sehr gut" beherrschen, wenn sie darin weniger als 10 Jahre Erfahrung haben (zumindest wenn man nicht nur die Grundsprache meint, also die Teile einer Sprache, die man ständig braucht, sondern wirklich alle möglichen Features). Ebenso dürfte es auch nur für die wenigsten interessant sein, all diese Sachen jemals zu können.

    Speziell nun an den TO: Ich würde also sagen, fange mit der Sprache an, die dir momentan mehr Spaß macht (du hast gemeint, dass das Scala wäre). In 2-3 Jahren kannst du dir C++ dann immer noch angucken, du musst Scala ja nicht bis zum geht nicht mehr ausgereizt haben um dir eine andere Sprache angucken zu können (hast du ja bisher auch nicht gemacht). Besonders empfehlenswert finde ich C++ als "Nebensprache" zu lernen, bei mir ist das momentan Haskell. Immer dann wenn ich ein funktionales Konzept in Scala vorfinde, das ich nicht verstehe, dann gehe ich zu Haskell, versuche es dort nachzubauen und damit zu verstehen, damit ich dann zu Scala zurück gehen und es dort anwenden kann.

    Xin schrieb:

    Du kannst in C++ alles gestalten, was Du in Scala formulieren kannst. Eventuell musst Du mehr tippen, aber Du kannst jederzeit auch auf Werkzeuge wechseln, die Dir in Scala gar nicht angeboten werden.

    Ich bin mir nicht ganz sicher ob Scala nicht auch etwas kann, dass C++ nicht kann 😉 Kann man in C++ dem Compiler sagen, dass er z.B. auf eine Datenbank zugreifen soll um daraus Informationen zu holen, die zur Compilierung des Programms benötigt werden? Und sind Templates eigentlich turingvollständig?

    knivil schrieb:

    Ich halte C++ für die derzeit ausgefeilteste Sprache für große und sehr Projekte. Darum - und nur darum - mache ich Webentwicklung in C++. Für eine Seite mit zwei, drei Funktionen würde ich das auch nicht tun.

    Ach, und wieviele Sprachen kennst du? Schon vergleichbares ich Scheme, Lisp oder Clojure probiert?

    Nichts gegen diese Sprachen, aber sie sind nun mal dynamisch typisiert. Für mich wäre das ein Ausschlusskriterium um sie in größeren Projekten einzusetzen.



  • knivil schrieb:

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen

    Nein, ich hasse C nicht. So emotional gehe ich da nicht heran.

    Soll das heißen in C achtest du nicht auf Const-Correctness? 😃



  • um dir eine andere Sprache angucken zu können (hast du ja bisher auch nicht gemacht).

    Ich habe mir sogut wie alle bekannten Sprachen abgeschaut. Und mit angeschaut meine ich jeweils ein Buch gelesen und mit der Sprache gearbeitet. Bisher gefiel mir Scala am besten, allerdings war es auch meine erste "funktionale" Sprache.

    Ich denke ich schaue mir aufjedenfall auch noch haskell, lisp und Erlang an.

    Aber ich denke ich werde erst einmal bei scala beleiben.



  • knivil schrieb:

    Ich halte C++ für die derzeit ausgefeilteste Sprache für große und sehr Projekte. Darum - und nur darum - mache ich Webentwicklung in C++. Für eine Seite mit zwei, drei Funktionen würde ich das auch nicht tun.

    Ach, und wieviele Sprachen kennst du? Schon vergleichbares ich Scheme, Lisp oder Clojure probiert?

    Joah, das übliche "Du bist Scheiße"... erstaunlich, wieso wusste ich es, als ich das letzte Posting abgeschickt habe? ^^

    Keine Ahnung, wieviele ich kenne. Zählen Dialekte? Also zum Beispiel Motorola Assembler und Intel Assembler? Gibt's überhaupt eine Chance, eine Zahl zu nennen, die hoch genug ist, um Deinen Segen zu haben?

    Scheme nein, Lisp ja, Clojure nein. Und was sagt Dir das jetzt? Es gibt bestimmt 1000 Sprachen, die ich noch nicht kenne, also kann ich nur unfähig sein. 🙂

    knivil schrieb:

    Du lernst, was nicht geht.

    Was geht denn nicht?

    ((int)0)=0; // <- geht in der Regel nicht.
    Kann man gelegentlich aber trotzdem sinnvoll verwenden.

    Und noch ein paar andere Dinge. Wer weiß, was man nicht macht, kann mit dem Rest programmieren.

    knivil schrieb:

    Wenn Du lernen willst, halte ich selbst Anzupacken für richtig

    Und was ist mit C oder gar ASM?

    Sehr zu empfehlen! OOP bringe ich den Leuten bevorzugt mit C bei, damit sie es "begreifen".

    Assembler habe ich auch ein paar Jahre programmiert, da lernt man erst zu denken und dann zu programmieren. Das bekommt man aber kaum vermittelt, denn wie blöd muss einer sein, wenn er heute noch Assembler lernt und wie arrogant muss ich sein, wenn ich erzählen würde, dass ich als größer Assemblerprogrammierer soviel besser denken könnte als die Nicht-Assemblerprogrammierer. Außerdem geht's ja um Konzepte und nicht um Sprachen... jaja... weil ich auf die Diskussion keinen Bock habe, lasse ich den Rat zu Assembler weg und rate nur den Leuten dazu, die das mit dem Programmierenlernen wirklich ernst meinen oder von mir programmieren lernen wollen.
    Für den Rest bin ich nicht verantwortlich, die können machen, was sie für richtig halten.

    knivil schrieb:

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen

    Nein, ich hasse C nicht. So emotional gehe ich da nicht heran.

    Brauchst Du ja auch nicht, struct Bla const * ist in C ja auch nicht verboten.

    knivil schrieb:

    "Language shapes the way we think, and determines what we can think about."

    Wieviel Sprachen kennst du und kannst du? Ach verdammt, ich drehe mich im Kreis.

    Joah, wird nicht spannender.

    Aktiv programmiert, also mindestens ein Jahr oder länger, habe ich in diversen Basics, Assembler auf mehreren Plattformen, pures C, C++, Delphi, PHP, Java, JavaScript, C# und einer Lisp-ähnlichen Sprache, die ich dank gleichartiger Klammersetzung gehasst habe, sowie Prolog.

    Ich habe 1986 angefangen zu programmieren. Das heißt also nicht, dass ich alles gleichzeitig gemacht habe. Nur C++ mache ich seit 1994 durchgehend. Mit PHP oder Java plane ich in diesem Leben nichts erwähnenswertes mehr zu machen. Java stirbt eh weg, von daher werde ich da wohl auch nicht mehr in Versuchung kommen.

    Ansonsten immer mal wieder etwas Python, Perl, Bash, ... ach keine Ahnung, früher hatte ich mal eine Liste, inzwischen interessiert es mich eigentlich nicht mehr.

    Aktuell lerne ich Scala, aber nicht, um sie aktiv zu verwenden.

    knivil schrieb:

    Verstehe mich nicht falsch, aber gegen fast jeden deiner Punkte koennen leicht Gegenargumente gefunden werden.

    Dann hoffen wir, dass "Wieviel Sprachen kennst Du?" nicht Dein bestes Argument war.
    Da ist ein kläffender Hund hinter'm Tor jedenfalls imposanter.

    Was programmierst Du? Was! Was! Was! Was!... 😉

    In c++11 kamen ja Threads für Concurrency. Wie schwer ist es in c++ concurrent zu programmieren?

    Die Sprache nimmt dir das Denken nicht ab. Deswegen: Genauso schwer.[/quote]
    Das ist zu vermuten. Ich habe es noch nicht ausprobiert, von daher muss ich Dir da einfach mal glauben, dass Du das besser weißt.

    kantaki schrieb:

    Aber ich denke ich werde erst einmal bei scala beleiben.

    Habe ich kein Problem mit. Viel Spaß. 🙂



  • knivil schrieb:

    Ich halte C++ für die derzeit ausgefeilteste Sprache für große und sehr Projekte. Darum - und nur darum - mache ich Webentwicklung in C++. Für eine Seite mit zwei, drei Funktionen würde ich das auch nicht tun.

    Ach, und wieviele Sprachen kennst du? Schon vergleichbares ich Scheme, Lisp oder Clojure probiert?

    Joah, das übliche "Du bist Scheiße"... erstaunlich, wieso wusste ich es, als ich das letzte Posting abgeschickt habe? ^^

    Keine Ahnung, wieviele ich kenne. Zählen Dialekte? Also zum Beispiel Motorola Assembler und Intel Assembler? Gibt's überhaupt eine Chance, eine Zahl zu nennen, die hoch genug ist, um Deinen Segen zu haben?

    Scheme nein, Lisp ja, Clojure nein. Und was sagt Dir das jetzt? Es gibt bestimmt 1000 Sprachen, die ich noch nicht kenne, also kann ich nur unfähig sein. 🙂

    knivil schrieb:

    Du lernst, was nicht geht.

    Was geht denn nicht?

    ((int)0)=0; // <- geht in der Regel nicht.
    Kann man gelegentlich aber trotzdem sinnvoll verwenden.

    Und noch ein paar andere Dinge. Wer weiß, was man nicht macht, kann mit dem Rest programmieren.

    knivil schrieb:

    Wenn Du lernen willst, halte ich selbst Anzupacken für richtig

    Und was ist mit C oder gar ASM?

    Sehr zu empfehlen! OOP bringe ich den Leuten bevorzugt mit C bei, damit sie es "begreifen".

    Assembler habe ich auch ein paar Jahre programmiert, da lernt man erst zu denken und dann zu programmieren. Das bekommt man aber kaum vermittelt, denn wie blöd muss einer sein, wenn er heute noch Assembler lernt und wie arrogant muss ich sein, wenn ich erzählen würde, dass ich als größer Assemblerprogrammierer soviel besser denken könnte als die Nicht-Assemblerprogrammierer. Außerdem geht's ja um Konzepte und nicht um Sprachen... jaja... weil ich auf die Diskussion keinen Bock habe, lasse ich den Rat zu Assembler weg und rate nur den Leuten dazu, die das mit dem Programmierenlernen wirklich ernst meinen oder von mir programmieren lernen wollen.
    Für den Rest bin ich nicht verantwortlich, die können machen, was sie für richtig halten.

    knivil schrieb:

    Wenn Du von C++ kommst, wirst Du Sprachen ohne Const-Correctness hassen

    Nein, ich hasse C nicht. So emotional gehe ich da nicht heran.

    Brauchst Du ja auch nicht, struct Bla const * ist in C ja auch nicht verboten.

    knivil schrieb:

    "Language shapes the way we think, and determines what we can think about."

    Wieviel Sprachen kennst du und kannst du? Ach verdammt, ich drehe mich im Kreis.

    Joah, wird nicht spannender.

    Aktiv programmiert, also mindestens ein Jahr oder länger, habe ich in diversen Basics, Assembler auf mehreren Plattformen, pures C, C++, Delphi, PHP, Java, JavaScript, C# und einer Lisp-ähnlichen Sprache, die ich dank gleichartiger Klammersetzung gehasst habe, sowie Prolog.

    Ich habe 1986 angefangen zu programmieren. Das heißt also nicht, dass ich alles gleichzeitig gemacht habe. Nur C++ mache ich seit 1994 durchgehend. Mit PHP oder Java plane ich in diesem Leben nichts erwähnenswertes mehr zu machen. Java stirbt eh weg, von daher werde ich da wohl auch nicht mehr in Versuchung kommen.

    Ansonsten immer mal wieder etwas Python, Perl, Bash, ... ach keine Ahnung, früher hatte ich mal eine Liste, inzwischen interessiert es mich eigentlich nicht mehr.

    Aktuell lerne ich Scala, aber nicht, um sie aktiv zu verwenden.

    knivil schrieb:

    Verstehe mich nicht falsch, aber gegen fast jeden deiner Punkte koennen leicht Gegenargumente gefunden werden.

    Dann hoffen wir, dass "Wieviel Sprachen kennst Du?" nicht Dein bestes Argument war.
    Da ist ein kläffender Hund hinter'm Tor jedenfalls imposanter.

    Was programmierst Du? Was! Was! Was! Was!... 😉

    In c++11 kamen ja Threads für Concurrency. Wie schwer ist es in c++ concurrent zu programmieren?

    Die Sprache nimmt dir das Denken nicht ab. Deswegen: Genauso schwer.[/quote]
    Das ist zu vermuten. Ich habe es noch nicht ausprobiert, von daher muss ich Dir da einfach mal glauben, dass Du das besser weißt.

    kantaki schrieb:

    Aber ich denke ich werde erst einmal bei scala beleiben.

    Habe ich kein Problem mit. Viel Spaß. 🙂



  • ((int)0)=0; // <- geht in der Regel nicht.

    Da sind wir schon, in der Regel. Hab hier ein System, da geht das.

    Gibt's überhaupt eine Chance, eine Zahl zu nennen, die hoch genug ist, um Deinen Segen zu haben?

    Das war eine rhetorische Frage. Auf den Unterschied zwischen Kennen und Koennen habe ich hingewiesen.

    die ich dank gleichartiger Klammersetzung gehasst habe

    Naja, man gewoehnt sich dran. Spaeter sieht man die Klammern einfach nicht mehr. Ueber das Leerzeichen zw. Woertern beschwere ich mich ja auch nicht.

    Ich verzichte Mal auf den Rest, der ist mir insgesamt zu allgein gehalten. Fuer alle anti-dynamisch Typisierer oder Webprogrammierer etc.: http://www.paulgraham.com/avg.html . Ach und Programmiersprachen sind keine Religion.

    Das ist zu vermuten. Ich habe es noch nicht ausprobiert, von daher muss ich Dir da einfach mal glauben, dass Du das besser weißt.

    Die meisten Sprachen bringen komfortable Bibliotheken mit, die einem das Leben angenhmen machen.



  • knivil schrieb:

    ((int)0)=0; // <- geht in der Regel nicht.

    Da sind wir schon, in der Regel. Hab hier ein System, da geht das.

    Na, ist doch super, dann programmiere Du so und ich bringe meinen Schülern bei, dass das keine gute Idee ist.

    knivil schrieb:

    Gibt's überhaupt eine Chance, eine Zahl zu nennen, die hoch genug ist, um Deinen Segen zu haben?

    Das war eine rhetorische Frage.

    Wie, echt jetzt?

    knivil schrieb:

    die ich dank gleichartiger Klammersetzung gehasst habe

    Naja, man gewoehnt sich dran. Spaeter sieht man die Klammern einfach nicht mehr.

    Ich bin nicht "man".

    Die meisten Sprachen bringen komfortable Bibliotheken mit, die einem das Leben angenhmen machen.

    "Ich verzichte Mal auf den Rest, der ist mir insgesamt zu allgein gehalten."

    Um dem Gespräch mit Dir hier irgendeinen Sinn zu geben: Jemand stellt eine Frage, er wünscht sich eine Antwort. Da hier Menschen mit unterschiedlichen Erfahrungen antworten, wird er auch unterschiedliche Antworten erhalten.

    Ich halte C++ für die ideale Einstiegssprache aus genau den Gründen, weswegen die meisten C++ für eine schlechte Einstiegssprache halten: Weil man begreifen muss. Ich unterrichtete Leute im Programmieren, ich weiß ziemlich genau, was Anfänger verstehen und wo es üblicherweise Erklärungsbedarf gibt. Es gibt Feedback auf das, was ich tue. Ich weiß auch, wohin der Threadstarter unterwegs ist, weil ich diese Leute dann abholen und mit denen "Gruppentherapie" machen durfte, um die verkorksten Vorstellungen gerade zu biegen.
    Aus dem Threadstarter kann ein ganz toller Programmierer werden, wenn er (selbst-)kritisch an die Sache rangeht. Dafür braucht er entweder den richtigen Weg oder sehr, sehr viel Erfahrung.
    Ich habe auch mit Basic angefangen, aber da war ich Grundschüler. Ich habe inzwischen sehr, sehr viel Erfahrung, denn ich hatte keinen, der mir erklärte, wie ich von da, wo ich bin, am besten voran komme.
    Wahrscheinlich wird er sich aber mit dem gewählten Weg irgendwo verhaspeln, wenn er keinen Mentor hat, der dafür sorgt, dass er sich die konkrete Funktionsweise eines Computers aus einer abstrakten Sprache zusammen phantasiert und ihn wieder auf den richtigen Weg bringt, wenn er sich verhaspelt. Aber das darf jeder für sich entscheiden.

    Und dann kommen die "knivels", die das alles besser wissen.
    Hast Du irgendwas sinnvolles in diesem Thread beigetragen, was dem Threadstarter geholfen hat, außer vollkommen unbegründet "Ich bevorzuge Closure" zu schreiben. Nun denn, ich habe die Karten auf den Tisch gelegt und ich habe mal deine letzten Postings im Board überflogen. Was kannst Du eigentlich - außer Lispklammern zählen und dagegen sein?

    --------------------------------------------------------------------
    Antoras hatte ich übersehen:

    Antoras schrieb:

    Ich bezweifle, dass man all den Nutzen von const-correctness vollständig verstehen kann ohne eine funktionale Programmiersprache, wie Scala oder Haskell, richtig zu beherrschen.

    Der Aha-Effekt lässt sich in wenigen Zeilen Code herstellen. Wie ich schon schrieb, ich bringe den Leuten nicht bei gute Programme zu schreiben, sondern schlechte Programme. Dann kommt der Aha-Effekt und sie wissen, warum sie das nicht tun sollten.

    Antoras schrieb:

    Auf der anderen Seite, stimme ich dir zu, dass man Probleme bekommen dürfte die Abstraktionen von Scala oder Haskell lieben zu lernen oder gar nur zu verstehen wenn man sich noch nie mit einer Sprache beschäftigt hat, mit der man mehr low-level programmieren kann.

    Und ich habe die Erfahrung gemacht, dass Leute, die von Low-Level aufsteigen, auch High-Level leichter verstehen. Wer von High-Level auf Low-Level kommt, muss sich im High-Level-Bereich danach häufig neu orientieren - was überflüssig ist, wenn man sein Know-How mit einem Fundament beginnt.

    Antoras schrieb:

    Es fällt mir daher schwer eine Empfehlung auszusprechen ob man (speziell der TO) eher mit Scala oder C++ weiterarbeiten sollte. C++ ist noch ein klein weniger mächtiger als Scala (da man eben Zugriff auf die Bit und Bytes des Rechners hat, auf die man mit Scala nicht zugreifen kann) und vor allem viel mehr verbreitet und angesehen. Auf der anderen Seite sieht C++ einfach kacke aus. 😉

    Wenn man WinAPI-Programmierung oder MFC macht, definitiv.

    Das mache ich gegen finanzielle Bestechung, wenn es sein muss. Man kann aber auch sehr schönes C++ schreiben.

    Antoras schrieb:

    Scala wirkt somit mehr wie aus einem Stück gegossen.

    Ja, eine heile Welt, die schön und sauber ist, aber mit der Realität wenig zu tun hat.

    Stell Dir eine Toilette in einem deutschen Neubau vor. Sauber gefliest, alles Hochglanz. Und jetzt gehst Du in die weite Welt hinaus und stellst fest, dass man anderswo über einem Loch hockt. Mit etwas Glück handelt es sich um eine französische Schüssel, aber es könnte auch einfach ein Loch in der Erde sein. Wie auch immer - so sieht die Realität aus.
    Und wer programmieren lernen möchte, sollte sich in der Realität zurecht finden, nicht nur in einem sauber gefliesten Bad auf modernstem Stand: Das gibt's nämlich da draußen in der Regel nicht.
    Unser ganz reales Erdloch, das unser Überleben sichert, heißt übrigens Fortran. Und im Vergleich dazu ist eine C++ Schüssel, auf der man wenigstens mit einem Eimer selbst spülen kann, echter Luxus.

    Auf Scala programmieren lernen ist wie in der Fahrschule mit Automatik lernen. Man kann Auto fahren, aber es fahren so wenig passende Autos herum.

    Antoras schrieb:

    Speziell nun an den TO: Ich würde also sagen, fange mit der Sprache an, die dir momentan mehr Spaß macht (du hast gemeint, dass das Scala wäre). In 2-3 Jahren kannst du dir C++ dann immer noch angucken, du musst Scala ja nicht bis zum geht nicht mehr ausgereizt haben um dir eine andere Sprache angucken zu können (hast du ja bisher auch nicht gemacht).

    Spaß ist der wichtige Faktor. Macht das ganze keinen Spaß, hat man keine Motivation. Ohne Motivation, kann man es eh bleiben lassen. Scala und Spaß dabei haben ist in jedem Fall besser als C++ ohne es wirklich zu wollen..

    Xin schrieb:

    Ich bin mir nicht ganz sicher ob Scala nicht auch etwas kann, dass C++ nicht kann 😉 Kann man in C++ dem Compiler sagen, dass er z.B. auf eine Datenbank zugreifen soll um daraus Informationen zu holen, die zur Compilierung des Programms benötigt werden?

    Hehehe, das ist eine böse Falle... ^^
    Ich bin versucht zu sagen, dass die Vorbereitung der Kompilierung eigentlich nicht Sache des Compilers ist, aber da ich selbst an einem Compiler arbeite, der nicht wie üblicherweise die Compilerphasen abarbeitet und fertig, kann ich nur sagen, dass ich nicht sehe, wieso ein Compiler eine Verbindung mit einer Datenbank aufnehmen müsste.

    Xin schrieb:

    Und sind Templates eigentlich turingvollständig?

    Sind Kaffeemaschinen turingvollständig?

    Ich habe mich nie mit Template-Metaprogrammierung beschäftigt, ich halte das für Blödsinn. Aber Templates sind ein gutes Werkzeug und Kaffeemaschinen sind praktisch, wenn man Kaffee möchte.

    Xin schrieb:

    Nichts gegen diese Sprachen, aber sie sind nun mal dynamisch typisiert. Für mich wäre das ein Ausschlusskriterium um sie in größeren Projekten einzusetzen.

    👍 👍 👍



  • Ich unterrichtete Leute im Programmieren, ich weiß ziemlich genau, was Anfänger verstehen und wo es üblicherweise Erklärungsbedarf gibt. ...

    Jajajaja, mein Hintergrund ist aehnlich, aber ich bin dort nicht haengen geblieben und stelle ihn selten heraus.

    Um dem Gespräch mit Dir hier irgendeinen Sinn zu geben

    Wir sind bereits auf Seite 5.



  • Xin schrieb:

    kantaki schrieb:

    Was sind denn die großen Vorteile von C++?

    http://www.proggen.org/doku.php?id=start:cppjava

    Proggen.org schrieb:

    C ist wie Mathematik - es wird erst schwer, wenn man gelernt hat, dass es schwer ist - und es bleibt nur solange schwer, wie man glaubt, dass es schwer wäre.

    Was ist an C schwer? Ich finde C++, Java und selbst Python komplexer. Weshalb? Weil die so viel Abstraktion bieten. C ist hingegen richtig schön komptakt und so schön "konkret". In C zu programmieren mag aufwändiger sein, wenn man das gleiche erreichen will wie in C++ oder Java und erst dadurch steigt die Komplexität, aber die Einstiegshürde halte ich bei C für deutlich geringer als in Java oder C++.

    L. G.
    Steffo



  • Steffo schrieb:

    Xin schrieb:

    kantaki schrieb:

    Was sind denn die großen Vorteile von C++?

    http://www.proggen.org/doku.php?id=start:cppjava

    Proggen.org schrieb:

    C ist wie Mathematik - es wird erst schwer, wenn man gelernt hat, dass es schwer ist - und es bleibt nur solange schwer, wie man glaubt, dass es schwer wäre.

    Was ist an C schwer?

    Nix... solange man dem Schüler nicht erklärt, dass das, was er lernt schwer wäre. Was schwer ist, kann man ja nicht verstehen, also muss man es ja falsch verstehen, wenn man es einfach so versteht.

    Das ist das Hauptproblem, wenn man Programmierern C und C++ beibringen soll: dass diese akzeptieren müssen, dass es wirklich so einfach ist und man nicht von hinten durch die Brust ins Auge denken muss, weil jeder sagt, dass es so schwer wäre.

    Proggen.org schrieb:

    Ich finde C++, Java und selbst Python komplexer. Weshalb? Weil die so viel Abstraktion bieten.

    Findest Du? Templates sind eine Abstraktion höher.

    Als ich C++ lernte, war Abstraktion nicht mein Problem - mir fiel nur auf, das andere ähnliche in C programmierern, wie ich - und sich mit C++ das Leben vereinfachen ließen.
    Mein aktuelles (C-)Programm habe ich mit einem guten Editor auf C++ umgestellt. Automatisierte Textersetzung. Über 5000 automatische Änderungen in 2 Tagen, bevor es wieder kompilierte. Danach war was es klassenbasiert.
    OOP findet in C ebenfalls statt, weil es eben kein C++-Feature ist, kein Paradigma, sondern eine Problemlösung. Hat man in C ein Problem, dass OOP verlangt, löst man das. In C++ geht das eleganter, aber nicht weniger abstrakt.

    knivil schrieb:

    Jajajaja, mein Hintergrund ist aehnlich, aber ich bin dort nicht haengen geblieben und stelle ihn selten heraus.

    Jaja, Knivil, Du stellst überhaupt nichts heraus. Du bist mein Held.



  • Hi,

    vielleicht interessant für die Scala-Interessierten:
    https://www.coursera.org/course/progfun

    Ist immerhin vom Erfinder der Sprache.



  • Xin schrieb:

    Der Aha-Effekt lässt sich in wenigen Zeilen Code herstellen. Wie ich schon schrieb, ich bringe den Leuten nicht bei gute Programme zu schreiben, sondern schlechte Programme. Dann kommt der Aha-Effekt und sie wissen, warum sie das nicht tun sollten.

    Finde ich gut aber ich glaube nicht, dass man den Leuten alles nach dem Bottom-Up Prinzip beibringen kann. Manchmal muss man einfach zeigen wie es besser geht bzw. die Leute dazu zwingen es anders zu machen. Auf viele kluge Gedanken kommt man sonst einfach nicht, weil man es aus eigener Kraft nicht schafft abstrahiert genug zu denken.

    Xin schrieb:

    Antoras schrieb:

    Es fällt mir daher schwer eine Empfehlung auszusprechen ob man (speziell der TO) eher mit Scala oder C++ weiterarbeiten sollte. C++ ist noch ein klein weniger mächtiger als Scala (da man eben Zugriff auf die Bit und Bytes des Rechners hat, auf die man mit Scala nicht zugreifen kann) und vor allem viel mehr verbreitet und angesehen. Auf der anderen Seite sieht C++ einfach kacke aus. 😉

    Wenn man WinAPI-Programmierung oder MFC macht, definitiv.

    Da Schönheit bekanntlich im Auge des Betrachters liegt werde ich das nicht weiter kommentieren. 😉

    Xin schrieb:

    Auf Scala programmieren lernen ist wie in der Fahrschule mit Automatik lernen. Man kann Auto fahren, aber es fahren so wenig passende Autos herum.

    Der TO ist ja kein kompletter Neueinsteiger mehr - als erste Programmiersprache würde ich Scala auch nicht empfehlen. Und wer weiß was die Zukunft bringt, vllt. erlangt Scala ja mal so etwas wie Weltherrschaft. Wie hat Linux Torvalds gesagt? Wäre nicht notwendig, aber schön wenn es passiert.

    Xin schrieb:

    Spaß ist der wichtige Faktor. Macht das ganze keinen Spaß, hat man keine Motivation. Ohne Motivation, kann man es eh bleiben lassen. Scala und Spaß dabei haben ist in jedem Fall besser als C++ ohne es wirklich zu wollen.

    Deswegen würde ich, wie gesagt, bilingual lernen. Haskell lerne ich nur weil ich weiß, dass ich damit viel lernen kann, nicht weil mich die Sprache wirklich überzeugt hat. Mit dieser Methode werde ich zwar nie ein Profi in Haskell aber lerne zumindest genug um mal damit arbeiten zu können falls es mal gefordert wäre.

    Xin schrieb:

    Ich bin versucht zu sagen, dass die Vorbereitung der Kompilierung eigentlich nicht Sache des Compilers ist, aber da ich selbst an einem Compiler arbeite, der nicht wie üblicherweise die Compilerphasen abarbeitet und fertig, kann ich nur sagen, dass ich nicht sehe, wieso ein Compiler eine Verbindung mit einer Datenbank aufnehmen müsste.

    In Scala entsteht z.B. gerade ein Framework, das eine bessere Alternative zu ORM-Frameworks sein soll. Ziel ist es, 100% objektorientiertes Scala schreiben zu können ohne dabei den Overhead von ORM in Kauf nehmen zu müssen. Der Compiler (bzw. der Autor der Macro-Bibliothek) soll dazu den Code analysieren um daraus z.B. mehr oder weniger optimale SQL-Befehlen generieren mit denen dann intern auf das DBMS zugegriffen werden kann (inklusive Anlegung von Tabellen usw.), ohne, dass der Benutzer etwas davon merkt.

    Xin schrieb:

    Ich habe mich nie mit Template-Metaprogrammierung beschäftigt, ich halte das für Blödsinn.

    Man kann damit schon ganz interessante (und auch sinnvolle) Sachen machen. Union-types gefallen mir z.B. ganz gut, sind nämlich sehr schön in Scala zu implementieren, auch wenn das wohl keine Turingvollständigkeit erfordert.


Anmelden zum Antworten