10 choses que les développeurs devraient apprendre sur l'apprentissage
Une compréhension scientifique du fonctionnement de la mémoire humaine, de l’apprentissage et de la résolution de problèmes.
La semaine dernière, j'ai lu un article qui résumait les résultats de recherche sur le fonctionnement de la mémoire et de l'apprentissage. J'ai trouvé cet article particulièrement instructif, non seulement pour les développeurs désireux de maîtriser leur métier, mais aussi pour ceux impliqués dans le recrutement et la formation.
En tant que développeurs, l'apprentissage continu n'est pas seulement bénéfique, c'est un attribut distinctif des grands ingénieurs. Cependant, le simple fait d'apprendre ne signifie pas que nous comprenons comment nous apprenons.
J'ai essayé de résumé les dix leçons que j’ai apprise de l’article et je les ai organisées en thèmes.
Comment fonctionne la mémoire et l'apprentissage humain
1. La nature unique de la mémoire humaine
Contrairement à la mémoire de l'ordinateur, qui fonctionne par le biais de fonctions simples de "lecture" et d'"écriture", la mémoire humaine est plus complexe. Lorsque nous essayons de nous rappeler une information, nous activons un réseau de neurones, ce qui entraîne un phénomène connu sous le nom d'"activation de propagation". Ce processus ne se limite pas à des voies spécifiques et peut faciliter des connexions et des idées inattendues. C'est souvent la raison pour laquelle le fait de s'éloigner d'un problème complexe et de s'engager dans des activités sans rapport - comme faire une promenade ou prendre une douche - peut conduire à des solutions innovantes grâce à ces connexions neuronales inattendues.
2. La mémoire humaine comprend deux systèmes : la mémoire à long terme et la mémoire de travail
La mémoire humaine se compose de deux systèmes principaux essentiels à l'apprentissage : la mémoire à long terme, où l'information est stockée en permanence, et la mémoire de travail, qui est utilisée pour le traitement et la résolution de problèmes. Avoir une mémoire de travail plus élevée peut aider les développeurs à s'intégrer plus rapidement, mais c'est le contenu de leur mémoire à long terme qui distingue les experts.
Des techniques comme le "chunking", où des informations connexes sont regroupées en unités plus grandes et gérables, améliorent notre capacité à retenir et à traiter les données dans la mémoire de travail, facilitant une expertise plus approfondie au fil du temps.
Lors de l'adoption de nouveaux outils ou compétences, il est également important d'évaluer la charge cognitive impliquée. Cette charge peut provenir soit de la complexité inhérente de la tâche (charge intrinsèque), soit de la manière dont l'information est présentée (charge extrinsèque). La charge cognitive peut être réduite soit en décomposant les problèmes complexes en parties plus simples, soit en améliorant la présentation ou la diffusion de l'information.
Comment devenir un expert
3. Les experts reconnaissent, les débutants raisonnent
Si vous avez lu Thinking Fast and Slow, vous êtes familier avec l'idée que notre cognition fonctionne à travers deux systèmes : l'un qui est rapide et guidé par la reconnaissance, et l'autre qui est plus lent et plus axé sur le raisonnement. La recherche a identifié que, parce que les développeurs experts peuvent reconnaître des modèles communs dans le code (ils ont déjà vu le problème, ou quelque chose de similaire), ils peuvent traiter et résoudre les problèmes plus rapidement avec moins d'effort. Les débutants, en revanche, peuvent devoir lire ligne par ligne pour essayer de comprendre le fonctionnement du code. Les débutants peuvent donc devenir des experts plus rapidement en lisant et en comprenant beaucoup de code.
4. Apprendre de nouveaux concepts en commençant par passer de l'abstrait → au concret → à l'abstrait
Lorsque nous apprenons quelque chose de nouveau, nous bénéficions à la fois de formes d'explication abstraites et concrètes. Plus précisément, la façon la plus efficace d'apprendre quelque chose de nouveau est de commencer par une définition abstraite d'un concept, puis de passer à des exemples concrets (y compris des exemples erronés), puis de revenir à l'idée abstraite. (Les débutants commencent et restent souvent avec des exemples concrets d'une idée.) Le passage de l'un à l'autre nous aide à mieux comprendre les idées complexes. C'est ce qu'on appelle la vague sémantique.
5. La mémorisation est toujours importante, même avec Internet et l'IA
Malgré l'accessibilité de l'information via Internet et des outils comme ChatGPT, la mémorisation reste une compétence importante. Elle facilite une reconnaissance plus rapide des modèles et prend en charge des niveaux d'abstraction et de compréhension plus élevés, réduisant efficacement la charge cognitive et augmentant la vitesse de résolution des problèmes.
Stratégies supplémentaires pour améliorer l'apprentissage
6. Utilisez l'espacement et la répétition à votre avantage
Il existe un concept en psychologie cognitive appelé l'effet d'espacement : c'est l'idée que la meilleure façon d'apprendre des concepts de résolution de problèmes est d'utiliser à la fois l'espacement et la répétition. C'est par opposition au fait d'entasser l'information en aussi peu de temps que possible. L'espacement consiste à faire des séances d'entraînement régulières, espacées sur plusieurs jours ou semaines, et la répétition consiste à revoir les sujets encore et encore.
7. La résolution de problèmes n'est pas une compétence générique. Pour s'améliorer en programmation, il faut s'entraîner à programmer
"La résolution de problèmes n'est pas une compétence générale qui peut être apprise. Au contraire, nous apprenons à résoudre des problèmes dans des domaines spécifiques, comme la programmation, les échecs ou le tricot. Chacune de ces compétences de résolution de problèmes est distincte et n'influence pas les autres. Par exemple, la recherche sur les échecs a trouvé peu ou pas d'effet de son apprentissage sur d'autres compétences académiques et cognitives, et il en va de même pour l'enseignement de la musique et l'entraînement cognitif. En d'autres termes, la meilleure façon d'apprendre à résoudre des problèmes de programmation est de s'entraîner à résoudre des problèmes de programmation, plutôt que de chercher des avantages en termes de performance en apprenant d'autres compétences ou tout autre type d'entraînement cognitif.
Il est intéressant de noter que cela s'applique également à l'embauche. Google était autrefois célèbre pour demander aux candidats de résoudre des casse-tête, mais ils ont découvert plus tard que c'était une perte de temps. Il n'y a pas de correspondance fiable entre la résolution de problèmes dans le monde des casse-tête et la résolution de problèmes dans le monde de la programmation.
Perspectives pour le recrutement et la formation
8. Les experts ne sont pas toujours les meilleurs formateurs
Les experts peuvent parfois échouer à former les débutants parce qu'ils ne parviennent pas à adapter leurs explications à quelqu'un qui a un modèle mental différent. C'est ce qu'on appelle le problème de l'angle mort de l'expert : la difficulté de voir les choses à travers les yeux d'un débutant une fois qu'on est devenu un expert. C'est pourquoi les débutants peuvent bénéficier davantage en apprenant d'un pair plus compétent (mais encore relativement novice).
De plus, le transfert de connaissances entre les langages de programmation peut conduire à des connaissances erronées. Les auteurs donnent cet exemple : "un programmeur peut apprendre l'héritage en Java, où une méthode remplace une méthode parentale tant que les signatures correspondent, et transférer cette connaissance à C++, où le remplacement d'une méthode parentale exige en outre que la méthode parentale soit déclarée virtuelle". Ce genre de différences - où les caractéristiques sont similaires dans la syntaxe mais différentes dans la sémantique entre les langages - entravent le transfert des connaissances.
9. Il est très difficile de prédire qui sera capable de programmer
La capacité d'une personne à apprendre la programmation dépend probablement d'un mélange d'aptitude et de pratique. Cependant, la recherche n'a pas réussi à identifier de liens entre l'un ou l'autre et les capacités d'une personne.
Par exemple, la recherche a montré que tous les éléments suivants ne permettent pas de prédire les capacités de programmation : le sexe, l'âge, la majeure universitaire, la race, les performances antérieures en mathématiques, l'expérience antérieure avec un autre langage de programmation et la préférence pour les sciences humaines ou les sciences. Il existe des preuves mitigées de l'importance des années d'expérience (qui se rapportent à la pratique). Et bien qu'il existe de faibles liens de causalité entre l'intelligence générale et la capacité de la mémoire de travail, et le succès d'une personne dans les débuts de la programmation, même ces deux facteurs sont plus prédictifs du rythme d'apprentissage d'une personne que de sa capacité absolue.
10. Avoir un état d'esprit de croissance est important
Lorsque les apprenants abordent de nouveaux défis avec un état d'esprit de croissance, ils persistent non seulement face aux obstacles, mais ils gèrent aussi plus efficacement les échecs. Cultiver un état d'esprit de croissance est cependant une compétence en soi, et pas seulement un ajustement d'attitude.
Étroitement lié à cela est le concept d'orientation des objectifs, qui se divise en deux types distincts : l'approche et l'évitement. Une orientation d'approche se concentre sur la réussite et favorise des comportements d'apprentissage productifs, tandis qu'une orientation d'évitement vise davantage à éviter l'échec. Il est important de créer des environnements où faire des erreurs fait partie de l'apprentissage, et non une source de pénalité. Cela aide les membres de l'équipe à adopter une approche plutôt qu'une attitude d'évitement.
Réflexions finales
Les exigences comme les années d'expérience ou la familiarité avec plusieurs langages de programmation ne permettent pas d'évaluer avec précision les capacités d'un candidat. Au lieu de cela, la seule méthode fiable pour évaluer les compétences en programmation consiste à évaluer les travaux antérieurs ou à effectuer des tests sur des tâches de programmation pratiques.
Au final, ces découvertes sur notre façon d'apprendre confirment souvent ce que beaucoup d'entre nous soupçonnaient déjà. Elles donnent du poids à ces petites astuces qu'on utilise intuitivement. Prendre du recul quand on est bloqué sur un problème ? La science nous dit que c'est une excellente idée. Réviser régulièrement plutôt que de tout ingurgiter la veille ? Là encore, la recherche approuve. Ces confirmations ne sont pas juste rassurantes, elles nous encouragent à faire confiance à nos instincts d'apprentissage. Alors la prochaine fois que vous vous surprendrez à faire une pause café au milieu d'un bug tenace, ou à revoir vos notes de la semaine dernière, rappelez-vous : ce n'est pas de la procrastination, c'est de l'apprentissage scientifiquement approuvé !
Merci de m’avoir lu!