Warum wird Python als Einstiegsprogrammiersprache empfohlen? [geschlossen]


16

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?


17
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 ...
Péter Török

@ Péter Török: Ja, und es nimmt dir den ganzen Fuß weg (c ++: D). Ich sagte "statischer" und versuchte, Flammenkriege zu vermeiden, für etwas wie ... Ich weiß nicht ... Java?!?! ... das jeder zu hassen scheint, wie es an Schulen / Universitäten gedacht wird und die Leute einige haben Angst
davor

1
Ich denke, C ++ ist eine bessere Ausgangssprache, weil es mir geholfen hat, die Dinge in anderen Sprachen besser zu verstehen.
Systemovich

1
Ich habe meine Grundlagen mit Python als Ausgangssprache, nachdem ich einen Programmierkurs im ersten Semester absolviert habe, in dem Python verwendet wurde. Die Schüler verstanden oft keine Typen und die Leerraumabhängigkeiten töteten sie. Es fiel ihnen auch schwer, Objekte zu verstehen, bei denen es sich um ein "selbstreferenzierendes" Geschäft handelte. Es hat seine Vorzüge, aber es hat definitiv auch seine Kritiker.
Rig

2
@ MahmoudHossam Ich stimme zu. Ich habe nur einige der Knackpunkte meiner Erfahrung hervorgehoben. Java, C #, Lisp usw. haben alle ihre Probleme. Dies waren nur die Hauptprobleme, mit denen ich Python-Lehrern begegnete, die zum ersten Mal programmierten.
Rig

Antworten:


30

IMO, die wichtigsten Punkte, die für Python als Einstiegssprache sprechen, sind:

  • Es hat eine flache Lernkurve - von nichts zu "Hallo Welt" zu gelangen ist viel schneller als in den meisten anderen Sprachen
  • Es ist intuitiv - die Syntax wurde nach dem Prinzip der geringsten Überraschung entworfen und ist insgesamt sehr konsistent (leider folgen die Standardbibliotheken nicht immer dieser Konsistenz).
  • Es erfordert nur sehr wenig Boilerplate : Eine typische "Hallo Welt" ist eine Codezeile, und einfache Programme können ohne zusätzliche Hintergrundgeräusche geschrieben werden, die erklärt werden müssen (wie Schlüsselwörter für Funktionsdeklarationen, Importanweisungen, Klassenkonstrukte, Präprozessor-Direktiven, etc.)
  • Für die Arbeit mit Python-Code gibt es hervorragende, unkomplizierte Tools , insbesondere den interaktiven Interpreter. Sie müssen kein Build-System, keine IDE, keinen speziellen Texteditor oder irgendetwas anderes lernen, um Python zu verwenden - eine Eingabeaufforderung, der interaktive Editor und ein einfacher Texteditor sind alles, was Sie benötigen
  • Es verwendet dynamische Typisierung , aber im Gegensatz zu vielen anderen dynamisch typisierten Sprachen sind Typen transparent und typbezogene Fallstricke sind selten

Ich möchte nur die Intuitivität der Sprache betonen . Ich habe Leute mit 0 Programmiererfahrung gesehen, die schnell Python gelernt haben. Dies liegt hauptsächlich an der Syntax / Grammatik, die dem gesprochenen Englisch sehr nahe kommt.
Stephen Gross

12
Zum Schluss: Die Leute verwechseln oft dinamisches Schreiben mit schwachem Schreiben. Python ist dynamisch typisiert (Typen, die mit Werten anstelle von Variablen verknüpft sind), aber auch stark typisiert (also stürzen Programme ab, anstatt
unbemerkt

@missingo Ich Sekunde - Adleraugen, die Sie haben;)
Yati Sagade

