Welche Sprache lernen?



  • pumuckl schrieb:

    Wenn man den C++-Code richtig schreibt

    for (int s=33; s<256; ++s) 
    {
      cout << s << static_cast<char>(s) << endl;
    }
    

    ok, die geschweiften klammern sind ziemlich wichtig, aber der rest sieht weiterhin furchterregend aus. vielleicht sollte man aus '++s' besser 's=s+1' machen, die variablendeklaration aus der schleife rausnehmen und statt 'cout' printf verwenden, was auch den hässlichen cast, die << und das 'endl' beseitigt. damit führt man zwar einen, für anfänger undurchsichtigen printf-formatstring ein, aber das wäre wohl das kleinere übel.

    pumuckl schrieb:

    Deine Argumentation lautet also in etwa "Beim BASIC versteht jeder sofort alles bis auf das was wichtig ist um das ganze Programm richtig zu verstehen. Beim C++ versteht man erstmal nicht alles, weil man die Dinge nicht kennt, die wichtig sind um das Programm richtig zu verstehen". Etwas einseitig.

    nee, ich sage: bei basic versteht man auf anhieb (oder zumindest ohne grössere schwierigkeiten) den ablauf, weil man's nur mit einfachen, englischen wörtern zu tun hat (for, to, next, goto, usw.) und nicht mit seltsamen zeichen wie <<, ++ und grausamen dingen wie static_cast<a>(b). für anfänger sind schnelle aha-effekte sehr wichtig. später, wenn man die fundamentalsten grundlagen der programmierung gelernt hat, kann man sich immer noch auf sprachen mit kryptischer syntax (z.b. C-ähnlich) stürzen.



  • Hey, wie waere es denn mal mit etwas anderem zum Einstieg? Lisp, Scheme oder Haskell zum Beispiel. Gibt auch gute Buecher und video lectures (alles online).



  • ;fricky schrieb:

    ok, die geschweiften klammern sind ziemlich wichtig, aber der rest sieht weiterhin furchterregend aus. vielleicht sollte man aus '++s' besser 's=s+1' machen,

    könnte man. Die halbe Zeile "der ++_Operator erhöht das Argument um 1" finde ich allerdings nicht so schwer zu verstehen.

    die variablendeklaration aus der schleife rausnehmen

    Halte ich für irreführend. Gerade die Deklaration im Schleifenkopf macht noch deutlicher dass es in der Schleife um diese Variable geht.

    und statt 'cout' printf verwenden, was auch den hässlichen cast, die << und das 'endl' beseitigt. damit führt man zwar einen, für anfänger undurchsichtigen printf-formatstring ein, aber das wäre wohl das kleinere übel.

    Sehe ich anders. Die %d, %s und wie sie nicht alle heißen sind mindestens so hässlich wie die <<-Operatoren, und static_cast besagt eigentlich schön ausgeschrieben, was gemacht wird. Ein printf zu nehmen, wo die selbe Variable zweimal ausgegeben wird mit dem einzigen Unterschied, dass %s und %d die Ausgabe verändern, ist da deutlich subtiler.

    ich sage: bei basic versteht man auf anhieb (oder zumindest ohne grössere schwierigkeiten) den ablauf, weil man's nur mit einfachen, englischen wörtern zu tun hat (for, to, next, goto, usw.) und nicht mit seltsamen zeichen wie <<, ++ und grausamen dingen wie static_cast<a>(b). für anfänger sind schnelle aha-effekte sehr wichtig. später, wenn man die fundamentalsten grundlagen der programmierung gelernt hat, kann man sich immer noch auf sprachen mit kryptischer syntax (z.b. C-ähnlich) stürzen.

    Ich finde einen static_cast<char>() sehr viel weniger grausam zu lesen und zu verstehen als ein CHR$(). Ein << ist in meinen Augen eine sehr viel deutlichere Aneinanderreihung als wenn beim PRINT die Argumente mit Semikola getrennt sind. Und so kryptisch ist die Syntax von C++ nun wirklich nicht, wie du sie versuchst darzustellen. Ich behaupte ja nicht, dass es einfacher ist als BASIC oder python, aber eben auch nicht wirklich schwieriger. Wer sich in irgendeiner Weise halbwegs ernsthaft mit Programmiersprachen auseinandersetzen will sollte mit Operatoren und Klammern genausogut wie mit englischen Schlüsselwörtern umgehen können. Gewohnt ist man das eh spätestens in der Mittelstufe aus der Matehmatik und Physik, und wer in den Bereichen schon Schwierigkeiten damit hat braucht imo in dieser Diskussion nicht berücksichtigt werden. Schließlich reden wir von angehenden Programmierern und nicht von Möchtegern-Scriptkiddies.



  • nicht, daß so etwas jetzt leichter verständlich wäre für Anfänger: 😃

    (33 to: 255) do: [ :s | Transcript show: s asCharacter ].
    


  • pumuckl schrieb:

    Sehe ich anders. ... Ein printf zu nehmen, wo die selbe Variable zweimal ausgegeben wird mit dem einzigen Unterschied, dass %s und %d die Ausgabe verändern, ist da deutlich subtiler ... Und so kryptisch ist die Syntax von C++ nun wirklich nicht, wie du sie versuchst darzustellen.

    for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
    

    Ja, sehr subtil und gar nicht kryptisch ... 😃

    pumuckl schrieb:

    Schließlich reden wir von angehenden Programmierern und nicht von Möchtegern-Scriptkiddies.

    Du kannst nicht davon ausgehen, daß jeder, der ein Programm schreiben auch zum Vollzeitprogrammierer werden möchte, genausowenig wie ein Scriptkiddie soviel Spaß an der Sache finden kann, daß es die Profiklasse erklimmt. Nur würde ich niemandem von Haus aus einen Brocken wie C++ hinwerfen und sagen "wenn Du's nicht abraffst, bist Du zu doof zum Programmieren, laß' die Finger davon". Das ist der totale Spaßkiller.

    Aus der deutschen Wiki:

    Das Apronym „BASIC“ steht für „Beginner’s All-purpose Symbolic Instruction Code“, was so viel bedeutet wie „symbolische Allzweck-Programmiersprache für Anfänger“.

    Der OP will Windowsprogramme schreiben, er braucht keine Multiplattformsachen, er will schnell zum Schuß kommen. Nach hehren pädagogischen Zielen, wie eine frühzeitige Erziehung zum in euren Augen "echten" Programmierer aussieht, hat er ja gar nicht gefragt.
    Ich kenne VB classic und hab' ein bißchen in VB.NET reingeschnüffelt, da sieht das OOP- Konzept freundlich und nachvollziehbar aus. BASIC ist eine "sprechende" Sprache und daß µ$ es geschafft hat, die uralt- Kamelle so behutsam zu modernisieren, daß die Grundidee der einfach zu erlernenden Sprache nicht zerstört wurde, ist einer der wenigen zu lobenden Aspekte an dem Laden.
    Zweifelsohne wäre das mein Tip Nummer eins.
    Relativ schnell zum Zug käme man noch mit Java (v.a. wg. starker RAD-IDEs) oder C#, wobei ich das schon als deutlich kryptischer ansehe.
    "Sprechender" wäre da noch Delphi, aber ich vermute fast, daß die ziemlich auf dem absteigenden Ast sind.

    Also why not BASIC? Wer dann merkt, er braucht mehr in seiner Welt, wird schon was finden ... 😉



  • pointercrash() schrieb:

    for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
    

    Ja, sehr subtil und gar nicht kryptisch ... 😃

    Immer wieder wird mit Beispielen argumentiert, die total an der Realitaet vorbei gehen.



  • knivil schrieb:

    Hey, wie waere es denn mal mit etwas anderem zum Einstieg? Lisp, Scheme oder Haskell zum Beispiel.

    oh, das zeug kam diesmal aber spät dran. *grins*, trotzdem: solche sprachen sind für anfänger ziemlich ungeeignet, finde ich. 's-expressions' und diese UPN-artige schreibweise arithmetischer ausdrücke, sind vielleicht nix, was man nicht lernen könnte, aber sie wirken auf anfänger erstmal sehr abschreckend. so ist es eben mit 'alien technology'.

    pumuckl schrieb:

    Ich behaupte ja nicht, dass es einfacher ist als BASIC oder python, aber eben auch nicht wirklich schwieriger. Wer sich in irgendeiner Weise halbwegs ernsthaft mit Programmiersprachen auseinandersetzen will sollte mit Operatoren und Klammern genausogut wie mit englischen Schlüsselwörtern umgehen können. Gewohnt ist man das eh spätestens in der Mittelstufe aus der Matehmatik und Physik

    du kannst dich einfach nicht in einen anfänger hineinversetzen. zeig einem mittelschüler ein paar formeln aus der höheren mathematik und einem programmieranfänger einen c++ code. beide werden wie der sprichwörtliche 'ochs vorm berge' stehen. BASIC dagegen versteht ein 10-jähriger, sogar wenn er in jeder englisch-klassenarbeit 'ne 5 geschrieben und die hälfte des unterrichts geschwänzt hat.
    🙂



  • ;fricky schrieb:

    pumuckl schrieb:

    ...

    du kannst dich einfach nicht in einen anfänger hineinversetzen.

    Mag jetzt vielleicht überraschend klingen, aber ich war selbst mal einer...

    zeig einem mittelschüler ein paar formeln aus der höheren mathematik

    Du drehst mir das Wort im Mund rum. Ich hab nie von höherer Mathematik geschrieben sondern von dem was man in der Mittelstufe so kennt.

    und einem programmieranfänger einen c++ code. beide werden wie der sprichwörtliche 'ochs vorm berge' stehen.

    Kommt auf den C++-Code an. Vor ner simplen for-Schleife steht man in C++ genausowenig dumm da wie in vor den entsprechenden Schleifen in BASIC, Pascal oder sonstwo. Natürlich kann man in C++ extrem kryptischen Code schreiben, aber das sind dann nicht mehr die Anfänge um die es hier geht.

    pointercrash() schrieb:

    Also why not BASIC? Wer dann merkt, er braucht mehr in seiner Welt, wird schon was finden ... 😉

    Klar, warum nicht BASIC. Oder warum nicht Pascal, oder C++, oder Java. Die ersten Anfänge sind vom Schwierigkeitsgrad her in allen Sprachen minimal, wenn man die Syntax kennt. Und die zu lernen heißt mal eben ne Handvoll Seiten im Buch durchlesen.



  • for(int i=0; i<100; ++i)
    cout << i;
    cout << endl;
    

    Meiner Meinung nach ist C++ (und auch C# und Java) ein ganz anderes Kaliber als BASIC. Man kann als Einsteiger natürlich C++ lernen... keine Frage. Aber der Einstieg in BASIC war und ist am Einfachsten. Ich habe damals schon als 10 jähriger auf dem C64 BASIC benutzt. Und wenn ich so darüber nachdenke, habe ich wirklich Ergebnisse gehabt. BASIC ist wirklich super einfach zu verstehen. Man muß nicht mal Englisch können, wenn man ein deutsches Buch dafür hat.

    10 PRINT "HALLO WELT!"
    20 GOTO 10
    

    Das versteht jedes dt. Kind, wenn man ihm erklärt das PRINT etwas auf dem Monitor ausgibt und GOTO zur Zeile 10 springt. Da mußte ich damals kein englisch mit 10 Jahren können. Einfacher ging das damals nicht.

    Das obige Beispiel ist übrigens im C64-Benutzerhandbuch (ja, Benutzerhandbuch, nicht Programmierhandbuch!) auf den ersten Seiten enthalten. Das BASIC-Progrämmchen konnte deshalb wohl jeder C64-Besitzer auswendig... 😃 Und es gab nicht wenig C64 auf dem Markt. Und das ganze Benutzerhandbuch war ein BASIC-Kurs. Heute kann man froh sein, wenn man zu seinem PC einen Beipackzettel bekommt, wo drin steht, wie man den PC anschließt. 😡



  • u-ser_l schrieb:

    nicht, daß so etwas jetzt leichter verständlich wäre für Anfänger:

    (33 to: 255) do: [ :s | Transcript show: s asCharacter ].
    

    das ist so erstmal gut lesbar, wenn nur diese ganzen sonderzeichen nicht wären. die grösste schwierigkeit bei dieser sprache ist wohl, dass man sich merken muss, wo : | und . hingehören. eigenartig finde ich das : mal hinter, mal vor einem bezeichner oder schlüsselwort. [ und ] erkenne ich, als unwissender, als zusammengefasste anweisung bzw. schleifenkörper.
    🙂



  • pumuckl schrieb:

    Die ersten Anfänge sind vom Schwierigkeitsgrad her in allen Sprachen minimal, wenn man die Syntax kennt. Und die zu lernen heißt mal eben ne Handvoll Seiten im Buch durchlesen.

    Eben, das ist bei BASIC nicht der Fall! Du mußt halt keine seitenlange Syntax lernen. Um Programmieren zu lernen, ist Syntax erstmal irrelevant. Was ist eine Schleife? Was ist eine Bedingung? usw. kann man wunderbar und schnell mit BASIC lernen. Im Kopf muß Logic gelernt werden, und das kannst du mit BASIC erreichen, ohne dich mit geschweiften Klammern oder Tab-Einrückungen usw. beschäftigen zu müssen.



  • ;fricky schrieb:

    knivil schrieb:

    Hey, wie waere es denn mal mit etwas anderem zum Einstieg? Lisp, Scheme oder Haskell zum Beispiel.

    oh, das zeug kam diesmal aber spät dran. *grins*, trotzdem: solche sprachen sind für anfänger ziemlich ungeeignet, finde ich. 's-expressions' und diese UPN-artige schreibweise arithmetischer ausdrücke, sind vielleicht nix, was man nicht lernen könnte, aber sie wirken auf anfänger erstmal sehr abschreckend. so ist es eben mit 'alien technology'.

    Lisp hat mit S-Expressions nicht mehr zu tun als ein Bauer mit einem Traktor.
    Überhaupt ist "Lisp" mehr ein Prädikat einer Sprache als eine Sprache. (Das Scheme z.B. hat, Haskell z.B. nicht.)

    Und Haskell kann S und M gleichzeitig.

    pumuckl schrieb:

    Die ersten Anfänge sind vom Schwierigkeitsgrad her in allen Sprachen minimal, wenn man die Syntax kennt.

    Und das ist der Grund, warum das Zeug doch noch kommt: Lisp hat nämlich keine.

    Wichtiger als der syntaktische Unterschied ist der semantische, und da sind alle die Sprachen irgendwie großteils gleich, also sich nur nichts einreden lassen:

    Ein Anfänger will lernen und gleichzeitig anfallende Probleme lösen. Dazu will er ein Paket herunterladen und dann damit arbeiten können. Die ganze Sprachen-Debatte dreht sich nur darum, das richtige Paket zu finden, die Natur der verwendeten Sprache ist nicht so wichtig.

    Das einzige, was ich über das Thema wirklich weiß: man sollte nicht mit ANSI-C anfangen. Man lernt's zwar genauso, aber das Lernen wirft nur selten nützliche Produkte ab.



  • wie siehts eig mit portierbarkeit von c# aus, nebenbei gefragt?
    ich bin lieber bei java weil ich weiß dass die lieber keine standards verändern und auf portierbarkeit achten.
    Beherrscht mono mittlerweile alle .net sachen?



  • shisha schrieb:

    wie siehts eig mit portierbarkeit von c# aus, nebenbei gefragt?
    ...
    Beherrscht mono mittlerweile alle .net sachen?

    Mono ist zwar recht weit (zwischen 2.0 und 3.5), aber wird IMHO nie alle .Net Bibliotheken abdecken können. Siehe hierzu die nicht unterstützten Bibliotheken.

    So ist Beispielsweise WPF eine UI die auf DirectX aufsetzt, und dies müsste man erst einmal mühsam (vermutlich auf OpenGL-Basis) umschreiben müssen.



  • knivil schrieb:

    Immer wieder wird mit Beispielen argumentiert, die total an der Realitaet vorbei gehen.

    Die Realität ist, daß es keine WM für "obfuscant code" in BASIC gibt.

    pumuckl schrieb:

    ;fricky schrieb:

    pumuckl schrieb:

    ...

    du kannst dich einfach nicht in einen anfänger hineinversetzen.

    Mag jetzt vielleicht überraschend klingen, aber ich war selbst mal einer...

    Schön für Dich, daß Du steile Lernkurven bewältigen kannst. Ich hab' das vierte mal in einem Kart gesessen und den Fuji-Cup- Sieger bis 16 Jahren aus dem Vorjahr in einem 30- Runden- Rennen geschlagen. Das darf man aber nicht verallgemeinern.
    Man fängt in einer niedermotorisierten Kiste an und übt, übt, übt, bis man reif für die höheren Klassen ist.
    Daß es den einen oder anderen gibt, der schneller lernt als andere, ist überall normal, trotzden kommt niemand auf die Idee, auf's Geratewohl einen Fahrschüler in einen F1- Boliden zu stecken und ihm den Lappen zu verwehren, wenn er damit nur Schrott baut.
    Mir war beim Informatikunterricht ja auch langweilig, weil ich zu der Zeit an meinem ersten M68K - EPC herumgebastelt habe.

    pumuckl schrieb:

    Kommt auf den C++-Code an. Vor ner simplen for-Schleife steht man in C++ genausowenig dumm da wie in vor den entsprechenden Schleifen in BASIC, Pascal oder sonstwo.

    Nö, kommt auf die Sprache an. IF blubb THEN blah haben in BASIC und FORTH ähnliche syntax, beide zwar menschlicher Sprache nah, völlig unterschiedlich in der Ausführung, aber sie sprechen für sich. Ein for( ; ; ) ist schon so verknappt, daß man ganz genau nachlesen muß, was sich da tut und warum for( ; ; ); ein Fehler sein kann, aber nicht muß, sprengt die meisten Anfängerschädel.

    pumuckl schrieb:

    Klar, warum nicht BASIC. Oder warum nicht Pascal, oder C++, oder Java. Die ersten Anfänge sind vom Schwierigkeitsgrad her in allen Sprachen minimal, wenn man die Syntax kennt. Und die zu lernen heißt mal eben ne Handvoll Seiten im Buch durchlesen.

    Dein Standpunkt ist ziemlich borniert und Du merkst es nichtmal, was? C++ ist kein Anfängerzeugs, da ist der Erfolg mit zuvielen Manpages gepflastert.
    Man kann auch in Java oder VB sehr weit kommen, ohne sich auf die C++- typischen Fallstricke einlassen zu müssen.



  • ;fricky schrieb:

    das ist so erstmal gut lesbar, wenn nur diese ganzen sonderzeichen nicht wären.

    die runden Klammern kann man weglassen, die sind hier nur wegen der Analogie zur for-Schleife.



  • Die Realität ist, daß es keine WM für "obfuscant code" in BASIC gibt.

    Und das sagt jetzt genau was aus? Ist das hier relevent? Ich denke eher nicht.

    Auch frage ich mich gerade, warum Programmiersprachen fuer Einsteiger immer an natuerlicher Sprache angelehnt sein soll. Ich halte das fuer hinderlich. Wenn man Algorithmen oder Vorgaenge wie z.B. das Zubereiten von Speisen mit Worten beschreibt, so baut man auf Wissen und Erfahrung auf. Salz, Hitze oder Butter sind nichts unbekanntes mehr. Im Kontext des Programmierens hat ein Anfaenger aber dieses "Alltagswissen" nicht, gerade weil z.B. die for-Schleife eher selten im normalen Sprachgebrauch verwendet wird. Daneben gibt es noch andere Hindernisse: Der Computer ist dumm und wir muessen deshalb exakt sein.

    Auf was dann eine Programmiersprache aufbauen? Mathematik! (Aber das ist meist nicht das Lieblingsfach in Schule und Studium)

    Zu allen anderen: Ihr argumentiert mit Beispielen, die vielleicht fuer euch plausibel sind. Aber in einen wirklichen Anfaenger kann sich niemand hinein versetzen, auch wenn ihr alle mal einer gewesen seid.

    So what: Es ist egal, mit welcher Programmiersprache begonnen wird. Man sollte vielleicht drauf achten, dass die Community gross ist, viele Buecher drueber gibt ... falls man mal Fragen hat oder nach Antworten sucht. Deshalb bietet Java gegen ueber Basic (C#, C++, ...) keinen Vorteil.



  • µngbd schrieb:

    Überhaupt ist "Lisp" mehr ein Prädikat einer Sprache als eine Sprache.

    na, das hört sich aber auch nicht gerade anfängertauglich an.

    µngbd schrieb:

    pumuckl schrieb:

    Die ersten Anfänge sind vom Schwierigkeitsgrad her in allen Sprachen minimal, wenn man die Syntax kennt.

    Und das ist der Grund, warum das Zeug doch noch kommt: Lisp hat nämlich keine.

    wenn lisp keine syntax hat, wie willst du dann einem lisp-interpreter beibringen, was er machen soll? jede programmiersprache besteht doch aus regeln und einer festgelegten art und weise, wie diese zu formulieren sind, damit der mensch einem computerprogramm eindeutige anweisungen geben kann. ohne syntax müsste das ding raten, was du willst.

    knivil schrieb:

    Auch frage ich mich gerade, warum Programmiersprachen fuer Einsteiger immer an natuerlicher Sprache angelehnt sein soll. Ich halte das fuer hinderlich. Wenn man Algorithmen oder Vorgaenge wie z.B. das Zubereiten von Speisen mit Worten beschreibt, so baut man auf Wissen und Erfahrung auf. Salz, Hitze oder Butter sind nichts unbekanntes mehr. Im Kontext des Programmierens hat ein Anfaenger aber dieses "Alltagswissen" nicht, gerade weil z.B. die for-Schleife eher selten im normalen Sprachgebrauch verwendet wird.

    es geht bei BASIC doch gerade darum, einem anfänger, der noch nie programmiert hat, leicht verständliche analogien zu präsentieren, so dass er möglichst viele ähnliche dinge aus der realität beim programmieren wiederfindet. for i=1 to 5 ... next i => mach was 5 mal hintereinander, kommt auch in der wirklichkeit oft vor (z.b. an 5 tagen der woche zur gleichen zeit aufstehen, wenn i die wochentage zählt). in BASIC haste z.b. das schlüsselwort 'let', das gibts nur aus dem einen grund, damit anfänger eine zuweisung besser lesen können. 'let a=1' ist aus anfängersicht verständlicher als einfach 'a=1', auch wenn ihr's nicht glaubt, weil ihr euch schon viel zu weit von der anfänger-sichtweise entfernt habt.
    basic ist im prinzip eine 'domain specific language', wobei die domäne 'alle anfänger' ist.
    🙂



  • realität beim programmieren wiederfindet. for i=1 to 5 ... next i => mach was 5 mal hintereinander

    Naja, ich weiss nicht wie deine Realitaet aussieht, aber ich musste noch nie z.B. 500 Mal als Strafarbeit irgendetwas aufschreiben. Dein Wochenbeispiel ist auch nicht gebraeuchlicher, aber durchaus nachvollziehbar fuer mich als Programmierer.

    das gibts nur aus dem einen grund, damit anfänger eine zuweisung besser lesen können

    Nein! Das gibt es auch in Lisp und macht da auch was ... Irgendwie muss das Ding ja bezeichnet werden. Da ist es doch naheliegend, Formulierungen aus der Mathematik zu verwenden, z.B. "Let n be a natural number and p ... then ...". Genau wie in Mathe fuehrt es eine neue Bezeichnung fuer ein "Ding" ein. Und Ja! Weil mathematische Beweise auch lesbar sein sollen.

    prinzip eine 'domain specific language', wobei die domäne 'alle anfänger' ist.

    Nein, so ist Domain fuer Sprachen nicht definiert 🙂 BASIC ist eine general purpose programming language.



  • Ich hab vor fast genau 20 Jahren mit BASIC angefangen und nie im Leben LET für eine Zuweisung benutzt. Ich hab auch nicht begriffen, was LET heißen soll ("Lasse A gleich 10?"). Dass das eine Formulierung aus der Mathematik ist, die man eher mit "Sei A gleich 10" übersetzt, war mir als Fünftklässler nicht klar.

    fricky, hast du denn auch mit BASIC angefangen und immer brav dein LET geschrieben?


Anmelden zum Antworten