• # Mon avis à moi et rien qu'à moi

    Posté par . En réponse au journal Python comme premier langage de programmation ?. Évalué à 10.

    J'ai lu attentivement les 190 commentaires de ce journal dont le sujet ne pouvait pas ambitionner moins.

    Si je prends la peine de poster, c'est simplement car beaucoup d'idées ont été échangées ici mais peu qui analysent le succès de Python en tant que langage d'apprentissage par excellence.

    Pour ne pas faire dans l'originalité j'évoquerai ma propre expérience.
    Je fais partie de cette génération qui a découvert la programmation sur les ZX81 et autre Commodore 64.
    J'ai commencé avec le BASIC old fashion (pas celui du VB) et j'en retiens que ce niveau de raisonnement reste proche de l'ordinateur et assez imbitable. C'est d'une logique implacable mais vraiment pas destiné à un raisonnement de haut niveau. Basic out !
    Mais ceci m'a permis de m'intéresser à la programmation au point que j'ai suivi une option au collège.
    Le truc intéressant que mon prof nous répétait est qu'il faut d'abord raisonner en terme d'algorithme avant de concevoir le programme. Aujourd'hui ça peut paraître con, mais lorsqu'on parle de modélisation, de recherche opérationnelle, ... l'abstraction prend tout son sens.
    Apprendre les structures de données, de contrôle, la différence entre un boucle "tant que" et un "répète jusqu'à" ...
    Rien de tel pour progresser. Pour passer à la programmation, il ne restait qu'à passer à l'anglais... On appelait ça ... le PASCAL.
    Ce langage était à mon sens le plus adapté à l'enseignement.

    A cette époque, les geeks, les vrais, ceux qui savaient, arboraient des t-shirts "Real programmers use C". Ca le faisait.
    C'est vrai qu'utiliser un pointeur de fonction ou une boucle avec 2 variables qui s'incrémentent en même temps, c'est trop fort, mais que c'est illisible. Il fallait en passer par là. Je passe sur le Smalltalk, le langage Eiffel, le PROLOG ou le Lisp pour la découverte des autres paradigmes de langage pour revenir sur les "vrais" cas d'usage (troll inside).
    Avez déjà vous essayé de faire de la POO avec du C ? On en tire une certaine fierté lorsqu'on lutte des heures durant pour sortir un peu d'héritage avec des cast de structures, des unions et autres bizarreries (Dire que certains croient encore en GTK: troll++). Et là un certain Stroustrup débarque avec son C++. Quel bonheur ... du C objet (non pas celui de la marque à la pomme).
    Mais comment peut-on croire qu'un langage qui impose d'assimiler la POO pour eécrire le moindre truc, qui supporte le multi-héritage (et son pendant le diamant), la généricité, la surcharge des opérateurs (qui est d'une complexité sans nom pour anticiper tous les types passés), les méthodes virtuelles vs statiques, la bonne manière de déclarer ses constructeurs et destructeurs, puisse être enseigné comme base pour des débutants. C'est juste une hérésie, même pou appréhender la POO. Ce langage n'a percé que parce qu'il permettait d'apporter la couche objet au C universel.

    Java en comparaison (ou je sais quelle honte) a choisi la voie du compromis. L'héritage simple couplé avec des interfaces pour gérer l'héritage multiple, le ramasse miette par défaut avec le finalize pour l'optim, la gestion des exceptions héritée de Eiffel (et C++, OK), les types de base pour la performance enrobée dans des Containers lorrsq'on en a besoin et surtout une JVM qui a permis le portage de tant d'autre langages au point que Krosoft l'a imité avec sa CLR.

    Un jour, je suis tombé sur le tutoriel de Guido et là ce fut un peu comme une révélation. Ce langage est juste un condensé de bonnes idées qui m'a ramené au temps du Pascal.

    Votre algorithme transparait immédiatement avec l'indentation. Plus besoin de "finsi", plus besoin de déclarer les types ...
    Ecrire une liste et la manipuler en une ligne. Des structures de haut niveau: hashmaps, sets, listes, strings, ...
    Le typage dynamique que certains décrient comme prêtant à confusion est juste pratique et intuitif. (Certains ont confondu avec le typage faible de Perl qui lui est vraiment troublant puisqu'il nécessite de connaitre le coeur du langage).
    Le fait qu'il soit interprété apporte un retour immédiat.
    Par rapport au Javascript, il nécessiterait d'installer des trucs ?
    Allez faire un tour ici: http://pythontutor.com/

    Mon fils souffre d'autisme et se passionne pour l'informatique. Nous avons entrepris de créer ensemble un jeu de puissance 4 et c'est vraiment un régal d'améliorer progressivement notre petit projet.

    Est-il parfait ?
    Certes non: Comment ne pas être frustré lorsque la PEP pour la création du while est refusée car le langage se veut dogmatiquement minimaliste. Comment ne pas s'insurger de ce paramètre self redondant dans les méthodes de classes.

    Ruby est beaucoup mieux conçu, mais sa syntaxe inspirée du Perl le met définitivement hors de portée du néophyte.