@missingno: Ich kenne den Unterschied. Ein Beispiel für nicht transparente Typen sind die Array-Schlüssel von PHP - Arrays verhalten sich für Integer-Schlüssel anders als für jeden anderen Typ. Wenn Sie zwei ausreichend große Ganzzahlen hinzufügen, erhalten Sie möglicherweise einen Gleitkommawert. Und das ist nur ein Beispiel - vor allem PHP und Javascript (die beiden beliebtesten dynamischen Sprachen in der Webentwicklung) stecken voller unklarer Schreibkanten.
tdammers

Gemessen an Ihrem Kommentar bedeuten "Typen sind transparent", dass die Regeln für Typen leicht zu verstehen sind? Was genau wollten Sie sagen?
Phant0m

8

Die Hallo Welt in Python:

 print "Hi there"

Hallo Welt in Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

Hallo Welt in C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

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.


15
Du hast die "return 0;" Anweisung in Ihrer C-Implementierung :) Compiler-Warnung!
Stephen Gross

2
Deshalb gab es BASIC überhaupt. 10 DRUCKEN "Hallo Welt!" 20 ENDE Für zusätzliches Guthaben schlägt das Python-Programm die Meldung "Sagte es" Hallo Welt! " Komponententest :-)
Ross Patterson

3
Gleiches in F #: printfn "Hello World!". Ja, F # ist gut für Anfänger!
Den

7

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 thisim 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.


1
Ja, aber zu diesen "privaten" Teilen, da Sie Zugriff auf sie haben, könnten Sie versucht sein, einige Problemumgehungen / Verknüpfungen zu hacken, die Sie nicht besser kennen.
JohnDoDo

@JohnDoDo Welchen Unterschied macht es , wenn in C # oder Java machen, entschied ich mich zu konvertieren privateFelder publiczu hacken um? Übrigens können Sie in Python der Eigenschaft einen Unterstrich voranstellen, um sie als privat zu
kennzeichnen

4

Es 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:

  • Viele Bibliotheken, die viele Dinge tun
  • Flexibilität, um sowohl objektorientierte als auch funktionale Programmiertechniken zu unterrichten, ohne den Eindruck zu erwecken, dass eine in eine Sprache passen musste, die für die andere entwickelt wurde.

3
Gegenanalogie: Bringen Sie Ihrem Kind bei, nicht mit dem Feuer zu spielen. 1) Sie können mit ihm sprechen, erklären, was Feuer ist und was Feuer tut, PowerPoint-Folien zeigen, was auch immer ... oder 2) ihn mit Feuer spielen und sich verbrennen lassen. Die zweite Methode ist in der Tat weitaus effizienter. Was mich interessiert, ist die Möglichkeit, dass er das Haus in Brand setzt oder es sogar mag und ein Pyromane wird, weil keine Sicherheitsmaßnahmen ergriffen wurden. Eine Art Extremsituation, die sich aber nicht wirklich in Worten ausdrücken lässt.
JohnDoDo

1
@JohnDoDo - Lass ihn sich verbrennen ... es ist die beste Schule und wer hat sich als Kind bei einem Streichholz nicht verbrannt? Es wird ihn nicht töten ...
Rook

1
@JohnDoDo: Nur weil die Sprache dich mit dem Feuer spielen lässt, heißt das nicht, dass der Lehrer nicht darauf hinweist, dass Feuer sehr gefährlich ist, und erklärt, wie man es vermeiden kann. Ich denke, das andere, was Sie vermissen, ist, dass jemand nicht an eine Sprache gebunden ist. Nachdem sie ein grundlegendes Verständnis der Programmierung erlangt haben, können sie eine andere Sprache verwenden, um größere Konzepte zu erlernen (z. B. das Gebäude nicht abzubrennen).
Unholysampler

3

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.


2

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.


1

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.


1

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:

  1. Typen sind mit Werten verknüpft, nicht mit Variablen. Dies ist wohl intuitiver, da es den Grund widerspiegelt, warum Programme tatsächlich abstürzen.

  2. 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.

  3. 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.

  4. 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.


1

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:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

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.


0

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 !


-1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.