Pourquoi Python est-il recommandé comme langage de programmation d'entrée de gamme? [fermé]

16

J'ai lu ici sur P.SE plus de questions dans lesquelles les programmeurs débutants sont invités à choisir Python comme premier langage de programmation.

Ne vous méprenez pas, j'aime Python. Je l'aime beaucoup! Mais sa philosophie tourne autour de "Nous sommes tous des adultes consentants ici".

D'un point de vue expérience / connaissance, un programmeur débutant n'est pas un adulte. Ce qui signifie alors qu'il est plus facile de se tirer une balle dans le pied et de reprendre de mauvaises habitudes même si vous survivez à la blessure.

Je pense que dans un langage "plus statique" il serait plus difficile de se tirer une balle dans le pied car ce sera plus contraignant.

Revenons à ma question. Pourquoi Python est-il recommandé comme langage de programmation d'entrée de gamme?

Quels sont les points qui le rendent bon pour l'enseignement d'un langage de programmation. Ou ... est-ce la préférence personnelle du conseiller?

JohnDoDo
la source
17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot- eh bien, le C et le C ++ sont typés statiquement et vous seriez très, très mal surpris de voir combien de façons différentes vous pouvez souffler votre pied en les utilisant ...
Péter Török
@ Péter Török: Oui, et ça vous enlève tout votre pied (c ++: D). J'ai dit "plus statique" en essayant d'éviter les guerres de flamme pour quelque chose comme ... Je ne sais pas ... Java?!?! ... que tout le monde semble détester car on pense à l'école / les universités et les gens en ont lui fait peur ...
JohnDoDo
1
Je pense que C ++ est un meilleur langage de départ, car il m'a aidé à mieux comprendre les choses dans d'autres langues.
systemovich
1
J'ai mes boeufs avec python comme langue de départ après avoir testé un cours de programmation du premier semestre qui l'a utilisé. Les étudiants ne comprenaient pas souvent les «types» et les dépendances d'espaces blancs les ont tués. Ils ont également eu du mal à comprendre les objets avec cette entreprise OO référencée «auto». Il a ses mérites, mais il a aussi certainement ses détracteurs.
Rig
2
@MahmoudHossam Je suis d'accord. Je ne faisais que souligner certains des points de blocage de mon expérience. Java, C #, Lisp, etc. ont tous leurs problèmes. Ce ne sont que les problèmes majeurs que j'ai rencontrés pour enseigner le python aux programmeurs débutants.
Rig

Réponses:

30

IMO, les points les plus importants qui parlent de Python en tant que langage d'entrée de gamme sont les suivants:

  • il a une courbe d'apprentissage peu profonde - passer de rien à "Hello world" est beaucoup plus rapide que dans la plupart des autres langues
  • il est intuitif - la syntaxe a été conçue pour suivre le principe de la moindre surprise, et elle est très cohérente dans l'ensemble (malheureusement, les bibliothèques standard ne suivent pas toujours cette cohérence)
  • cela nécessite très peu de passe-partout : un "Hello world" typique est une ligne de code, et des programmes simples peuvent être écrits sans aucun bruit de fond supplémentaire qui doit être expliqué (comme les mots-clés de déclaration de fonction, les instructions d'importation, les constructions de classe, les directives de préprocesseur, etc.)
  • il existe d'excellents outils simples pour travailler avec du code python, en particulier l'interpréteur interactif; vous n'avez pas besoin d'apprendre un système de construction, un IDE, un éditeur de texte spécial ou quoi que ce soit d'autre pour commencer à utiliser python - une invite de commande, l'éditeur interactif et un simple éditeur de texte sont tout ce dont vous avez besoin
  • il utilise le typage dynamique , mais contrairement à de nombreux autres langages à typage dynamique, les types sont transparents et les pièges liés au type sont rares
tdammers
la source
Je veux juste souligner l' intuitivité de la langue. J'ai vu des gens avec 0 expérience en programmation apprendre rapidement Python. Cela est dû en grande partie à la syntaxe / grammaire très proche de l'anglais parlé.
Stephen Gross
12
Au dernier point: les gens confondent souvent la dactylographie dinamique avec une dactylographie faible. Python est typé dynamiquement (types associés à des valeurs au lieu de variables) mais est également fortement typé (donc les programmes plantent au lieu d'avaler silencieusement les erreurs de conversion)
hugomg
@missingo I second - Eagle eyes you have;)
yati sagade
@missingno: Je connais la différence. Un exemple de types non transparents est les clés de tableau de PHP - les tableaux se comportent différemment pour les clés entières que pour tout autre type; si vous ajoutez deux entiers suffisamment grands, vous pouvez vous retrouver avec un flottant. Et ce n'est qu'un exemple - en particulier PHP et javascript (les deux langages dynamiques les plus populaires dans le développement Web) sont pleins de cas de bord de frappe obscurs.
tdammers
À en juger par votre commentaire, par "les types sont transparents", vous voulez dire que les règles qui régissent les types sont faciles à comprendre? Qu'avez-vous l'intention de dire exactement?
phant0m
8

Le monde bonjour en python:

 print "Hi there"

bonjour le monde à Java:

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

bonjour le monde en C:

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

Ajoutez à cela la nécessité de parler de compilation pour les deux autres, et python est beaucoup plus simple. Je n'ai qu'à parler de la seule idée qui m'intéresse, toutes les machines qui compliquent le problème disparaissent simplement en python. Je peux attendre qu'ils soient prêts à parler des modules, pas besoin de se précipiter pour obtenir stdio.h pour des programmes simples. Je peux attendre qu'ils soient prêts pour des sujets comme les cours, pas besoin de les précipiter pour leurs premiers programmes. Il a un REPL pour tromper sur la ligne de commande. Python est très bon pour être conceptuellement minimal. C'est une bonne chose car cela aide les débutants à se concentrer sur la tâche à accomplir.

stonemetal
la source
15
Vous avez oublié le "retour 0;" dans votre implémentation C :) Avertissement du compilateur!
Stephen Gross
2
C'est pourquoi BASIC a existé en premier lieu. 10 IMPRIMER "Bonjour tout le monde!" 20 FIN Pour un crédit supplémentaire, le programme Python échoue au message "A-t-il dit" Bonjour tout le monde! "?" test unitaire :-)
Ross Patterson
3
Idem en F #: printfn "Hello World!". Ouais, F # est bon pour les débutants!
Den
7

