Ich habe hier auf P.SE mehr Fragen gelesen, in denen Anfängern empfohlen wird, Python als ihre erste Programmiersprache zu wählen.
Versteh mich nicht falsch, ich mag Python. Ich mag es sehr! Aber seine Philosophie dreht sich um "Wir stimmen alle Erwachsenen hier zu".
Aus der Sicht von Erfahrung / Wissen ist ein Anfänger-Programmierer kein Erwachsener. Was dann irgendwie bedeutet, dass es einfacher ist, sich in den Fuß zu schießen und einige schlechte Gewohnheiten zu erlernen, selbst wenn Sie die Wunde überleben.
Ich denke, dass es in einer "statischeren" Sprache schwieriger ist, sich in den Fuß zu schießen, da dies restriktiver sein wird.
Zurück zu meiner Frage. Warum wird Python als Einstiegsprogrammiersprache empfohlen?
Was sind die Punkte, die es für das Unterrichten einer Programmiersprache gut machen? Oder ... ist es die persönliche Präferenz des Beraters?
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot
- Nun, C und C ++ sind statisch getippt und es würde Sie sehr überraschen, wie viele verschiedene Möglichkeiten es gibt, mit denen Sie Ihren Fuß abblasen können ...Antworten:
IMO, die wichtigsten Punkte, die für Python als Einstiegssprache sprechen, sind:
quelle
Die Hallo Welt in Python:
Hallo Welt in Java:
Hallo Welt in C:
Wir müssen über das Kompilieren für die anderen beiden sprechen, und Python ist viel einfacher. Ich muss nur über die einzige Idee sprechen, die mich interessiert, die ganze Maschinerie, die die Sache kompliziert, verschwindet einfach in Python. Ich kann warten, bis sie bereit sind, über Module zu sprechen, und es ist nicht nötig, sie zu beschleunigen, um stdio.h für einfache Programme zu bekommen. Ich kann warten, bis sie für Themen wie den Unterricht bereit sind, ohne sie für ihre ersten Programme zu überstürzen. Es hat eine REPL zum Herumalbern in der Kommandozeile. Python ist sehr gut darin, konzeptuell minimal zu sein. Dies ist eine gute Sache, da es Anfängern hilft, sich auf die anstehende Aufgabe zu konzentrieren.
quelle
Das ist eine ungewöhnliche Sichtweise.
Die Sache mit dem Einverständnis der Erwachsenen ist ein sehr kleiner Teil von Pythons Philosophie. Es "dreht" sich sicherlich nicht darum. Es ist nicht einmal ein Teil des "Zen of Python", den Sie erhalten, wenn Sie es
import this
im Interpreter tun .Andere Dinge wie "explizit ist besser als implizit", "einfach ist besser als komplex" und "Lesbarkeit zählt" sind für Python viel zentraler und zeigen, warum Python eine gute Muttersprache ist.
Jedenfalls geht es bei den "einwilligenden Erwachsenen" eigentlich nur um den Mangel an privaten Objekten in Python. Was meiner Meinung nach ein weiteres Indiz dafür ist, warum es gut für Anfänger ist: Sie müssen sich nicht um Dinge wie Schnittstellen kümmern, wenn Sie gerade erst anfangen.
quelle
private
Felderpublic
zu hacken um? Übrigens können Sie in Python der Eigenschaft einen Unterstrich voranstellen, um sie als privat zuEs gibt zwei verschiedene Punkte. Wenn Sie ein Kind großziehen, sollten Sie es in eine Blase legen, die nur sichere Dinge enthält, oder es auf dem Hof spielen lassen, wo es stolpern und fallen könnte?
Innerhalb der Blase zu sein, ist sehr restriktiv. Sie müssen Ihren Code auf eine ganz bestimmte Art und Weise schreiben, damit er ausgeführt werden kann. Wenn die Leute zum ersten Mal anfangen, wird alles, was nicht da ist, um zu tun, was die Person will, als verschwenderisch angesehen. Dies kann auch dazu führen, dass ich nicht weiß, warum das so ist, aber jemand hat mir gesagt, dass es notwendig ist.
In Python gibt es das nicht. Wenn Sie "Hallo Welt" sagen wollen, müssen Sie nur
print "Hello World"
. Wenn Sie Python als Einstiegspunkt verwenden, können Sie sofort loslegen und einfach den Code schreiben, den Sie benötigen, um das zu erreichen, was Sie möchten. Ein erstmaliger Programmierer kann den Wert der Kapselung nicht verstehen, bevor er die Grundlagen der Programmierung verstanden hat.Auch in kleinen Programmen ist die Typensicherheit kein großes Problem. Jeder Code, den ein Anfänger schreibt, wird klein und enthalten sein. Erst wenn Sie über eine größere Codebasis mit vielen Abschnitten verfügen, die Sie als Abstraktionsebenen verwenden und nicht aktiv darüber nachdenken, ob die Typensicherheit die Vorteile bietet, dass Sie das tun, was Sie benötigen. Wenn sich der gesamte Code in derselben Datei befindet, ist es einfacher, sich die Funktion anzusehen und festzustellen, was Sie falsch gemacht haben.
Andere Vorteile:
quelle
Python ist eine großartige Sprache für Anfänger, da es einfache Dinge vereinfacht und gleichzeitig so komplizierte Dinge ermöglicht, dass es nicht als nutzlose Spielzeugsprache angesehen wird und selbst fortgeschrittene Programmierer es als das richtige Werkzeug für manche Jobs ansehen. Im Einzelnen umfassen einfache Dinge:
Ein absolutes Minimum an Code für einfache Programme.
Müllabfuhr.
Dynamische Eingabe.
Saubere, einfache Syntax.
Vergleichen Sie das zB mit Java oder C ++ und der Schwierigkeit, alle Konzepte eines "Hallo Welt" -Programms zu erklären. Komplizierte Dinge sind:
Introspektion (Pythons Äquivalent zur Reflexion).
Affe patchen.
Die Dinge, die mit der riesigen Standardbibliothek gemacht werden können.
Das heißt, niemand, der nur Python kennt, ist ein guter Programmierer, weil niemand, der nur eine Sprache oder einen Sprachstil kennt, ein guter Programmierer ist. Jeder, der es ernst meint mit Programmieren, sollte irgendwann etwas Niedrigeres lernen, nur nicht, während er / sie noch versucht, Flusskontrolle, Rekursion und andere Grundlagen zu erlernen.
quelle
Ich sehe Python als eine gute Wahl. Typischerweise möchten Sie für die Programmierung auf "Einstiegs" -Ebene etwas Einfaches und dennoch Produktives. Schnelle Rückmeldungen unterstützen sowohl die Motivation als auch die Lerngeschwindigkeit. Ich wage zu sagen, es geht nicht darum, den "richtigen Weg" zu lernen, sondern "süchtig zu werden und sich in das Programmieren fürs Leben zu verlieben". Der Rest wird später durch Erfahrung, Sekundarschulbildung oder was auch immer angenehm weiter kommen.
quelle
Meiner Meinung nach ist es eine sehr schlechte Idee, den Leuten beizubringen, in "sicheren" Sprachen zu programmieren. Die Leute gehen davon aus, dass alles einfach ist, und denken nur daran, Schichten und Schichten von Code hinzuzufügen. Und die Möglichkeit zu verlieren, Probleme zu debuggen / beheben, wenn sie auftreten.
Gute Programmierer müssen unbedingt C / C ++ oder sogar Assembler kennen. Und ihre Denkweise muss auch von dieser Seite kommen. Und nicht - "Oh, GC, es macht Magic (tm), wir sind cool, und warum C ++ GC nicht hat, ist es dumm." Einstellung.
quelle
Für einen Programmieranfänger ist das Fehlen statischer Typen ein Merkmal, kein Fehler!
Wenn man lernt zu programmieren, kann es schwierig sein, die offensichtlichsten Dinge zu verstehen. Dynamische Typsysteme sind sehr einfach und weichen in einem Einführungskurs, wie z. B. Modularisierung, Kontrollfluss usw., den dringlicheren Themen aus.
Es gibt auch einige konzeptionelle Vorteile für dynamisches Tippen in einem pädagogischen Umfeld:
Typen sind mit Werten verknüpft, nicht mit Variablen. Dies ist wohl intuitiver, da es den Grund widerspiegelt, warum Programme tatsächlich abstürzen.
Fehlermeldungen sind viel unmittelbarer und konkreter. In Python erhalten Sie einen schönen Stack-Trace und eine Meldung, die angibt, was tatsächlich schief gelaufen ist. In einer statisch getippten Sprache erhalten Sie eine Compiler-Warnung, die besagt, was schief gehen würde .
Schüler, die mit einem Compiler arbeiten, können nur an Programmen arbeiten, die sie vollständig verstehen, damit sie nicht auf einen Kompilierungsfehler stoßen, den sie nicht lösen können.
Mit der Laufzeitfehlerprüfung können Sie unvollständige Programme ausführen. Dies ermöglicht inkrementellere Programme, bei denen sich der Schüler zuerst um den korrekten Start des Programms kümmern und erst dann sehen kann, was passiert.
Einige wichtige Konzepte, wie parametrischer Polymorphismus und Ententypisierung, sind in einer dynamischen Sprache kostenlos, erfordern jedoch komplexere Typsysteme in einer statischen Sprache.
Obwohl Sie immer noch dieselbe Komplexität bewältigen müssen, können Sie nicht alle Vorteile der statischen Eingabe nutzen, wenn Sie mit dem Programmieren beginnen:
Anfängerprogramme sind klein und haben nicht viele Codepfade (Sie müssen sich also nicht so viele Gedanken über Tippfehler in Codebits machen, auf die selten zugegriffen wird).
Anfängerprogramme verwenden keine Schnittstellen und Funktionen auf hohem Niveau, so dass auch in der Abteilung "Verwenden des Typsystems zum Entwerfen des Programms" nicht viel zu gewinnen ist.
quelle
Es gibt eine sehr, sehr , sehr wichtige Sache in Python für Programmieranfänger, die anscheinend jeder übersehen hat: das Erzwingen eines gültigen Einzugs.
Wie einige der anderen Kommentatoren unterrichtete ich einige Jahre Anfänger. Es war ungewöhnlich häufig, solche Dinge zu sehen:
Stellen Sie sich nun diese schreckliche Inkonsistenz über ungefähr hundert Codezeilen vor. Für einige Studenten sah die Gesamtheit aller ihrer Projekte so aus.
Ich habe keine Ahnung, wie sie es geschafft haben, und es hat sie nie gestört. Jedes Mal, wenn ich gefragt habe, lautete die Antwort wie folgt: "Nun, es spielt keine Rolle, weil der Compiler es herausfinden wird." Selbst wenn ich ihnen einen offensichtlichen Fehler zeige, indem ich den Einzug behebe, haben sie immer noch keine Ahnung.
In Python ist diese Art von Einrückung einfach ungültig. Sie sind gezwungen, etwas zu verwenden, das zumindest lesbar ist, auch wenn es ein wenig inkonsistent ist. Es gibt ihnen eine Angewohnheit, die sie hoffentlich fortsetzen werden, wenn sie irgendwann eine andere Sprache lernen.
quelle
Python ist aus den meisten oben genannten Gründen eine großartige Muttersprache. Insbesondere ist eine Voraussetzung für eine erste Sprache eine sanfte Lernkurve, die Python hat. Sie müssen zum Beispiel nicht alles über Klassen wissen, um loszulegen. In dieser Hinsicht ist es ein bisschen wie das Basic, mit dem viele von uns angefangen haben.
Eine Sache, die bisher nicht hervorgehoben wurde, ist, dass viele Sprachen eine sanfte Lernkurve haben, aber schnell auf eine Mauer stoßen, wenn sie versuchen, fortgeschrittenere Dinge zu tun. Old-School Basic ist ein gutes Beispiel dafür. Mit Python können Sie sich in einige sehr fortgeschrittene Dinge einarbeiten, bevor Sie das Gefühl haben, dass eine andere Sprache die bessere Wahl sein könnte.
Zu diesem Zeitpunkt ist ein Anfänger in der Lage, mehr über Auswahlmöglichkeiten und Kompromisse zu verstehen und ist bereit für C / C ++, Java, Assembler, Prolog, Lisp usw. Tatsächlich ist Lisp möglicherweise auch eine gute Muttersprache, obwohl es ziemlich streng ist !
quelle
Das Hauptproblem bei Python als Muttersprache ist die dynamische Typisierung und das Fehlen einer Variablendeklaration. IMHO sind sie das einzige große Problem mit der Sprache.
Das einfache Hinzufügen einer Zeile, die besagt, dass ich nur einen String in der Variablen foo speichern werde, ermöglicht es dem Programmierer, der Entwicklungsumgebung, der Sprache (und für "professionellen Code" dem armen Narren, der sich erkälten und ihn danach unterstützen muss) zusammen arbeiten. Besonders für normale Entwickler und Anfänger ist es nicht sinnvoll, eine Variable für mehr als einen Typ zu verwenden. In den seltenen Fällen, in denen es sinnvoll ist, einen expliziten var / object-Typ zu verwenden, der dynamisches Tippen ermöglicht, ist dies in Ordnung.
quelle