• # Argh...

    Posté par . En réponse au message Pour apprendre à programmer. Évalué à 3.

    - certains diront qu'il faut un langage proche des mathématiques, pour insister sur l'aspect logique plutôt que l'aspect "technique" de la programmation, pour que ce soit presque "transparent" pour le débutant ; c'est l'esprit des cours que j'ai suivi à l'Insa de Rennes avec le Scheme, et ça avait le don d'énerver quasiment tous ceux qui apprenaient à programmer de cette manière :/

    Bouhouhou, méchant... ;(
    Puis c'est pas vrai d'abord, enfin, on a aussi qlqs étudiants qui l'aiment bien ce cours :)

    Bon, plus sérieusement, je ne pense pas qu'il faille prendre cet enseignement comme un apprentissage de la programmation. Pour ceux qui ne connaissent pas, il s'agit d'un cours donné en 1ère année du cycle préparatoire INSA, donc à niveau bac+1 et à des gens qui ne se dirigent pas particulièrement vers l'informatique.

    Le but est juste de donner un petit avant-goût d'une partie du schmilblic informatique. Il s'intitule d'ailleurs "Initiation à l'algorithmique". En gros, les objectifs sont de donner l'intuition que la résolution d'un problème par l'informatique passe entre autres par de la modélisation (choix de structures de données adaptées au problème) et une analyse assez carré des traitement à appliquer à ce modèle pour obtenir la solution (càd qu'il faut cogiter sur l'algorithme à utiliser, bien le caractériser, le découper, tout ça quoi).

    Scheme se prête pas mal à ces objectifs, notament parceque :
    - cet enseignement est très cours, et plus le langage est simple, plus vite on peut s'en servir. Je sais que les parenthèses filent des boutons à certains, mais dans les faits on est très peu emmerdés par la syntaxe dans les TP, parcequ'il y a très peu de choses à savoir pour faire des programmes bien formés.
    - le paradigme fonctionnel est le plus proche de ce que les étudiants connaissent déjà, à savoir les maths, et impose un raisonnement assez linéaire (la dernière ligne d'un TP, c'est à peut près toujours du style "(define solution (lambda (données) (f (g (h données)))))", le tout étant de déterminer les f,g et h, mais elles sont totalement indépendantes les unes des autres, et bien caractérisable individuellement).

    Relativement à ses objectifs modestes, cet enseignement fait je pense son boulot. Au niveau de la perception qu'en ont les étudiants, c'est en fait extrêment hétérogène. Parmis ceux qui n'ont jamais programmé en quoi que ce soit, on a des gens qui assimilent très bien le mode de raisonnement (et qui en général nous disent que le lien aux mathématiques les a aidé), alors que d'autre n'accrocheront jamais. Et parmis ceux qui ont déjà une petite expérience personnelle en programmation (toujours impérative dans les faits), ça va du pur rejet ("la récursivité c'est nul, y'a qu'à utiliser un compteur de boucle plutôt" ou encore "c'est bien mignon votre truc, mais moi je fais des applets en swing le weekend alors vous avez pas grand chose à m'apprendre"), à la fascination pour la clarté, la concision et l'élégance de certains des bouts de code qu'ils sont amenés à pondre. Bref, on les mettra jamais tous d'accord, mais bon, c'est comme ça pour toutes les matières je crois.

    Mais pour vraiment apprendre à quelqu'un à développer des applications, il y a tant d'autres choses à aborder que ce à quoi on se cantonne dans ce cours. Je crois qu'il n'y a pas de miracle, quel que soit le langage, c'est long.

    Pour rester en Scheme, il y a moyen, par exemple en suivant le HTDP. C'est un cours largement plus complet que ce que l'on fait nous, et qui laisse peu de chose de côté :
    http://htdp.org/2003-09-26/Book/(...)

    Et comme autres langages, je pense que Python est un bon choix, parcequ'il permet vraiment un crecendo dans l'apprentissage de la structuration et la complexité des programmes (tu commences avec des petits scripts, et puis tu fais des fonction, puis des classes, et des modules, tout ça sans changer de langage). Le fait d'avoir une bonne base de structures de donnée (listes, dictionnaires, etc.) integrée au langage est aussi un sacré plus. Et puis biensûr, d'être interprété, ça facilite bien le tatonnement en général.

    On pourra biensûr avantageusement remplacer Python par Ruby dans le paragraphe qui précède, le seul inconvénient que j'y vois étant qu'il existe beaucoup moins de support pédagogiques déjà écrits (surtout si on cherche en français). Pour Python, il y a ça qui est un peu fourre-tout mais très bien quand même :
    http://www.oreilly.fr/catalogue/2841772942.html(...)
    http://www.ulg.ac.be/cifen/inforef/swi/download/python_notes.pdf(...)
    Pour Ruby, à part ça :
    http://www.rubycentral.com/book/(...)
    je connais rien. Or ça c'est pas vraiment orienté débutant ras-les-paquerettes.

    Sinon, en vrac, deux langages que je trouve intéressant pour l'enseignement :
    - OCaml : très complet, permet de présenter autant le fonctionnel que l'objet, impose de la rigueur au programmeur via le typage statique, bref très bien. Mon seul bémol est que pour des gens niveau zéro et pas forcement super motivés, le premier contact syntaxique est rebutant.
    - Eiffel : niveau objet, c'est clean, et puis je me suis toujours dis que les contrats, pour enseigner la rigueur en programmation, ça pouvait être vachement bénéfique.

    Et puis bon, c'est aussi vachement important de completer tout ça avec des initiations à qlqs langages plus spécifiques, genre prolog, sql, csp, etc., histoire que les gens ne foncent pas toujours tête baissée à faire 100% de leur code dans un seul langage juste parceque c'est leur langage de prédilection.

    Mince, j'ai été verbeux...