C'est un point de vue inhabituel.

La chose des adultes consentants n'est qu'une très petite partie de la philosophie de Python. Cela ne tourne certainement pas autour de cela. Cela ne fait même pas partie du "Zen of Python" que vous obtenez si vous le faites import thisdans l'interpréteur.

D'autres choses, comme "explicite vaut mieux qu'implicite", "simple vaut mieux que complexe" et "les chiffres de lisibilité" sont beaucoup plus centrales à Python et montrent pourquoi Python est une bonne première langue.

Quoi qu'il en soit, les «adultes consentants» ne concernent vraiment que le manque d'objets privés en Python. Ce qui en soi est, à mon avis, une autre indication de pourquoi c'est bon pour les débutants: vous n'avez pas besoin de vous soucier de choses comme les interfaces lorsque vous débutez.

Daniel Roseman
la source
1
Oui, mais à propos de ces parties "privées", puisque vous y avez accès, vous pourriez être tenté de pirater certaines solutions / raccourcis autour d'eux sans en savoir mieux.
JohnDoDo
@JohnDoDo Quelle différence cela fait-il si, en C # ou Java, je décide de convertir des privatechamps publicen hack around? BTW, en Python, vous pouvez préfixer la propriété avec un trait de soulignement pour la rendre privée (mais pas vraiment cachée)
OnesimusUnbound
4

Il y a deux points différents. Lorsque vous élevez un enfant, devez-vous le placer dans une bulle qui ne contient que des objets sûrs ou le laisser jouer dans la cour où il risque de trébucher et de tomber?

Être à l'intérieur de la bulle est très restrictif. Vous devez écrire votre code d'une manière très spécifique pour qu'il s'exécute. Lorsque les gens commencent, tout ce qui n'est pas là pour faire ce que la personne veut est considéré comme du gaspillage. Cela peut également conduire à "Je ne sais pas pourquoi cela existe, mais quelqu'un m'a dit que c'était nécessaire."

En Python, cela n'existe pas. Si vous voulez dire "Hello World", vous venez deprint "Hello World" . L'utilisation de Python comme point d'entrée permet à quelqu'un de démarrer et d'écrire simplement le code dont il a besoin pour que ce qu'il souhaite se produise. Un programmeur débutant ne peut pas comprendre la valeur de l'encapsulation avant d'avoir compris les bases de la programmation.

De plus, dans les petits programmes, la sécurité des types n'est pas un gros problème. Tout code écrit par un développeur débutant sera petit et contenu. Ce n'est que lorsque vous avez une base de code plus grande, avec de nombreuses sections que vous utilisez comme couches d'abstraction et auxquelles vous ne pensez pas activement, que la sécurité des types montre qu'il est avantageux de vous assurer de faire ce dont vous avez besoin. Lorsque tout le code est dans le même fichier, il est plus facile de simplement regarder la fonction et de voir ce que vous avez fait de mal.

