• [^] # Re: Par pitie

    Posté par . En réponse au journal Du livre "Premiers cours de programmation en Scheme". Évalué à 7.

    C'est superbe completement a la masse mais superbe et bien caracteristique de l'education nationale qui ne regarde que son interet propre sans penser a ceux des eleves/etudiants.

    Je te trouve un peu dur là. Et si il y avait une raison logique à présenter Scheme aux étudiants ? Et si des tas d'enseignants avait pesé le pour et le contre avant de proposer un tel choix ? Et si la raison d'être de Scheme n'était pas, par hasard hein, de tout simplement faciliter l'apprentissage de l'informatique ? Et pourquoi l'auteur a écrit un livre pour apprendre la programmation avec le scheme ? Ils sont cons ces gens là peut être ?

    Je cite la page wikipedia de Scheme histoire d'étayer un peu mes propos :

    Scheme follows a minimalist design philosophy specifying a small standard core with powerful tools for language extension. Its compactness and elegance have made it popular with educators, language designers, programmers, implementors, and hobbyists.

    Avant de m'étayer sur les qualités pédagogiques du Scheme, prenons au hasard le cas du C, choix classique dans pas mal de formations.

    Grosso modo, voici ce qui t'attends :

    • La syntaxe est cryptique pour un débutant, il y a les ";" les "*", les "{}", les "[]" et les "()"
    • Le langage est fortement typé, encore une notion de plus à aborder
    • Il faut expliquer comment fonctionne la mémoire, hello malloc
    • les trois quarts de tes étudiants se casseront les dents sur les pointeurs, tu viens de leur expliquer le principe de la variable que déjà tu introduis le concept d'une variable qui en référence une autre
    • Créer un concept abstrait aussi simple qu'une liste requiert l'apprentissage de quasiment tout le langage : structures, pointeurs, allocation mémoire, ...

    En gros tu vas te retrouver à présenter à des étudiants, qui n'ont jamais programmé de leurs vies, des concepts complètement nouveaux, le tout dilué dans une syntaxe rigoureuse bien assaisoné de notions d'architecture d'un ordinateur ( et pourquoi il faut compiler monsieur ? ).

    Je te laisse imaginer le résultat final, tiré de mes propres expériences :

    • Les geeks se baladent et dorment pendant ton cours car ils s'ennuient, ils se sont cassés les dents sur ces concepts bien avant. Note à l'examen : 20 et ils parent une heure avant
    • Les bons élèves, à force d'acharnement finiront par y arriver et obtiendrons entre 12 et 16 selon les profils et l'assiduité.
    • Les élèves moyens gratterons un 10 à 12 péniblement

    On prend ces élèves, et paf le C++ l'année d'après. Là, c'est 10 maxi. Non pas que les élèves soit glands, c'est juste que si tu rajoutes l'aspect OO, les templates et autres joyeusetés, il te reste vraiment pas grand monde pour arriver à correctement assimiler toutes les notions aussi vites. ( Et là on arrive au java, super ya pu de pointeurs ! OLOLOOL eclipse ctro bien ! et il corrige même la syntaxe à la volée. Enjoy le java haut en couleur, pour alimenter DailyWTF ).

    Concrètement, tu fais toujours face au même problème, les élèves sont des gens normaux, pas plus cons que les autres, ils sont tous capables de comprendre ( sauf exceptions ) des algos simples, des hiérarchies basiques, mais la moindre montée en niveau se solde par un échec.

    Donc là, on soulève un problème pédagogique, et mon avis personnel sur le sujet est que tu as trop de bruit pédagogique. Trop de conneries syntaxiques, trop de conneries reliée au matériel dont ils se foutent complètement car ils ne deviendront pas forcément des développeurs acharnés, mais peut être des physiciens, biologistes, ou je ne sais quoi d'autre.

    Maintenant tu débarques avec le scheme.

    • La syntaxe est abordée très rapidement, simple à maitriser : (function arg1 arg2 ...), #f #t 123 "salut" et \a \b \c
    • La récursivité et autres concepts abstraits fondamentaux sont abordés directement.
    • Pas de types à gérer explicitement
    • Le fonctionnel est plus logique mathématiquement, même si les étudiants ne s'en rendent pas compte
    • On peut quand même aller voir des concepts bien avancés si le besoin se présente

    Bref, quand tu introduis Scheme tu :

    • permets aux étudiants d'apprendre les bases de la programmation
    • mets de cotés les concepts inutiles en dehors de toute direction autre qu'informatique
    • peux faire réfléchir des étudiants à des problèmes complexes, sur le plan algorithmique comme générer des grilles de sudoku avec différentes approches ( va faire ça en C, faudra déjà qu'ils compilent leurs projets sans fail de syntaxe, sans manger la mémoire sur une boucle foireuse )

    Voilà, selon moi apprendre à programmer c'est plus intégrer un raisonnement, une approche, qu'aller faire semblant de coder en bricolant de la syntaxe et un tri à bulle. Après, il n'y a rien de magique, apprendre à programmer, ça reste un exercice complexe, si on pouvait éviter de paumer les gens sur les détails, ce serait pas mal non ?

    PS : Et après le scheme, généralement vient le C et le C++ un peu plus tard dans le cursus, et cela se passe bien mieux, car les étudiants savent déjà ce qu'est une variable, une fonction et vont finalement pouvoir concentrer leur apprentissage sur la syntaxe, l'aspect impératif et la gestion de la mémoire tranquillement.