Comment apprendre un nouveau langage rapidement
Apprendre un nouveau langage est une étape obligatoire en tant que développeur. Mais pourquoi est-ce si important ? Et surtout, quel est le meilleur moyen de le faire rapidement ?
Multipass
L’article d’aujourdhui ne s’adresse pas à toi si tu apprends ton tout premier langage. Mais chui sympa, tu peux rester ! C’est toujours intéressant de savoir ce qui t’attend dans le futur. Le seul prérequis pour appliquer ce dont je vais te parler, c’est que tu connaisses déjà un langage. Et une fois que tu le connais, il est important que tu ailles voir ailleurs.
J’ai du contenu centré là-dessus qui arrive bientôt donc je rentre pas trop dans les détails, mais l’hyper spécialisation en tant que développeur est un piège vicieux. C’est super attirant. Plus t’es spécialisé dans un langage (ou pire, seulement un framework) plus tu vas devenir bon dedans. Tu vas alors pouvoir t’auto proclamer « EXPERT », gonfler ton égo et si t’es malin, ton salaire avec.
Le problème ? Plus tu t’enfermes fermement et longtemps chez toi, plus c’est dur d’en sortir. Le monde du développement est gigantesque et change en permanence. Le jour où tu ressors enfin dehors, tu sais même plus marcher ! Autour de toi, tout le monde parle chinois et fait de la magie. Toi t’es coincé avec ton expertise et tu limites par la même occasion les postes auxquels tu peux postuler. Tu veux pas que ça t’arrive.
Le langage que tu choisis, c’est toi qui vois. Mais j’ai un seul conseil. Choisis un langage avec un paradigme et/ou un domaine d’application différent. Tu viens de C++ ? Pourquoi pas faire du Javascript pour le web ? Également essaye de toujours choisir un langage avec un minimum de popularité. Encore une fois tu fais ce que tu veux, mais je vois pas l’Intérêt d’apprendre le Perl aujourd’hui.
Durant les quatres dernières années, à ma demande, j’ai changé trois fois d’équipe dans le grand groupe où je suis. J’ai fait de e-commerce (PHP), puis des outils online (NodeJS/DevOps) et aujourd’hui je travaille sur un jeu vidéo directement dans le moteur 3D (C++/Python). À chaque fois, j’ai utilisé la technique suivante pour apprendre les langages nécessaires !
Étape 1 : organisation
Le seul problème qui empêche les développeurs de se lancer dans un apprentissage c’est leur organisation, pas leur capacité à le faire. Il faut qu’on en parle avant même de commencer. Sans organisation, tu vas abandonner très vite.
Organise ton temps
Si ton objectif est d’aller vite, alors il va falloir faire un petit effort. Il est important d’être très régulier dans ton apprentissage. Ça veut dire bloquer plus ou moins 2h par jour, si possible tous les jours, sinon au moins 3/4 jours par semaine.
Tu vas me dire t’as pas le temps et je pense que c’est faux. Il faut juste que tu fasses des priorités dans ce que tu fais. Le moyen le plus efficace d’apprendre quelque chose rapidement c’est de revenir dessus de façon très fréquente. Le côté coup de marteau tous les jours est redoutable pour faire rentrer l’information. Surtout quand tu as beaucoup de choses inconnues à découvrir !
Si ton objectif n’est pas d’aller vite, alors tu peux faire les choses plus relax. Mais ça n’empêche pas qu’il te faut de la régularité. Je veux que tu intègres que le plus important c’est de revenir régulièrement sur le sujet. Sinon tu vas faire comme 80% des gens qui se lancent dans ce genre d’apprentissage.
Tu vas rien toucher pendant un moment et tu vas oublier. Du coup, quand tu vas revenir dessus, ça va te soûler instantanément. Si ça te soûle, tu vas abandonner.
Organise tes sources
Le pire truc à faire au niveau des sources c’est de les chercher au fur et à mesure. Ça et passer de source en source de façon chaotique tous les jours. C’est ce que fait à peu prés tout le monde et c’est aussi une grosse source d’abandon.
C’est le moment où je suis censé te conseiller un truc, genre pluralsight, avec un code promo avec deux mois gratuits. Mais je vais pas le faire pour deux raisons. La première c’est que pluralsight me donnera pas de code promo. La seconde c’est que la source en elle-même c’est toi qui dois la choisir par rapport à tes préférences.
Certains préfèrent un format texte, d’autre un format vidéo, certains ont besoin de la pédagogie d’un formateur et d’autres non. C’est à toi de décider de ça. C’est important de choisir une source principale et de s’y tenir. Prends le temps de faire le bon choix ici. Il faut vraiment que tu sois à l’aise avec.
C’est important que tu passes par une formation principale qui parle de tout le langage. Ça va être ton fil rouge et tu veux qu’il soit solide. Tu pourras t’éparpiller plus tard avec des sources différentes. Pour le premier contact, il faut que tu te concentres sur une seule source.
Maintenant que tu as fermement bloqué du temps pour ton apprentissage et que ta source d’apprentissage est également scellée, tu peux commencer sereinement.
Étape 2 : apprentissage
Maintenant, il y a un gros problème qui est commun à toutes formations. Qu’elle soit écrite ou vidéo peut importe. Pendant tout le temps de la formation, tu es passif. Quand tu es passif, tu apprends, mais tu retiens presque rien. Tu as besoin d’un minimum de savoir théorique (passive) pour être efficace ensuite dans les phases pratiques (active). Alors comment faire pour rendre ces phases passives plus actives et donc plus impactantes ?
Écoute étendue
Ce que je fais à chaque fois c’est que je pratique une écoute active pendant la formation. Très concrètement, j’ouvre un google doc et j’écris à l’intérieur tout ce qui me semble important à retenir ou les particularités du langage en question. Prends des notes rapides, incisives à la limite des bullets points. Je le fais tout au long de chaque session d’écoute. Par exemple, voici un exemple d’une petite note prise pendant que j’apprenais le Python.
#Value equality is not identity quality x = [1, 2, 3] y = [1, 2, 3] if (x == y): print('Variable are equal by value') if (x is not y): print('Variable are not equal by identity')
C’est le genre de trucs qui peut te faire des bugs de fous et qui est propre au Python par la syntaxe « is » et « == ». Un mécanisme que tu peux oublier rapidement. Le fait d’avoir pris cette note a imprimer dans mon cerveau cette information.
Je sais que beaucoup de monde a la flemme de faire un effort en plus pendant une session d’écoute. Je comprends que ça rajoute des choses à faire et que c’est pas agréable. Mais crois-moi, c’est d’une efficacité redoutable. Ça va être DÉCISIF pendant et après ton apprentissage.
Pratique limitée
Un des pires trucs à faire pendant ta formation c’est de te lancer tout de suite dans un énorme projet. On va voir comment il faut le faire après ce projet, mais pendant l’étape d’apprentissage, c’est pas le moment. On va d’abord se concentrer sur des tout petits exercices très rapides à faire chaque session.
À chaque fois que tu vois une partie et/ou un sujet, c’est important de le pratiquer en codant. Le cerveau n’imprime rien si tu ne le fais pas pour de vrai. Et tu n’as pas besoin d’investir 10h de ton temps dans un projet énorme tous les jours pour avoir cette pratique. Il faut y aller progressivement !
Tu peux très simplement trouver des tous petits exercices, genre Katas, pour faire ça. Ou encore mieux réimplementer ce que tu vas voir durant ta formation en changeant des choses. Peu de monde prend le temps de faire cette petite pratique durant la formation. C’est pourtant ce qui va le plus marcher.
Et avec tout ça, tu as le flow d’apprentissage que tu dois répéter chaque session.
Le flow
Pour chaque session, l’ordre est le suivant :
- 1 : Lire ton document de prise de note active
Le fait de lire encore et encore ton document de prise de note active va avoir un effet marteau. À chaque relecture, les concepts et particularités du langage vont entrer de plus en plus jusqu’à devenir une évidence. Tu ne perdras plus jamais de temps à revenir sur des choses déjà vues. Rien que ça, ça fait la moitié de ton apprentissage et tu multiplies par deux la vitesse.
- 2 : Faire une écoute active en ajoutant des notes dans ton document
Chaque session, on ouvre le google doc et on ajoute des notes durant la formation pour la session suivante. Le fait d’écrire en plus d’écouter pendant la session va te faire rentrer les choses plus rapidement.
- 3 : Pratiquer des implémentations de concept de la session à chaud
Pour apprendre et comprendre un langage, il faut pratiquer. C’est obligatoire et il faut le faire le plus rapidement possible. Mais pas n’importe comment. On commence par des exercices simples et rapides.
Une fois que ta formation principale est finie, il faut passer à la consolidation des connaissances. Et pour ça, on va faire un projet. Le choix du projet va être important.
Étape 3 : consolidation
Pratique étendue
Comme dans la plupart des cas, quand on veut grandir en tant que développeur, la solution est de passer par un projet perso. Ça apprend beaucoup de choses, tu fais ce qui te plaît et en plus c’est fun!
Mais dans le cas de l’apprentissage d’un nouveau langage, il y a une astuce qui va optimiser de façon incroyable cette étape. Le meilleur projet perso pour apprendre un nouveau langage c’est un projet que tu as déjà fait.
Et la raison est simple et très logique.
Quand tu développes une application avec un langage que tu connais déjà, tu ne te demandes pas comment utiliser le langage. Tu penses juste à quoi faire à l’intérieur de ton application.
Quand tu développes une application avec un langage que tu ne connais pas, tu fais deux choses à la fois. Tu te demandes comment utiliser le langage et en même temps tu te demandes quoi faire dans ton application.
Ça marche, plein de gens le font, mais c’est pas optimal. Je t’ai promis que ton apprentissage du nouveau langage serait rapide. Je te promets que tu si tu pars sur un nouveau projet pour apprendre un nouveau langage, ça sera plus long.
Ce qu’il faut faire c’est se concentrer sur un projet déjà fait dans le passé. De cette façon, tu vas te concentrer que sur le comment et pas le quoi. Et cette simple astuce va tout changer. Tu viens de gagner un temps fou dans ton apprentissage.
Par exemple moi je fais toujours la même API CRUD qui pourrait faire office de backend pour Instagram. Une API qui permet de poster des images avec un titre et une description sur AWS S3.
C’est complet, ça me fait voir beaucoup de problématiques, et surtout je me pose pas la question de ce que je dois faire. Je sais ce que je dois faire, maintenant il faut que je comprenne comment utiliser le langage.
Épilogue
L’ingrédient secret de tout apprentissage optimisé et toujours le même : la régularité. Je pourrais te donner toutes les meilleures astuces du monde, si tu les appliques pas régulièrement, ça te servira à rien.
Excellent article ! ça fait plus d’un an que je les lis tous et c’est toujours d’aussi bonne qualité.
Aujourd’hui c’est un sujet que j’ai lu sur medium quelques semaines auparavant, mais c’est toujours agréable de relire le même sujet d’un point de vue différent, surtout qu’aujourd’hui, posèdant un macbook pro, j’ai envie de me lancer sur swift, j’ai donc une belle liste avec pleins de tips ! 😀
Merci beaucoup !
Très bon article 😉 j’utilise plus ou moins la même méthode d’apprentissage. J’ai longtemps fait du C++ avant de passer sur Javascript puis Node.js dont je pense aujourd’hui avoir une assez bonne maîtrise (mais loin de moi de me revendiquer expert). J’attaque depuis quelques mois Python et je me suis remis au C++ récemment car comme à chaque fois j’ai cette impression de m’enfermer dans un domaine et d’être à la ramasse sur d’autres sujets et bonjour le syndrome de l’imposteur… comme tu l’as bien dit « Plus tu t’enfermes fermement et longtemps chez toi, plus c’est dur d’en sortir ». Après je pense qu’il est bon d’avoir un domaine d’expertise en restant tout de même polyvalent.
Article claire avec une solution qui fonctionne. Par contre, il y a une petite coquille dans cette phrase : » Je te promets que tu si tu pars sur un nouveau projet pour apprendre un nouveau langage, ça sera plus long… «
Au top cet article. Je fais souvent le projet de « TODO LIST » quand je part sur un nouveau langage. C’est un projet simple et facile à mettre en place 🙂
Très bon article et bon résumé de points importants à prendre en considération.
Je rajouterais un conseil que je donne aux gens qui commencent ma formation complète Python :
passer une première fois à travers tout le cours sans faire les exercices et les projets, et même pour les plus pressés, en accélérés.
Ça permet déjà de rencontrer une première fois plein de termes et de notions que tu vas voir par la suite plus en détail en prenant le temps.
Et je pense que c’est important d’avoir rapidement cette vision d’ensemble du cours et du langage que tu vas apprendre pour avoir le ‘big picture’ et ne pas être trop rapidement perdu dans les détails.
Ça rejoint un peu ce que tu dis sur l’écoute active, ça peut être le bon moment de noter les termes qui te sont étrangers ou de noter des particularités du langage ou des choses sur lesquelles tu sais que ça risque d’être plus difficile.
Super article 😉
Venant de PHP, actuellement j’essaye de me donner du temps pour apprendre Go mais je voudrais bien apprendre Kotlin + Jetpack Compose pour du développement Android mais étant donné que Jetpack Compose n’est pas sortie en version stable les ressources sont limités et encore plus pour apprendre Kotlin dans le contexte d’Android sans connaître Android x)
Merci beaucoup pour cet article très intéressant !
Personnellement, en ce qui concerne l’apprentissage autonome d’un nouveau langage, mon problème est de se fixer un langage à apprendre qui soit relativement pérenne. Comme souligné un autre article, les langages changent et évoluent à une vitesse grand V dans notre métier.
Dans le contexte professionnel, la question ne se pose pas car le choix du langage à utiliser est guidé par les besoins et le contexte du projet. Mais pour un side-projet perso, il n’est pas facile de se dire qu’on va consacrer son « temps de cerveau disponible » le soir ou le WE à apprendre un langage qui risque d’être obsolete d’ici quelques années.
Une pensée aux développeurs Flash qui étaient les étaient des stars il y a 10-15 ans… Pourquoi apprendre l’objective-C tout seul dans son coin pour que ça soit remplacé (en partie) plus tard par Swift ? Pourquoi apprendre jQuery pour que ça soit remplacé plus tard par Angular, React & co ? Qui seront peut être obsolètes dans 5 ans ? J’en passe et des meilleures.
Ca me rappelle cette BD de commit strip :
https://www.commitstrip.com/fr/2016/03/10/the-circle-of-code/
Après, il y a effectivement des fondamentaux qui sont là pour durer, comme C/C++, Python, Javascript…
Il vaut probablement mieux miser sur des langages plus solides comme ceux que tu énonces à la fin. On a malheureusement tendance ces temps-ci je trouve à donner l’impression qu’il est primordial d’apprendre le dernier framework à la mode alors qu’on peut déjà réaliser quasiment tout ce qu’on veut sans avoir besoin d’utiliser la dernière librairie à la mode.
Quand je vois des débutants en web, ils sont tous persuadés qu’il est absolument nécessaire de savoir utiliser React, Angular and cie pour pouvoir faire un site web. Ça aide c’est sûr, mais ce n’est pas un obligatoire.
On se retrouve du coup avec des gens qui ont appris le plus vite possible 10 framework qui ont pour les plus vieux 3 ans d’ancienneté et qui de l’autre côté ne maîtrisent pas du tout les bases de langages solides comme Python, Javascript etc pour faire finalement toute la partie la plus importante du site.