Autres bénéfices:

  • Beaucoup de bibliothèques qui font beaucoup de choses
  • Flexibilité pour enseigner les techniques de programmation orientées objet et fonctionnelles sans donner l'impression que l'une a été forcée de s'intégrer dans un langage conçu pour faire l'autre.
unholysampler
la source
3
Contre l'analogie: apprendre à votre enfant à ne pas jouer avec le feu. 1) Vous pouvez lui parler, expliquer ce qu'est le feu et ce que fait le feu, montrer des diapositives PowerPoint quoi que ce soit .. ou 2) le laisser jouer avec le feu et se brûler. La deuxième méthode est en effet beaucoup plus efficace. Ce qui m'intéresse, c'est la possibilité qu'il puisse incendier la maison ou même l'aimer et devenir pyromane car aucune mesure de sécurité n'a été prise. Une sorte de situation extrême mais ne peut pas vraiment l'exprimer avec des mots.
JohnDoDo
1
@JohnDoDo - Alors laissez-le se brûler ... c'est la meilleure école et qui ne s'est pas brûlé lors d'un match quand il était enfant? Ça ne va pas le tuer ...
Rook
1
@JohnDoDo: Ce n'est pas parce que le langage vous permet de jouer avec le feu que l'enseignant ne souligne pas que le feu est très dangereux et explique comment l'éviter. Je pense que l'autre chose qui vous manque, c'est que quelqu'un n'est pas lié à une langue. Après avoir acquis une compréhension de base de la programmation, ils peuvent utiliser un langage différent pour apprendre des concepts plus importants (comme ne pas brûler le bâtiment).
unholysampler
3

Python est un excellent langage pour les débutants car il rend les choses simples simples tout en rendant suffisamment de choses compliquées possibles pour qu'il ne soit pas considéré comme un langage de jouet inutile et même les programmeurs avancés trouvent que c'est le bon outil pour certains travaux. Plus précisément, les choses simples comprennent:

  • Un minimum absolu de code passe-partout pour les programmes simples.

  • Collecte des ordures.

  • Saisie dynamique.

  • Syntaxe propre et simple.

Comparez cela par exemple à Java ou C ++ et à la difficulté d'expliquer tous les concepts impliqués dans un programme "Hello, world". Les choses compliquées comprennent:

  • Introspection (l'équivalent de Python à la réflexion).

  • Patch de singe.

  • Les choses qui peuvent être faites avec l'immense bibliothèque standard.

Cela dit, personne qui ne connaît que Python est un bon programmeur parce que personne qui ne connaît qu'une seule langue ou un seul style de langage est un bon programmeur. Toute personne sérieuse à propos de la programmation devrait éventuellement apprendre quelque chose de niveau inférieur, mais pas tant qu'il / elle essaie toujours de contrôler le contrôle de flux, la récursivité et d'autres bases.

dsimcha
la source
2

Je considère Python comme un bon choix. Généralement, pour une programmation de niveau "entrée", vous voulez quelque chose de simple mais productif. Recevoir des retours rapides soutient à la fois la motivation et la vitesse d'apprentissage. J'ose dire qu'il ne s'agit pas d'apprendre la «bonne façon» mais plutôt de «devenir accro et de tomber amoureux de la programmation pour la vie». Le reste arrivera bien plus tard par l'expérience, l'enseignement secondaire, peu importe.

Mar
la source
1

À mon humble avis, apprendre aux gens à coder dans des langues "sûres" est une très mauvaise idée. Les gens supposent que tout est facile et ne pensent qu'à ajouter des couches et des couches de code. Et perdre toute chance de pouvoir déboguer / résoudre les problèmes lorsqu'ils surviennent.

Les bons programmeurs doivent absolument connaître le C / C ++ ou même l'assemblage. Et leur état d'esprit doit également venir de ce côté. Et pas - "Oh, GC, ça fait Magic (tm), nous sommes cool, et pourquoi C ++ n'a pas GC, c'est stupide." attitude.

Codeur
la source
1

Pour un programmeur débutant, le manque de types statiques est une fonctionnalité, pas un bug!

Lorsque vous apprenez à programmer, même les choses les plus évidentes peuvent être difficiles à comprendre. Les systèmes de type dynamique sont très simples et échappent aux sujets les plus urgents dans un cours d'introduction, comme la modularisation, le flux de contrôle, etc.

Le typage dynamique présente également certains avantages conceptuels:

  1. Les types sont associés à des valeurs, pas à des variables. C'est sans doute plus intuitif car cela reflète la raison pour laquelle les programmes se bloquent.

  2. Les messages d'erreur sont beaucoup plus immédiats et concrets. En Python, vous obtenez une belle trace de pile et un message indiquant ce qui s'est réellement passé. Dans un langage de type statique, vous obtenez un avertissement du compilateur indiquant ce qui ne va pas.

    Les étudiants travaillant avec un compilateur ne peuvent travailler que sur des programmes qu'ils comprennent parfaitement, de peur qu'ils ne soient confrontés à une erreur de compilation qu'ils ne peuvent pas résoudre.

  3. La vérification des erreurs d'exécution vous permet d'exécuter des programmes incomplets. Cela permet des programmes plus progressifs où l'étudiant peut d'abord s'inquiéter de faire le début du programme correct et ensuite seulement voir ce qui se passe.

  4. Certains concepts importants, comme le polymorphisme paramétrique et le typage canard, sont gratuits dans un langage dynamique mais nécessitent des systèmes de types plus complexes dans un langage statique.

Enfin, bien que vous ayez encore à gérer la même complexité, vous n'obtenez pas tous les avantages de la frappe statique lorsque vous commencez à programmer:

  • Les programmes débutants sont petits et n'ont pas beaucoup de chemins de code (vous n'avez donc pas à vous soucier autant des bogues de type dans les bits de code rarement consultés)

  • Les programmes pour débutants n'utilisent pas autant d'interfaces et de fonctions de haut niveau, il n'y a donc pas grand-chose à gagner dans le département "utiliser le système de type pour concevoir le programme".

