mathieui’s blog : Apprendre aux gens à travailler (et ensemble)

J’ai une expérience à la fois très limitée (je ne vais pas non plus faire plusieurs cursus complets) et un peu plus large que la moyenne, du paysage de l’enseignement supérieur français en matière d’informatique. Je pense qu’en ayant fait un DUT, une licence, un master (en cours), et connaissant un nombre d’élèves ingénieurs dans diverses écoles en france, j’ai une vision plus ou moins globale de ce qui se fait dans le programme.

Mon ressenti est qu’on apprend aux gens à être diversifiés (c’est bien), avoir des bases dans un certain nombre de langages (c’est bien), à avoir des bases algorithmiques (c’est un minimum), à faire de l’architecture matérielle et de l’assembleur (c’est bien, dans une certaine mesure), à parler anglais (c’est indispensable), à faire diverses matières socio-économiques (en école d’ingénieurs, et je ne me prononcerai pas).

Malgré tout ça, je pense pouvoir pointer du doigt quelques gros points noirs dans ce qui se fait actuellement.

Les langages

Premièrement, il manque une vraie connaissance (non-exhaustive malgré tout) des langages qui sont utilisés. À l’heure actuelle, de ce que j’en ai vu, on lance les langages aux étudiants en leur disant « il faut faire ça, comme ça ». Ça incite les étudiants à ne comprendre ce qu’ils font (une sorte de cargo cult), à bâcler le travail parce ce qu’ils ne comprennent pas, et à ne pas aimer en général les langages qui leur sont donnés ainsi.

Je ne dis pas qu’il faut introduire les étudiants à toutes les subtilités syntaxiques du C++, aux méandres du GC de java, ou encore aux détails du GIL de python, mais simplement qu’il faudrait que les élèves comprennent un minimum ce qu’ils font. Par exemple, pendant mon DUT, on a eu une série de TP portant sur python, qui en réalité n’étaient qu’un prétexte pour l’apprentissage des sémaphores. Très bien ; sauf que, voilà, c’était « bon alors on va travailler sur la synchronisation, et on va utiliser python, débrouillez-vous, je veux le TP dans ma boîte mail avant vendredi 23h59 ». C’est sûr, ça permet de mettre « Python » sur le CV, mais dans la réalité, ça ne passera jamais la première question la plus basique d’un entretien d’embauche.

Le seul langage vu à peu près en détail est je pense java, et encore. Étant donné qu’il faut utiliser des IDE éléphantesques pour arriver à ses fins dans un programme un minimum complexe, je doute que beaucoup connaissent le nom des classes indispensables et leurs variantes (comme ArrayList et Vector, ou HashMap), sans parler des détails d’autoboxing, ellipses et autres joyeusetés.

Mon ressenti le plus flagrant est la phrase d’un enseignant qui, quand on lui a dit que les TP en assembleur, c’était quand même passablement fatiguant : « J’aurais bien fait les TP en C, mais vu votre code, j’ai préféré vous les faire en ASM ». Le seul hic, là-dedans, c’est que jamais, dans le cursus, il n’y a eu de créneau véritablement dédié au C, et à l’écriture de code correct en particulier. Il y a bien eu des TP contenant du C, avec une petite introduction et quelques broutilles ; mais la partie la plus complexe consistait en une liste chaînée (voire doublement chaînée), le gros du travail consistant à écrire un petit programme qui lit un filesystem virtuel.

Après ces modules, on a des enseignants qui considèrent ces notions comme acquises, et qui mettent donc des bouts de code de linux à analyser en partiel. Je trouve ça très bien, mais il aurait été peut-être judicieux que les gens aient été familiarisés avec du code avant.

De la même façon, l’apprentisage d’OCaml, bien que plutôt clair, a laissé de côté un certain nombre de choses, plus ou moins importantes, telles que le fait que le toplevel est une horreur sans nom avec des bugs en plus par rapport à ocamlc, les objets, des détails sur les records qui sont durs à deviner, une partie de la syntaxe qui nous a été dictée plutôt qu’expliquée (ce qui fait qu’il faut réapprendre par-derrière). Ça a quand même laissé une majorité des étudiants avec un ressenti très négatif du langage (qui vient aussi du fait que le « projet » nous faisait utiliser la bibliothèque graphique incluse dans OCaml, qui est « limitée », pour rester poli). Le second projet nous faisait utiliser camlp4, qui n’est là non plus pas vraiment le meilleur exemple de bibliothèque OCaml.

Les outils

De la même façon, je pense qu’on n’apprend pas véritablement aux gens à utiliser des outils pratiques.

Quand 70% des étudiants (80% si on ne ne compte pas ceux qui ont fait BTS/DUT avant) n’ont jamais utilisé de système de gestion de versions (et en les prenant tous en compte, pas que les corrects), ça fait se poser un certain nombre de questions. Parce que je ne parle pas de lire en long, en large, et en travers ce document, même si ça ne peut pas faire de mal, mais utiliser dropbox pour partager du code, à Bac+4 en informatique, c’est quand même plutôt dommage.

C’est d’autant plus dommage que la majorité de ces personnes devront travailler en équipe, et donc nécéssairemeent avec un système de versionnage de code, c’est pourquoi je ne comprends vraiment pas pourquoi il n’y a jamais eu de point fait là-dessus au cours de la formation (N.B. : j’ai eu un cours sur SVN pendant mon DUT, qui avait le mérite de couvrir les bases).

De ce que j’en ai vu, ce n’est même pas que les personnes sont réfractaires à l’idée d’un gestionnaire de versions, ou quoi que ce soit, mais c’est tout simplement qu’ils n’y ont jamais été introduits.

