- La formation formelle est utile pour transmettre efficacement des compétences, mais elle a ses limites quand il s’agit de développer l’intuition nécessaire pour résoudre des problèmes imprévus
- Les essais-erreurs itératifs et intentionnels (algorithme) sont le facteur qui fait le plus progresser la maîtrise, grâce aux échecs sur le terrain et aux corrections qui s’ensuivent
- Dans des exemples concrets, diverses figures comme Linus Torvalds et Margaret Hamilton ont développé des capacités exceptionnelles en affrontant l’échec puis en le surmontant
- Le mentorat est un catalyseur important, mais l’expérimentation autonome et l’expérience directe restent au cœur de la progression réelle
- L’expérimentation orientée objectif, qui consiste à se heurter aux problèmes et à les résoudre soi-même, est le véritable socle de l’amélioration des compétences
La force qui façonne les meilleurs ingénieurs logiciel : les essais-erreurs intentionnels
Le mythe de la salle de classe
- La formation formelle est efficace pour transmettre des connaissances précieuses, mais il s’agit d’un processus optimisé pour l’échelle
- Elle condense des expériences professionnelles complexes en procédures bien raffinées, transmises dans un format pouvant être achevé en un semestre
- Ce processus permet d’acquérir les compétences de base nécessaires au travail réel, mais il atteint ses limites lorsqu’il faut développer la capacité à résoudre intuitivement un problème dans une crise imprévue
- En particulier, quand un incident survient sur un vrai service à 3 heures du matin, les seules recettes apprises en classe ne suffisent pas
La vraie progression : apprendre en se confrontant directement aux problèmes
Cas exemplaires
- Linus Torvalds a créé Linux en réécrivant MINIX
- Margaret Hamilton a façonné les concepts modernes de fiabilité en corrigeant directement, en temps réel, des problèmes de code sur le projet Apollo
- D’innombrables mainteneurs open source ont eux aussi progressé en cassant leur propre laptop puis en le réparant
- Ils n’ont pas d’abord suivi des cours séquentiels ; ils ont acquis une expertise profonde grâce à l’échec et à ses conséquences réelles
Pourquoi les essais-erreurs dépassent les recettes
- La boucle de feedback est immédiate. Analyser un crash dans les logs permet d’apprendre bien plus vite qu’un quiz
- Les cas limites apparaissent naturellement dans des environnements réels, avec des usages qu’aucun manuel n’aurait imaginés
- Un problème résolu dans la douleur reste profondément en mémoire. Il s’inscrit comme une mémoire musculaire
- Quand aucun guide existant n’est disponible, la créativité se déploie de manière explosive
Repenser le mentorat : un complément, pas un substitut
- Un bon mentor donne un feedback rapide et élargit la perspective, mais au final, c’est toujours la personne elle-même qui mène les expériences et accumule l’expérience
- La revue de code a de la valeur parce qu’elle partage les résultats de l’expérimentation, mais elle ne remplace pas l’expérience directe
Développer une habitude d’expérimentation autonome
- Se lancer dans des side projects qui mettent soi-même légèrement mal à l’aise
- Tout instrumenter afin de disposer de données exploitables pour l’analyse en cas d’échec
- S’imposer des contraintes comme l’interdiction d’un framework ou une livraison en 48 heures pour stimuler la résolution créative de problèmes
- Publier son code afin d’obtenir une validation externe
- Faire chaque semaine une rétrospective pour consigner les causes des échecs et les leçons apprises
En résumé
- Le mentorat, les cours, les blogs, etc. jouent un rôle de catalyseur, mais les vraies compétences se construisent dans la confrontation intense au terrain
- Les meilleurs ingénieurs progressent concrètement en résolution de problèmes et en développement personnel grâce à des essais-erreurs libres et intentionnels répétés
- L’expérience acquise dans ce processus devient le plus grand atout pour son futur soi
1 commentaires
Commentaires sur Hacker News
Moi-même, en tant que développeur autodidacte, j’ai passé l’essentiel de ma carrière dans de grandes entreprises aux côtés de collègues diplômés en informatique
D’après mon expérience, les développeurs autodidactes, s’ils sont suffisamment intelligents, finissent par résoudre le problème qu’on leur confie
Les diplômés en informatique, eux, dans un domaine totalement inconnu, sont souvent nombreux à ne même pas essayer au départ (bien sûr, cela varie selon les tempéraments, mais j’estime que cela concerne environ 85 % d’entre eux)
Face à une forte incertitude, ils n’avancent pas
Au final, les diplômés en informatique s’intègrent mieux dans l’environnement des grandes entreprises, où ils travaillent selon des schémas établis comme des rouages remplaçables
Les développeurs autodidactes, eux, innovent en permanence, travaillent à réduire les répétitions inefficaces, et cette attitude originale rend leur entourage nerveux
Pourtant, ce sont souvent ces autodidactes qui produisent de bien meilleurs résultats
J’ai l’impression que la plupart des développeurs accordent plus d’importance à la sécurité de leur emploi et à la réduction de l’anxiété qu’à l’excellence du code en elle-même
Beaucoup d’ingénieurs issus d’une formation classique s’attaquent eux aussi activement à des problèmes nouveaux
À mon avis, ce n’est pas vraiment une question d’autodidaxie ou de formation formelle, mais plutôt de tempérament : curiosité, assiduité, créativité, intelligence, etc.
Les autodidactes doivent forcément avoir ces qualités pour réussir, donc elles sont peut-être simplement plus visibles dans ce groupe
Et lorsqu’un ingénieur formé de manière classique possède aussi ces qualités, il a souvent tendance à surpasser tout le monde, quel que soit le groupe
Je pense que la plus grande différence vient probablement de la personnalité
Moi, en tant que développeur autodidacte, j’ai mis en avant ma conscience professionnelle
Je n’avais pas forcément une grande vision d’ensemble sur le plan technique, mais en échange j’essayais d’être celui qui livrait le plus dans l’équipe
Il m’est arrivé de construire trois prototypes en quelques jours pour les tester en conditions réelles
Mes collègues diplômés en informatique faisaient la conception une seule fois au tableau blanc, puis n’écrivaient le vrai code qu’une seule fois
Les deux approches n’ont jamais été testées sur exactement la même tâche, donc il est difficile de dire laquelle donne les meilleurs résultats
Dans ma tête, mon approche me semble plus « validée par le terrain »
Il est vrai que l’approche informatique était perçue comme l’idéale
Mais je pense avoir énormément appris grâce au mentorat d’ingénieurs diplômés en informatique
Après une dizaine d’années dans l’industrie, quel que soit le point de départ, tout finit par se ressembler, et l’intuition de la « bonne réponse » devient comparable
J’ai peut-être un peu embelli ou généralisé les choses, donc j’aimerais bien que d’autres complètent en réponse
Je reconnais cela
La plupart des cursus en informatique sont assez éloignés de la pratique quotidienne, donc un diplôme n’est pas un indicateur immédiat de compétence
En revanche, je ne peux absolument pas être d’accord avec l’idée que 85 % des diplômés en informatique seraient incapables de résoudre un problème inconnu
S’il y a une vertu au diplôme de CS, c’est bien que le parcours d’ingénierie comprend des matières extrêmement exigeantes sur le plan intellectuel
Il est difficile d’imaginer qu’une personne capable de valider toutes ces matières soit soudain incapable en développement concret
Quand on va vers des domaines de développement vraiment difficiles, on constate même qu’une part importante des gens ont des diplômes avancés en informatique
J’ai l’impression que ce trait vient surtout d’un intérêt profond pour le logiciel, et qu’on en trouve beaucoup aussi chez les diplômés en informatique
D’après mon expérience, les autodidactes se filtrent naturellement
Autrement dit, un autodidacte incapable de résoudre des problèmes inconnus n’est même pas embauché
Les personnes issues d’une formation classique sont en général moyennes ou meilleures, mais rarement écrasantes
Une personne qui a tout compris par elle-même et qui a en plus validé une formation universitaire montre une puissance redoutable dans le travail concret
À mon avis, l’essentiel n’est pas la manière d’apprendre, mais la « passion »
Si la motivation est faible, quelle que soit la méthode d’apprentissage, les limites deviennent vite évidentes
Ce sujet a aussi des aspects difficiles à discuter de manière chiffrée
La formation formelle permet de solidifier des concepts fondamentaux comme les mathématiques, le hardware, les OS, les compilateurs, etc.
L’autodidaxie est orientée objectifs, ce qui peut conduire à négliger les bases
Quand on ne sait même pas ce qu’on ignore, avoir un bon mentor (un professeur, un excellent livre) fait gagner énormément de temps
Beaucoup d’ingénieurs, moi compris, passent à la fois par un apprentissage formel et informel
Quand on a de la passion, on continue naturellement à construire des choses soi-même et à expérimenter au-delà de l’apprentissage formel
Ce qui distingue vraiment un excellent ingénieur, ce n’est pas le mode de formation, mais une passion évidente
Des exemples comme Linus ou Margaret étaient eux aussi, au fond, des personnes animées par une immense soif d’apprendre
En tant que programmeur autodidacte, je suis tout à fait d’accord
J’ai appris seul depuis l’époque des ordinateurs 8 bits dans les années 80, et je ne suis jamais allé à l’université
Quand j’ai obtenu mon premier poste officiel de programmation à 19 ans, cela faisait déjà 9 ans que je programmais
Au moment où la plupart des gens obtenaient leur diplôme universitaire, moi, cela faisait déjà près de 15 ans que je codais
Une telle passion et une telle force de propulsion sont difficiles à ignorer
Aujourd’hui encore, presque 40 ans plus tard, je prends toujours autant de plaisir à faire du logiciel
J’aime tout simplement construire des choses, je continue à lire des articles de recherche, à suivre l’évolution du secteur, et j’écris encore énormément de code
En revanche, je trouve un peu regrettable cette idée selon laquelle les autodidactes manqueraient forcément de bases
En réalité, beaucoup d’autodidactes explorent aussi très sérieusement les aspects académiques — cela dépend sans doute du domaine
Il est possible qu’ils aient moins de temps pour étudier en profondeur, mais après plusieurs décennies d’expérience, leurs fondamentaux peuvent être plus solides que ceux de certaines personnes qui ne sont passées que par l’école
J’ai aussi beaucoup recruté et licencié, et j’ai souvent vu des autodidactes produire de meilleurs résultats
Au bout du compte, ils ont tout simplement beaucoup plus « pratiqué » — la passion pousse le volume d’apprentissage
Je suis vraiment d’accord avec l’idée que « quand on ne sait pas ce qu’on ne sait pas, être guidé efficacement par quelqu’un aide énormément »
Je suis un cas intermédiaire entre formation formelle et informelle
Je n’ai pas suivi de cours avancés de mathématiques discrètes ni d’algèbre linéaire, et j’ai donc beaucoup de lacunes de fond
Je ne sais même pas quels mots-clés chercher
Dans certains domaines, on a vraiment besoin d’être guidé par quelqu’un
Trouver, à la fin de la trentaine, un tuteur capable de valider un programme de mathématiques vectorielles, c’est vraiment difficile
La passion pousse l’autodidaxie, alors qu’en classe quelqu’un vous maintient en permanence sur les rails, donc elle y est peut-être un peu moins indispensable
Et puis, il y a l’autodidaxie « orientée but », mais aussi des autodidactes dont l’objectif est de comprendre les principes mêmes du système
Même si quelqu’un vous force à aller au bord de l’eau, cela ne signifie pas que vous n’y seriez jamais allé par vous-même
La différence constante, à mon avis, c’est que les autodidactes sont tous des gens qui, au moins une fois, sont allés seuls jusqu’au bord de l’eau
Je suis un profil hybride, formation formelle + autodidaxie
J’ai suivi beaucoup de cours à l’université, mais je n’ai pas réussi les examens au point d’obtenir le diplôme
Si j’ai pu apprendre le reste en autodidacte, c’est justement parce que ces cours m’avaient donné les bases
Je trouve les cours universitaires vraiment excellents
Quand on ne sait rien, on n’irait jamais de soi-même explorer l’API sockets de C, un projet bash, les systèmes distribués, les structures de données ou les algorithmes
En pratique, j’ai beaucoup interviewé d’autodidactes ou de diplômés de bootcamp, et ils ont tendance à ne creuser que les domaines qui leur sont familiers, ou à s’effondrer dès qu’on pose des questions académiques
À l’inverse, ceux qui n’ont pas vraiment codé à l’université ont souvent un niveau très faible, et même en étant encore étudiants, ils oublient tout ce qu’ils ont appris auparavant
Je pense que la meilleure combinaison consiste à avoir déjà un peu codé avant d’entrer à l’université
Il faut avoir connu les difficultés du terrain par soi-même pour vraiment s’approprier les solutions théoriques et élégantes présentées en cours
Plus on s’est fait piéger par des erreurs de gestion mémoire comme RAII, plus on ressent profondément l’intérêt de tels concepts
Il faut distinguer les diplômés de bootcamp des autodidactes
On peut trouver des gens compétents dans les bootcamps, mais parmi ceux que je connais, beaucoup n’arrivaient pas à apprendre seuls et envisageaient l’université ou une autre voie ; ils ont choisi le bootcamp parce que c’était l’alternative la moins chère
À l’époque, il n’y avait pas de bootcamps, et je restais aussi à distance des cours en ligne ou des méthodes d’apprentissage traditionnelles
Je voulais construire quelque chose de génial, et il m’était bien plus excitant de résoudre les problèmes de manière indépendante que de recommencer en suivant un manuel
Si j’ai appris le C seul quand j’étais jeune, c’est parce qu’il y avait des choses impossibles à faire avec les ressources ou le code déjà existants, et que je voulais absolument obtenir un résultat formidable, donc je n’avais pas d’autre choix que de fouiller les forums, lire la documentation et avancer par essais et erreurs
À mon avis, le plus important n’est pas la méthode d’étude, mais le désir puissant d’apprendre
Avant même d’aller à l’université, j’étais déjà très à l’aise en C et avec l’API sockets, et j’avais déjà livré du logiciel
Un ami à moi gagnait déjà de l’argent au lycée en vendant des jeux pour C64
Tous les deux, nous étions largement au-dessus du niveau d’un débutant en codage concret
Ce qui me manquait, c’était surtout le calcul, l’algèbre linéaire, les mathématiques discrètes et la théorie ; j’avais aussi parfois des lacunes en structures de données et en algorithmes
Le cursus en informatique a bien comblé ces trous, mais il n’a pas amélioré mes compétences de codage à proprement parler
Les matières liées à la programmation n’étaient pas du tout difficiles ; ce qui me posait problème, c’étaient au contraire les maths et les cours théoriques
Le programme informatique a fait de moi un ingénieur plus équilibré, mais pas un meilleur développeur
À l’époque où j’étais à l’université, l’ambiance du département d’informatique était exactement l’inverse des avantages qu’on attribue aujourd’hui à l’université
C’est d’ailleurs pour ces raisons que je n’ai pas choisi l’informatique à l’université (je suis aujourd’hui développeur senior dans une entreprise technologique américaine), et à l’époque, même dans cette université prestigieuse où seuls les meilleurs dossiers entraient, le taux d’échec, le chômage des diplômés et l’ambiance professorale étaient tous catastrophiques
Bien sûr, certains ont beaucoup tiré de l’université, mais ce n’est pas la réalité partout
Beaucoup de diplômés en informatique que j’ai rencontrés en entreprise avaient de grandes difficultés en communication, en compréhension du business et en priorisation du travail
Il arrive souvent qu’ils sachent seulement coder (et encore, pas toujours très bien), et il est en réalité rare qu’un cursus universitaire en informatique prépare à lui seul pleinement au travail concret
À mes yeux, c’est même la manière dont on enseigne à l’université qui représente le mieux le fait de rester dans sa zone de confort
Il faut aussi reconnaître que l’accès aux cours universitaires et leur coût relèvent de questions de classe sociale et de situation économique
Et certains autodidactes ont très bien pu pratiquer l’API sockets, des projets bash, etc.
Au passage, les autodidactes et les profils issus de bootcamp sont des types complètement différents
Je peux m’effondrer dans des situations imposées comme les entretiens de type audition, mais quand je suis seul, je résous très bien de vrais problèmes
Ça va peut-être sonner un peu boomer, mais j’appartiens moi aussi à une génération où l’université était vraiment excellente
Nous construisions des compilateurs, des OS jouets, des interfaces GPS, etc.
J’ai été invité il y a quelques années à enseigner dans un autre établissement, et j’ai été très déçu
Le cursus donnait l’impression d’avoir étiré les bootcamps actuels sur plusieurs années en y ajoutant quelques matières sans grand rapport
Il y avait très peu de fondamentaux, et à part un cours d’algorithmes, c’était surtout React et les frameworks populaires dans les startups locales
(Édit : en regardant le cursus, on y trouvait effectivement des cours de business, management, humanités, chimie, environnement, entrepreneuriat et e-sport)
On dirait qu’ils investissent beaucoup d’efforts à accepter eux-mêmes l’absence de formation dans leur parcours
Il existe d’excellents autodidactes et des diplômés peu brillants, mais d’après ma propre expérience, avoir eu un diplôme en informatique m’aurait davantage aidé dans mon cheminement
L’informatique, dans son essence, ne se résume pas au code, et comme en ME (génie mécanique), les attentes et les rôles diffèrent selon les métiers
Les ingénieurs mécaniciens aussi sont souvent moins bons que les mécaniciens pour régler de petits problèmes comme une fuite d’huile ou un pneu crevé
Pourtant, on ne dénigre pas pour autant un diplôme d’ingénieur
Moi aussi, au départ, sur le terrain en production, je me salissais les mains pour résoudre des problèmes que les techniciens ne savaient pas corriger, mais cela relevait surtout de mes goûts personnels et de ma curiosité
Si les autodidactes obtiennent d’excellents résultats, c’est précisément parce qu’ils ont la motivation, la passion et l’autonomie nécessaires pour devenir autodidactes
Au bout du compte, si on a la curiosité, la concentration et la discipline, on finit au-dessus de la moyenne, que l’apprentissage soit formel ou non
Il y a aussi un biais du survivant — on ne voit en pratique que les autodidactes qui ont réussi à survivre sur le terrain
À l’inverse, ceux qui ont échoué en autodidacte s’en seraient peut-être mieux sortis avec un véritable enseignement
J’ai apprécié aussi bien mes études en informatique et en mathématiques, mais en termes de cadre personnel, j’ai plutôt l’impression que l’auto-apprentissage me convient mieux
Le mot « souvent » n’est qu’une manière d’habiller le flou
Je suis à la fois développeur logiciel et enseignant en informatique à l’université
Le point commun des ingénieurs qui réussissent vraiment, c’est toujours l’« intérêt » et la « passion »
Les autodidactes sont naturellement très intéressés par leur domaine, donc leur motivation est en quelque sorte déjà validée
Les diplômés forment un ensemble plus hétérogène — certains ne visent que le diplôme, connaissent seulement le vocabulaire théorique, et il devient alors difficile de distinguer le vrai niveau
Un autodidacte est, par définition, quelqu’un qui a une motivation et un intérêt suffisamment forts pour sortir du cadre existant et étudier seul
On peut voir le savoir comme un cercle sur un tableau
https://matt.might.net/articles/phd-school-in-pictures/
Le cercle que l’on apprend à l’université est étonnamment étroit, et correspond en grande partie au même cursus pour tout le monde
Par exemple, il n’y a pas le temps d’enseigner des choses comme l’algorithme dmc (utilisé dans l’un des meilleurs algorithmes de compression)
À la place, tout le monde répète simplement un cursus généraliste
Pourtant, certaines personnes sont allées au-delà de ce cercle
Ce sont elles les meilleurs programmeurs de l’industrie — elles connaissent même des algorithmes rares qu’on ne voit normalement que dans les articles de recherche, et cela leur donne un niveau à part
C’est pareil pour les autodidactes : comme ils peuvent avoir des lacunes sur le socle commun que tout le monde apprend, ils partent souvent de leur propre motivation et de leur humilité
Mais le cercle de connaissances qu’ils possèdent s’est construit organiquement sous l’effet de leur passion
Et je pense que cette passion est le meilleur signal prédictif de performance chez un ingénieur
Autrement dit : « une personne qui a déjà montré qu’elle savait juger par elle-même ce qu’il fallait apprendre, puis l’apprendre réellement, excellera dans les travaux qui exigent précisément cette capacité »
Torvalds n’avait presque pas reçu d’enseignement spécifique en informatique lorsque la première version de Linux a été publiée en 1991
Je suis d’accord moi aussi
Dans notre cursus de licence, nous avions également un projet où nous devions écrire nous-mêmes un OS multiprocessus en assembleur 68K
Grâce à ce type d’expérience, il nous a été beaucoup plus facile d’aborder la structure et le fonctionnement du noyau Linux
Si nous n’avions même pas su ce qu’était un noyau, nous n’aurions jamais pu commencer
Récemment, j’essaie d’apprendre seul un problème de calcul numérique dans lequel je n’avais aucune expérience (écrire un solveur LU creux)
Les ressources les plus utiles n’ont pas été l’implémentation directe ni le démontage du code d’un solveur existant, mais des notes de cours couvrant le sujet
En parcourant l’ensemble du cours, j’ai aussi découvert des concepts liés que j’ignorais
Dans d’autres domaines aussi, les supports de cours universitaires ont souvent été les ressources de meilleure qualité
Si l’on affirme que les cours universitaires sont inutiles, il devient difficile d’expliquer pourquoi les meilleures ressources sont justement issues de l’université
On dit aussi parfois que construire soi-même est ce qu’il y a de mieux pour progresser, mais les projets universitaires eux-mêmes intègrent presque toujours fortement la « construction réelle » dans l’évaluation
Je suis entièrement d’accord
Les livres techniques approfondis sont excellents eux aussi, mais la valeur qu’on en tire change complètement selon la manière dont on les aborde
Si l’on n’apprend que de la théorie sans aucune mise en pratique, on perd vite l’intérêt et on oublie tout presque aussitôt
En revanche, si l’on étudie une théorie liée à un besoin concret ou à un travail réel, elle se transforme instantanément en savoir pratique indispensable
Si quelqu’un a déjà accumulé suffisamment d’expérience en autodidacte au début, puis entre à l’université en gardant sa passion, il peut accomplir des choses extraordinaires en très peu de temps
En conclusion, bien sûr que la théorie est importante
Mais si l’on commence par construire quelque chose avant d’étudier la théorie, on perçoit beaucoup plus clairement ce qu’est un véritable insight