hugomg
la source
1

Il y a une chose très, très , très importante à propos de Python pour les programmeurs débutants que tout le monde semble avoir ignoré: Forcer une indentation valide.

Comme certains des autres commentateurs, j'ai enseigné aux débutants pendant quelques années. Il était anormalement courant de voir des trucs comme ça:

#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;
}
        }

Imaginez maintenant cette horrible incohérence sur une centaine de lignes de code. Pour certains étudiants, l'intégralité de tous leurs projets ressemblait à ceci.

Je ne sais pas comment ils ont réussi à le faire, et cela ne les a jamais dérangés. Chaque fois que je demandais, leur réponse était quelque chose comme "Eh bien, cela n'a pas d'importance parce que le compilateur le comprendra." Même lorsque je leur montre un bug évident en corrigeant l'indentation, ils n'ont toujours aucun indice.

En Python, ce type d'indentation est tout simplement invalide. Ils sont obligés d'utiliser quelque chose qui est au moins lisible, même si c'est un peu incohérent. Cela leur donne une habitude qui, espérons-le, continuera quand ils finiront par apprendre une autre langue.

Izkata
la source
0

Python est une excellente première langue pour la plupart des raisons indiquées ci-dessus. En particulier, une exigence d'une première langue est une courbe d'apprentissage douce, que Python a. Vous n'avez pas besoin de tout savoir sur les classes, par exemple, pour commencer. À cet égard, c'est un peu comme le Basic que beaucoup d'entre nous ont commencé.

Une chose qui n'a pas été soulignée jusqu'à présent est que de nombreuses langues ont une courbe d'apprentissage douce, mais se heurtent rapidement à un mur de briques lorsque vous essayez de faire des choses plus avancées. Old-school Basic en est un bon exemple. Avec Python, vous pouvez entrer dans des choses très avancées avant de penser qu'un autre langage pourrait être un meilleur choix.

À ce moment-là, un débutant est capable de mieux comprendre les choix et les compromis, et est prêt pour C / C ++, Java, Assembler, Prolog, Lisp, etc. !

rzzzwilson
la source
-1

Le problème clé avec Python comme première langue est le typage dynamique et le manque de déclaration de variable. À mon humble avis, ils sont le seul problème majeur avec la langue.

Le simple ajout d'une ligne disant que je ne vais stocker qu'une chaîne dans la variable foo permet au programmeur, à l'environnement de développement, au langage (et pour le "code professionnel" le pauvre fou qui doit venir à froid et le supporter par la suite) pour travailler ensemble. Pour les développeurs et les débutants normaux en particulier, il n'est pas logique d'utiliser une variable pour plus d'un type. Il est tout à fait correct dans les rares occasions où il est logique d'utiliser un type var / object explicite qui permet un typage dynamique.

JohnC
la source