Arrêter de regarder des tutoriels !
Voici une petite rediffusion / transcription de mon intervention lors de l’édition 2023 de l’AsynConf concernant la spirale des tutoriels.
Au vu du titre, vous vous dites
Le mec a pété un câble, c’est le pire vendeur, il fait des tutos vidéos et il nous demande de pas les regarder…
Pas de panique, je ne suis pas devenu complètement fou. Aujourd’hui, sur Internet, on peut trouver facilement des informations sur n’importe quel sujet (même les plus spécifiques) et c’est particulièrement vrai quand on recherche des contenus pour apprendre le développement. Il y a tellement de vidéos, de blogs, de podcasts, qu’on ne sait plus où donner de la tête. Par exemple, si je tape “Apprendre HTML” sur YouTube, je trouve des dizaines de vidéos en français et des centaines si on lance la même recherche en anglais.
Cette profusion de contenu crée chez les personnes qui apprennent un syndrome assez connu : la spirale des tutoriels (Tutorial Hell en anglais). Le principe est un peu le même que celui du “binge watching” pour les séries, on voit un tutoriel qui a l’air intéressant puis on se dit qu’on va apprendre plein de chose, quand on finit on voit une autre vidéo nous fait envie et on enchaîne comme ça en boucle des tutoriels les uns après les autres.
Les limitations des tutoriels
Alors, vous allez me dire, en quoi est-ce un problème ? Parce que finalement, vous consommez des heures et des heures de contenus pédagogiques, c’est plutôt une bonne chose non ? C’est productif ?
Activité passive
Le principal problème, c’est que les tutoriels sont une manière passive d’acquérir de l’information, et ce n’est pas forcément ultra efficace pour la mémorisation.
Pensez à quand vous étiez au collège ou au lycée, et que vous aviez des cours de mathématiques. De mon côté au bout d’une trentaine de minutes, je décrochais complètement, je n’enregistrais plus rien. C’est pareil avec les tutoriels, si vous regardez une vidéo sans faire de pause, et que vous essayez à la fin de reproduire ce que vous avez vu, je parie que vous allez vite devoir relancer la vidéo en vous disant :
Mais comment il a fait ça déjà ?
Et vous allez rechercher le passage et retourner sur le tutoriel. Preuve que vous n’avez pas forcément retenu grand chose.
Les tutoriels trichent
L’autre problème c’est que quand on fait des tutoriels, on a tendance à “tricher” et on ne vous montre pas tout les aspects du développement.
Si je prends mes vidéos par exemple je prépare souvent le code en amont de l’enregistrement. Cela me permet de connaitre à l’avance la logique que je vais dérouler pendant la vidéo, et de fluidifier mes explications. J’utilise aussi parfois le code préparé comme repère dans un coin de l’écran pour me guider pour le code que j’écrit pendant l’enregistrement du tutoriel. Le problème c’est que ma façon de développer dans un tutoriel n’est pour le coup pas du tout la même que celle d’un cas concret.
Dans un cas réel il y a beaucoup plus d’étapes.
- Lorsqu’on me présente un problème, je vais commencer par réfléchir au choix de la technologie. Je vais peut-être explorer plusieurs bibliothèques pour trouver celle qui me convient ou faire le choix de ne pas utiliser de bibliothèques suivant la situation.
- Ensuite, je vais réfléchir à la logique que je vais adopter avec cette bibliothèque ou avec mon code maison. Je vais réfléchir au déroulement et concevoir une première version de mon algorithme.
- Une fois que j’ai fait cette réflexion, je vais pouvoir commencer à coder. Mais ma première version du code ne sera pas forcément définitive. Je vais peut-être réaliser que mon organisation et ma logique n’est pas bonne.
- Je vais donc faire un petit peu de refactor (réorganiser le code).
- En faisant ce refactor, j’introduis peut être des bugs. Bugs qu’il va falloir comprendre pour ensuite pouvoir les résoudre. Cette étape de débogage peut rapidement prendre beaucoup de temps.
Du coup dans un tutoriel on ne vous montre que la troisième étape : L’écriture du code. Toute la partie réflexion a déjà été faite en amont, et toute la partie débogage est évitée (ce n’est pas forcément intéressant de voir quelqu’un qui galère pendant 20 minutes sur trois lignes de code car il a oublié une virgule).
En plus, dans le cadre des vidéos, il y a aussi l’aspect montage qui permet de couper les hésitations et qui donne cette impression que l’on n’hésite jamais et que tout se déroule naturellement.
Tout ça fait que forcément, quand vous regardez les tutoriels, vous avez une idée du développement qui n’est pas forcément réaliste. Et vous vous dites
Je n’aurai jamais ce niveau-là !
Et c’est tout à fait normal, parce que le niveau de la personne que vous voyez en vidéo n’existe pas. Il y a très peu de développeurs dans le monde, je pense, qui sont capables de développer comme ça, sans poser sa réflexion ni hésiter lors de l’écriture du code.
Pour ceux qui ont le syndrome de l’imposteur, faites attention à ça. Peut-être que l’origine du problème vient du fait que vous regardez des tutoriels et que vous vous comparez à une cible qui n’est pas réaliste.
Un tutoriel peut se tromper
Enfin, le dernier problème que vont avoir les tutoriels, c’est le fait qu’ils ne sont pas forcément justes.
- Les technologies évoluent assez vite et une information juste au moment de la conception de tutoriel peut ne plus l’être quand vous le suivez. Quand on cherche des contenu, c’est assez difficile de faire le tri entre ce qui est actuel et qui fonctionne, et ce qui ne fonctionne plus (surtout quand on manque d’expérience).
- Le formateur peut aussi se tromper par manque de connaissance ou à cause d’une mauvaise compréhension. Il ne faut donc pas prendre ce qui est dit comme parole d’évangile et parfois remettre en doute ce qui est enseigné si cela vous semble étrange.
- Le formateur peut aussi avoir des affinités particulières avec certaines technologies et ne vous montrer qu’un seul type de solution par rapport à ce qui existe (dans mon cas j’ai beaucoup tendance à mettre PHP en avant pour le développement back-end alors qu’il existe plein d’autres outils).
Comment mieux apprendre ?
Mais alors, si les tutoriels ne suffisent pas, comment fait-t-on pour apprendre ? Qu’est-ce que je conseilles pour progresser ?
Pour moi, les tutoriels, peuvent servir de base d’apprentissage mais ne sont absolument pas suffisant pour un bon apprentissage.
Prendre des notes
Le premier point, c’est de prendre des notes. Comme je l’ai dit précédemment, lorsque l’on consomme un tutoriel, on est plutôt passif, et ce n’est pas idéal pour la mémorisation. Lorsque vous voyez des notions importantes, il est important de les noter pour pouvoir ensuite vous y référer. Comme ça, quand vous allez commencer à pratiquer, si jamais vous ne vous souvenez plus de quelque chose, vous allez pouvoir vous référer à vos notes, plutôt que de chercher à relancer un tutoriel. Cela vous permet aussi d’être moins passif devant le tutoriel et le fait de noter permettra une meilleur mémorisation.
Il est aussi possible d’utiliser des cartes de révision / flashcard (merci à Upward_ pour la découverte) pour s’entrainer et mieux mémoriser. Le principe, pour ceux qui ne connaissent pas, c’est d’avoir des cartes avec un recto et un verso, et lorsque vous allez voir une notion importante, vous allez noter une question sur le recto et la réponse associée sur le verso.
Si je prends un exemple avec le CSS,
- Sur le recto vous allez noter la question “Que fait
align-items
?” - Sur le verso, vous notez la réponse (vous pouvez utiliser vos propres mots) “Gère l’alignement des élément sur l’axe secondaire”
Cette carte sera placé dans une pile que vous remplirez au fil de votre apprentissage. Ensuite, de manière régulière, vous prenez des cartes au hasard et vous vous interrogez. Si vous êtes capable de répondre, ça veut dire que la notion est assimilée, vous pouvez mettre cette carte de côté. Si vous n’arrivez pas à répondre, vous remettez votre carte dans le tas et vous vous reposerez la question plus tard. Cette approche est intéressante car elle permet la répétition et va améliorer votre mémorisation.
Pratiquer
Le second point, et c’est selon moi le plus important, c’est de pratiquer ! La pratique est essentiel dans le cadre du développement pour apprendre et s’améliorer. Si je fais une analogie, si vous essayez d’apprendre sans pratiquer c’est comme essayer d’apprendre le skateboard juste en regardant des gens faire. Même si vous ne faites que ça pendant des années, je peux vous garantir que cela ne changera rien au fait que vous tomberez lorsque vous mettrez vos 2 pieds sur un skate. La pratique permet de s’approprier les connaissance et de voir comment elle s’applique en pratique et c’est quelque chose qui est valable dans la plupart des enseignements.
Un tutoriel peut par exemple vous permettre de découvrir le principe des conditions, des boucles ou autres concept de base. Mais il faut nécessairement pratiquer des cas concrets pour être à l’aise avec leur utilisation et savoir quand et comment les utiliser. Sans pratique vous ne pourrez pas maîtriser les fondamentaux. Et encore une fois la répétition permet de mieux mémoriser les notions et de faire les choses plus naturellement par la suite.
Pour vous exercer il est important de vous fixer un objectif qui est légèrement hors du cadre de ce que vous savez déjà faire. Lorsque vous finissez un apprentissage, que ce soit en cours ou à travers un tutoriel, essayez de trouver un exemple qui sort un petit peu des exemples que vous avez déjà vu. N’essayez pas de reproduire le même exemple que celui vu dans le tutoriel, ça n’a pas forcément un grand intérêt, parce que la personne vous a déjà déroulé la logique. Aller au delà du problème initial vous permettra de travailler votre capacité à résoudre des problèmes et l’utilisation des outils que vous avez découvert. Il n’y a pas forcément besoin d’aller chercher très loin pour trouver de quoi pratiquer.
- Pour le CSS, vous pouvez vous inspirer de sites que vous avez déjà vus. Essayez de reproduire des interfaces que vous aimez bien. Vous pouvez aussi utiliser Figma community pour trouver des maquettes pour vous entraîner.
- Pour pratiquer le JavaScript vous pouvez essayer de reproduire des petit widgets (éléments de formulaires avancés, lecteur vidéo / audio…)
- Pour le back-end partez de ce que vous savez faire et ajouter des fonctionnalité supplémentaires. Par exemple si vous avez appris à créer un blog avec des catégories, ajoutez un système de tags, un système d’auteurs, de relecteur ou faites varier le sujet avec un site de recette de cuisine, ou de réservation de chambre pour un hôtel fictif… Une fois que vous savez interagir avec une base de données, vous pouvez à peu près tout essayer pour vous entraîner.
En revanche, ne vous fixez pas un objectif trop éloigné car il y a un risque de perdre la motivation (ou de rencontrer trop d’obstacles), ce qui pourrait vous décourager.
Je me répète peut être un peu mais c’est important, le fait de travailler par vous-même va vous permettre d’entraîner votre esprit logique et c’est essentiel. Comme je vous le disais précédemment, tout ce qui est réflexion, refactor et débogage n’est pas forcément montré dans les tutoriels et vous ne pourrez découvrir ça qu’en pratiquant.
Multiplier les sources
Pour éviter d’être trop influencé, il est essentiel de diversifier ses sources d’apprentissage. On peut avoir tendance à chercher une formation complète qui couvre tous les aspects d’un sujet. Cependant, chaque développeur a sa propre expérience et sensibilité, et explique les choses à sa manière. Par exemple, un développeur qui est à l’aise avec le PHP pour le back-end pourrait ne pas couvrir toutes les possibilités offertes par d’autres technologies comme Node.js / Python / Ruby ou autre. Il est donc important de multiplier les sources pour découvrir différentes approches et techniques.
De plus, ne vous focalisez pas sur un seul support. Ça peut être très tentant de ne faire que des tutoriels vidéos, mais il y a plein de contenus qui sont intéressants. La lecture d’articles, par exemple, peut être très enrichissante. Que ce soient des articles techniques pour les développeurs plus avancés, ou des articles qui expliquent les bases pour les débutants, ils offrent une excellente occasion de découvrir de nouvelles technologies / approches.
Aussi, n’hésitez pas à assister à des conférences ou regarder des rediffusions. Il est courant de penser que ces événements sont réservés aux développeurs seniors traitant de sujets complexes. Cependant, de nombreuses conférences abordent des sujets plus généralistes, accessibles à tous les niveaux. Ces événements peuvent grandement contribuer à améliorer des compétences plus larges que simplement votre capacité à écrire du code (travail en équipe, méthode d’organisation, outillage…).
Lire la documentation
Ensuite, n’hésitez pas à aller la source de l’information et consulter les documentations. Je sais que ce n’est pas forcément quelque chose qui est très bien enseigné (c’est quelque chose que je m’efforce de mieux montrer dans mes formations récentes) mais il est important de prendre l’habitude de chercher en priorité sur la documentation du langage / technologie quand on a un problème ou une question car c’est la seul et unique source de vérité. Si jamais, dans un tutoriel, vous voyez la personne utiliser une fonction que vous ne connaissez pas, prenez le réflexe d’aller sur la documentation pour comprendre son fonctionnement et son utilité. N’attendez pas forcément les informations de l’instructeur.
Quelqu’un qui vous explique quelque chose, est déjà en train de faire une traduction, et peut potentiellement se tromper dans son interprétation. Ce point est aussi à prendre en compte si vous décidez d’utiliser les intelligence artificielles pour vous expliquer certaines choses. Elles peuvent parfois “halluciner” des informations donc au moindre doute consultez la documentation !
Se faire aider
Lorsque vous rencontrez des problèmes il est important de ne pas hésiter à demander de l’aide. Malheureusement, il est courant que les novices qui posent des questions sur les forums ou les chats ne soient pas toujours bien reçus par certaines personnes qui peuvent être condescendantes et cela peut être décourageant pour les apprenants. Cependant, il est important de ne pas laisser ces mauvaises expériences vous empêcher de poser des questions.
Demander de l’aide et poser des questions fait partie des choses que vous serez amener à faire lorsque vous travaillerez en équipe et c’est tout à fait normal d’avoir besoin des autres pour avancer. Être capable de synthétiser un problème et de l’expliquer est une compétences importantes pour tout développeur.
Au début, vous risquez de poser vos questions de manière incorrect (montrer trop de code, mal détailler votre environnement…) mais on vous guidera souvent sur comment mieux poser votre problématique pour avancer. Comme pour le reste, communiquer correctement ses problèmes techniques est une compétence qui se travaille avec l’expérience.
En revanche si on vous répond mal, ignorez les personnes et signalez les (les forums / chat ont souvent des systèmes en place pour ça). Il y a malheureusement des cons dans toutes les communautés et il ne faut pas les laisser vous tirez vers le bas.
Pourquoi enregistrer des tutoriels ?
Après les remarques que j’ai faites on peut se demander pourquoi je fais des tutoriels si je ne pense pas qu’ils soient suffisant pour apprendre. Dans le cas de Grafikart vous remarquerez que je ne prétends pas, à moi seul, vous former au métier de développeurs.
Améliorez-vous et apprenez de nouvelles choses
De mon côté je ne vois pas les tutoriels comme une fin en soi mais comme un outil pour vous permettre d’avancer et de vous améliorer. Outil qui doit être combiné avec la pratique ou qui peut complémenter une formation plus classique.
Une ressource en français
Le premier intérêt que je vois dans mes contenus est l’accessibilité pour le public francophone. Dans le cadre du développement, c’est l’anglais qui prime dans l’échange d’information (en plus les langages de programmations utilisent des termes anglais) mais malheureusement, en France on est nul dans l’apprentissage de l’anglais. La langue peut représenter un obstacle majeur pour ceux qui souhaitent se lancer dans le développement après le baccalauréat, ou même avant. Non seulement ils doivent assimiler des concepts techniques, mais ils doivent également le faire dans une langue qu’ils ne maîtrisent pas parfaitement. C’est pourquoi je trouve utile de proposer des tutoriels en français, pour permettre de se focaliser sur les notions techniques sans être freiné par la langue.
Néanmoins, si vous êtes en formation ou en auto-apprentissage, je vous conseille vivement de ne pas négliger l’anglais. Je regrette d’ailleurs que les formations oublient souvent d’intégrer l’anglais dans leur cursus.
Mauvaises documentations
Certaines documentations sont extrêmement bien faites, surtout sur les langages et les technologies modernes. Par exemple, si vous voulez apprendre Go, vous n’avez pas vraiment besoin de tutoriel. Vous avez une super documentation avec un petit “Tour of go”, qui vous explique, avec une petite interface visuelle, comment le langage fonctionne. Il en va de même avec les bibliothèques front-end, comme Vue.js ou React, qui ont des documentations bien structurées qui rentre en détails sur tous les aspects du système tout en offrant des explications simples et accessibles.
Mais toutes les documentations ne sont pas comme ça et certaines sont mal organisées ou ne proposent pas de guide simple pour commencer. La documentation de NodeJS est une bonne illustration de ce problème avec une présentation austère et une organisation des information peu évidente. Les tutoriels permettent de combler ce problème et proposent un fil directeur qui peut être intéressant pour aller directement à l’essentiel.
Faire de la veille
Les tutoriels peuvent aussi être intéressant pour faire de la veille et découvrir une technologie particulière. Dans ce cas-là, je vous conseille de plutôt chercher des contenus courts (15/20 minutes environ). Cela permet de voir succinctement le principe d’une bibliothèque ou d’une technologie. Par contre, si le sujet vous intéresse et que vous avez envie d’explorer plus en profondeur je vous conseille de le faire par vous-même. Ne vous basez pas simplement sur des tonnes et des tonnes de vidéos pour découvrir une technologie, ce n’est qu’en pratiquant que vous allez un peu découvrir le fonctionnement.
Avoir un retour d’expérience
Les tutoriels permettent aussi d’avoir un retour d’expérience. Si quelqu’un a des années d’expérience dans un langage, son retour sera intéressant car il permettra de découvrir les avantages et les inconvénients sans avoir à passer des années à les découvrir par vous même. Cependant, il faudra faire attention au contexte de cette expérience, car la personne n’aura pas forcément les même besoins / cas d’utilisations que vous. Donc prenez ces informations avec un esprit critique.
Améliorer sa méthodologie
Lorsque vous allez gagner un peu en expérience, vous allez très rapidement vous rendre compte que le souci, ce n’est pas simplement d’être capable de solutionner un problème, mais plutôt de créer un code qui soit efficace, bien organisé, et suffisamment lisible pour pouvoir revenir dessus plus facilement dessus dans le futur pour le faire évoluer. Pour cela, on va chercher l’expérience d’autres développeurs pour chercher à savoir ce qui marche et avoir de nouvelles idées. Mais pour ce genre de sujet les tutoriels ne sont pas forcément le choix idéal et on préférera lire des articles ou voir des conférence pour comprendre l’idée générale.
Ne regardez pas tout !
Enfin, sélectionnez ! Ne vous sentez pas du tout obligés de tout regarder. Je sais que sur YouTube, on a tendance à s’abonner à une chaîne pour attendre les dernières vidéos mais ce n’est pas comme ça que la consommation des tutoriels est pensée. L’objectif d’un tutoriel est de répondre à une problématique spécifique que vont avoir les apprenants à un moment donné. Du coup, les vidéos, n’ont pas vocation à toute être vues les unes à la suite des autres dès leur sorties mais plutôt regardé plus tard, le jour où vous aurez envie d’apprendre ou de découvrir la technologie traitée. Ne vous dites surtout pas :
Ah tiens, il y a une nouvelle vidéo sur un nouveau framework, il faut à tout prix que je le regarde et que je l’apprenne !
Si vous faites ça, vous allez perdre beaucoup de temps et vous risquez d’apprendre beaucoup de choses qui ne vous serviront peut être pas (des outils qui résolvent des problèmes que vous n’avez pas). Malheureusement votre temps est limité donc ne le gaspillez pas !
Et les formations dans tout ça ?
Quand j’ai commencé le développement, il y a un peu plus de 15 ans, il n’y avait pas autant de formations qu’aujourd’hui. On était obligé de se contenter de cursus généralistes, comme les DUT ou les licences, qui ne se focalisaient par forcément sur le développement web. Maintenant on trouve une grande quantité de formations spécifiques au développement web avec des formats et des durées très variées.
Mais alors, pourquoi suivre une formation, si on peut apprendre par soi-même sur Internet ? Quels sont les avantages d’une formation par rapport à l’auto-apprentissage ?
Pour moi, les formations apportent plusieurs avantages seulement, et seulement si vous avez un vrai professeur (en réel ou en distanciel). Si vous faites une formation onéreuse, et que la formation ne fait que vous refourguer simplement des vidéos ou des PDF, ça ne sert à rien (il n’y a pas de plus valu par rapport à des tutoriels disponibles en lignes à des prix plus attractifs). Aussi, dans la suite je ne parle que des formations qui offrent de vrai cours.
Le premier point intéressant, c’est que vous allez avoir un référent. Et vous allez pouvoir poser des questions, et lui demander des explications en cas de problèmes. Le problème avec une vidéo ou un tutoriel écrit est qu’il est impossible d’évaluer si l’apprenant a bien compris la notion ou non et il peut du coup se retrouver à enchaîner les contenus sans forcément que les notions précédentes soient bien comprises (et non un QCM n’est pas une preuve suffisante).
Ensuite, une formation vous incitera en général à travailler en groupe et cet effet de groupe est super important car elle permet aux étudiant de s’entraider. Vous avez parfois des étudiants qui ont un meilleur niveau, qui peuvent vous aider, ou inversement, vous avez mieux compris une notion qu’un autre étudiant, et vous pouvez l’aider. En l’aidant, cela vous permet de réexpliquer une notion que vous avez vu et ça vous entraîne à communiquer et à mieux apprendre. Et ça, c’est super important ! Quand on recherche un développeur, on recherche souvent une personne qui est capable de travailler en équipe (si vous êtes une brute d’un point de vue technique, mais que vous ne communiquez avec personne, vous n’êtes pas forcément super utile dans une entreprise…).
Pour conclure
Pour conclure, ce que je voudrais vous dire, c’est que les tutoriels ne sont pas une fin en soi. Les tutoriels, sont un support pour améliorer votre apprentissage, mais ils ne sont pas suffisant pour devenir un développeur compétent. Vous allez apprendre les bases, et ensuite, c’est vous, par la pratique, qui allez pouvoir développer vos compétences.
Focalisez vous sur les bases. Ne cherchez pas à faire des centaines d’heures de tutoriels avec 15 000 cas pratiques différents, ce sont les bases qui sont importantes. Lorsque vous allez rejoindre une équipe, lorsque l’on va communiquer avec vous, si vous avez les bases, on va pouvoir vous faire progresser. Si vous n’avez pas compris ce qu’est une fonction, ce qu’est une variable, ce qu’est une classe, par exemple, ça va être difficile de vous guider pour résoudre un problème.
N’enchaînez pas dix heures de vidéos, avancez pas à pas et après 30min / 1h pratiquez pour vous assurer que vous avez bien compris les choses. Il n’y a que comme ça que vous pourrez vraiment intégrer les notions correctement et avancer de manière efficace. Il n’est pas possible de “speed run” l’apprentissage du développement web, encore moins en enchaînant des tutoriels les uns derrière les autres.