Welche Sprache lernen?
-
EIn etwas älterer Basic-Dialekt ist die beste Anfängersprache, gerade WEIL man da schlechten Stil üben kann, ohne ihn später in die nächaste Sprache mitzunehmen.
-
FreakY<3Cpp schrieb:
FOR i = 33 TO 255 PRINT i; CHR$(i) NEXT i
Mmmmhh... Der Code sieht richtig schmackhaft aus...
ja, wenn man etwas englisch kann, ist für jeden sofort ersichtlich (ausser vielleicht das 'chr$'), was das machen soll. auch wenn er noch nie im leben programmcode gesehen hat. bei 'nem ähnlichen c++ schnipsel:
for (int s=33; s<256; s++) // keine 255, warum 'int', wieso klammern, warum ein kleiner-zeichen, was soll ++, was sollen die semikolons, wtf? cout << s << reinterpret_cast<char>(s) << endl; // spätestens hier wird sich der anfänger 'nen wolf raten. noch nichtmal sowas wie 'print' ist zu sehen. die absolut üble cast-schreibweise macht die verwirrung komplett // ^^ ein anfänger würde sowas noch nicht mal als schleife interpretieren
...versteht der anfänger erstmal garnichts, ohne bis seite 10 seines tutorials gekommen zu sein.
ihr macht den fehler und seht es aus eurer perspektive. ihr könnt schon programmieren.
-
;fricky schrieb:
...versteht der anfänger erstmal garnichts, ohne bis seite 10 seines tutorials gekommen zu sein.
ihr macht den fehler und seht es aus eurer perspektive. ihr könnt schon programmieren.
Deswegen Python:
a = ['cat', 'window', 'defenestrate'] for x in a: print x, len(x)
Einfache, saubere Syntax, der man sofort ansieht was sie macht ohne viel wissen zu muessen. Und mit PyQt kann man auch seine GUI-Programme schreiben, sammt einem GUI-Editor.
-
DEvent schrieb:
Einfache, saubere Syntax, der man sofort ansieht was sie macht ohne viel wissen zu muessen.
naja, das mit dem einrücken muss man wissen. aber für einen absoluten neueinsteiger muss das aber kein hindernis sein (nur wenn man schon andere sprachen kennt, ist es vielleicht doof).
-
;fricky schrieb:
[...]ja, wenn man etwas englisch kann, ist für jeden sofort ersichtlich (ausser vielleicht das 'chr$'), was das machen soll. auch wenn er noch nie im leben programmcode gesehen hat.
ist ne Behauptung die nicht stimmen muss. Für jemanden der noch nie Programmcode gesehen hat ist nichtmal unbedingt klar wo die for-Schleife aufhört, und was das "NEXT i" dahinter bedeuten soll. Er muss sich also auch erstmal ein wenig einlesen, bis er die Schleifensyntax und das CHR$ versteht.
Wenn man den C++-Code richtig schreibt
for (int s=33; s<256; ++s) { cout << s << static_cast<char>(s) << endl; }
sieht man sofort den Schleifenkörper. Und wenn man hier genauso weit gelesen hat (nämlich bis man die Schleifensyntax und den cast kennt), versteht man genausoviel, weil die Ausgabe mittels cout gleich auf der ersten Seite in jedem Buch/Tutorial drankommt.
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
-
pumuckl, die BASIC-Syntax ist für Anfänger grundsätzlich einfacher zu verstehen. Einfach, weil vieles 'klar' ausgeschrieben wird, weil es weniger kryptisch ist. Das liegt auf der Hand, denke ich. Die Syntax einer for-Schleife muss man sich in beiden Sprachen anlesen, klar, nur in BASIC ist das halt eine Sache von Sekunden, in C(++) dauert es vielleicht schon Minuten.
-
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.