L’état d’esprit

Pendant mon DUT, on n’a pas arrêté de me dire que de toutes façons, tout le travail sur le code serait bientôt fait en Inde (de ce que j’ai compris, ça fait 20 ans qu’on dit ça, et ça n’a pas bougé), que les « pisseurs de code » ça se trouvait n’importe où et donc qu’il fallait évoluer dans l’« Architecture logicielle » et le management pour avoir un avenir, etc. Pour la majorité des personnes dans cet état d’esprit, n’importe quel codeur vaut n’importe quel autre codeur.

Sauf que non. Le code, c’est à la fois une science, et un art. Imaginer que n’importe qui peut tout faire sans apprentissage, formation, ou motivation, c’est se planter complètement. Ça demande à la fois d’avoir une connaissance de la codebase à un haut niveau, les classes, les fonctions, les bibliothèques utilisées, au niveau de la structure du projet, et enfin, en « bas » niveau, le code, dans ses parties les plus techniques. Ça demande également un bagage théorique, notamment en complexité, et de la culture générale informatique, afin de ne pas réinventer la roue et écrire des algorithmes salement suboptimaux.

Considérer que coder est une tâche « basse », c’est également nier l’expertise technique qui est requise dans un grand nombre de domaines. Bien sûr, ce n’est pas au système éducatif de nous spécialiser dans des niches, d’autant que nous sommes dans un domaine où elles évoluent toujours plus vite, mais ce n’est pas non plus une raison pour faire comme si on n’en avait pas besoin.

Ça date

Si je fais un tour dans les « notes de cours » de ma formation actuelle, il me suffit de télécharger un ensemble de documents pour me rendre compte de l’état de décrépitude de la chose.

Les parties théoriques, elles, datent aussi pour certaines, mais ce n’est pas un problème en soi, car la technologie évolue beaucoup plus vite que la théorie. La théorie des langages n’a par exemple pas bougé d’un iota (dans les parties traitées), et il en est de même pour les probas, l’algorithmie et les langages formels.

Encore une fois, je suis d’accord avec l’idée que former des spécialistes sur la dernière technologie à la mode est une perte de temps totale, mais ça ne veut pas dire pour autant que les ressources pédagogiques utilisés doivent dater du siècle dernier. Je pense que les gens devraient être formés à des méthodes, en se familiarisant avec des outils actuels. En clair, véritablement appliquer le mantra « apprendre à apprendre », plutôt que de perpétuer un certain cargo cult de la technologie.

Peut-être qu’une partie des élèves finiront comme programmeurs COBOL pour un grand établissembent bancaire, travaillant effectivement sur des outils et du code datant de mathusalem, mais ce n’est pas une raison pour habituer les étudiants à des outils austères qui ont été complètement remaniés et n’existent même plus sous cette forme aujourd’hui.

Tous les articles

  1. Moving from AsciiDoc to Sphinx/reST
  2. Migration vers pelican
  3. grub-mkconfig: brainlessness considered harmful
  4. Introducing django-gpg
  5. Sortie de Poezio 0.7.5.1
  6. Moving away from private trackers
  7. Les services centralisés du web, ou comment faire du pourri avec des sites bien
  8. Poezio 0.7.5 is out (en)
  9. Sortie de Poezio 0.7.5
  10. Mise à jour du site
  11. PleaseShare update
  12. Tracer l’exécution d’un programme python en curses
  13. L’incompétence au service de l’acharnement thérapeutique
  14. Mon fournisseur d’internet^Wde ssh mobile
  15. Dwm.
  16. PleaseShare a maintenant un design cool
  17. Poezio 0.7.2
  18. PleaseShare avance
  19. Il faut changer la façon de gérer les certificats SSL
  20. Petits changements
  21. Le partage de fichiers du futur
  22. Lenovo ThinkPad x100e
  23. RMLL 2011, le compte–rendu
  24. Les EFL et la sérialisation : EET
  25. Pourquoi je n’ai pas acheté de musique l’année dernière, et pourquoi je n’en achèterai pas cette année non plus
  26. L’E-reader Samsung E60
  27. Poezio 0.7 !
  28. La culture de l’obsolescence
  29. Projet perso : pymg
  30. Utiliser directement des contenus externes, c’est mal.
  31. Gnash est un trojan
  32. Bloquer les sharethis, addthis & co
  33. Ranger, le file manager qui en veut
  34. Ce serveur déménage
  35. Nouveau baladeur : Sansa clip plus
  36. Sima : redécouvrez votre musique
  37. Enfin la 3D avec nouveau !
  38. Le bridage, c'est le pied.
  39. Archos, ou le mensonge par omission
  40. Nouveau pc portable :)
  41. Évolution d'enlightenment : maintenant, ça poutre
  42. Nouveau matos \o
  43. Another must-have: gmpc
  44. Les watermark, c'est moche
  45. Gpodder, le plaisir des podcasts
  46. Et un peu plus de console par ci par là…
  47. Faire marcher PHP dans apache sous arch
  48. Pioneers, un jeu qu'il est bien
  49. Télécharger en ogg depuis jamendo
  50. Compte rendu des RMLL
  51. Migration
  52. Pyjama, nouvelles features
  53. Personnalisation de ncmpc
  54. newsbeuter, un bon feed reader
  55. Installer un serveur ejabberd sous debian
  56. Pyjama (MAJ)
  57. Flash …
  58. Arch news
  59. Rapports d'utilisation
  60. Gmail Downloader
  61. DartyBox Sucks !
  62. Rapide inventaire de clients de messagerie en console
  63. Mes logiciels
  64. Premières impressions d'Archlinux
  65. Premier billet