Article original : My Developer Journey – How I Learned to Code with Dyslexia and ADHD

Par Jalmari Ikävalko

Bonjour à tous, je suis Jalmari Ikävalko, développeur logiciel dans la trentaine. Dans cet article, je vais partager mon parcours complet, depuis mon premier contact avec le code jusqu'à devenir le développeur professionnel que je suis aujourd'hui.

Je commencerai par mon enfance, lorsque j'ai commencé à m'intéresser à la programmation.

Mon initiation à la programmation

J'avais environ 12 ans – à un an près – lorsqu'un orage estival inattendu nous a coincés à l'intérieur, dans la Costa del Sol autrement ensoleillée du sud de l'Espagne. C'était la seule fois où j'étais vraiment à l'étranger enfant, car la situation financière de ma famille ne permettait généralement pas de vacances en dehors de notre pays.

Mes cousins et moi étions dans le petit appartement de mon grand-père – ses poumons opérés ne supportant pas l'hiver finlandais – et il avait un ordinateur. L'ordinateur n'avait pas d'accès à Internet, mais à l'époque, Microsoft Word incluait un éditeur et un compilateur Visual Basic.

C'est alors que mon cousin, plus âgé d'un an ou deux, m'a montré les bases de la programmation, en Visual Basic.

Image Une capture d'écran de l'éditeur Microsoft Visual Basic

Pour autant que je me souvienne, je me suis toujours intéressé aux ordinateurs et j'aimais passer mon temps dessus.

Chez ma mère, où je vivais la plupart du temps, nous n'avions pas tant de jeux vidéo, et les ordinateurs avaient tendance à être de quelques générations en retard par rapport à la crête de la vague actuelle. Pourtant, je pouvais passer beaucoup de temps à explorer ce que l'ordinateur était capable de faire. Essayer des commandes DOS, parcourir des fichiers aléatoires que je trouvais, et ainsi de suite.

Alors, lorsque j'ai réalisé que n'importe qui pouvait programmer ces machines et créer de nouvelles applications, j'ai bien sûr été immédiatement intrigué.

Comment j'ai commencé à apprendre à coder enfant

Mon parcours a commencé de manière assez chaotique. À l'époque, je n'avais aucune idée de l'endroit où un petit enfant avec de pauvres compétences en anglais pouvait trouver des ressources utiles pour apprendre à coder. J'ai harcelé mon père, qui avait fait quelques sites web et avait une compréhension générale de la programmation en tant que phénomène, et il m'a montré un peu de HTML, CSS et JavaScript.

JavaScript, à l'époque, était relativement nouveau et ne s'était pas encore imposé comme le langage de facto du web. En fait, la plupart des sites web évitaient de s'y fier.

J'ai parcouru les livres de notre petite bibliothèque locale, mais la plupart d'entre eux étaient complètement incompréhensibles pour moi (les bibliothécaires étaient géniaux, cependant. Ils me suggéraient des livres pendant que je traînais là après l'école et il y avait un ordinateur disponible avec un bon accès à Internet).

J'ai convaincu ma mère de m'acheter un livre sur le C++ et je l'ai parcouru, sans comprendre la plupart de ce que je lisais.

Les défis de la dyslexie et du TDAH

Durant ces premières années d'apprentissage de la programmation, je n'ai pas vraiment appris de manière très régulière et je n'ai pas été capable de terminer de projets – pas même les plus petits.

Je me sentais souvent très frustré lorsque j'essayais de faire fonctionner quelque chose et que je ne comprenais pas pourquoi cela ne fonctionnait pas comme je l'imaginais.

En même temps, l'école ne se passait pas très bien. J'ai été diagnostiqué avec de la dyslexie dans les premières années de l'école primaire et j'ai été en enseignement spécialisé pour l'anglais. J'ai également eu des problèmes de motivation – et de harcèlement – et j'ai fini par passer de justesse sans avoir à redoubler.

Vers l'âge de 15 ans, j'ai découvert l'IRC (un système de chat basé sur du texte) et une communauté de programmation finlandaise avec son propre site web et un canal IRC. À l'époque, nous avions enfin obtenu une connexion Internet haut débit, ce qui me permettait de passer la plupart de mes journées en ligne. Avoir des gens à qui parler et des ressources dans ma langue maternelle a accéléré mon processus d'apprentissage.

Je me suis également intéressé à la demoscene – une scène d'artistes informatiques centrée sur ce que l'on appelle les demos. Ce sont des programmes qui génèrent de la vidéo et de l'audio de manière programmatique à l'exécution, sans que la vidéo et l'audio soient préenregistrés et stockés dans le programme. Je me suis intéressé à la création d'effets visuels de manière programmatique.

Pourtant, j'avais du mal à comprendre la programmation graphique et comment les effets visuels plus avancés étaient créés. J'étais bloqué à créer des effets assez simples, comme un fractal d'arbre de base.

Image Un simple fractal d'arbre

Pendant ce temps, j'avais des pairs, pas nécessairement plus âgés que moi, qui faisaient des effets 3D complexes, des demos de pleine durée, des jeux entièrement jouables, et plus encore.

Je me sentais souvent assez stupide en comparaison, car je n'apprenais pas aussi vite qu'eux, et j'avais du mal à comprendre le code complexe.

En rétrospective, ce n'est pas trop surprenant – ma dyslexie et le TDAH, diagnostiqué plus tard, ont définitivement affecté, et continuent d'affecter, ma capacité à distinguer les symboles les uns des autres. Ils rendent également difficile la compréhension de longues lignes de texte, que le texte soit dans une langue humaine ou un langage de programmation.

Même aujourd'hui, je me sens mentalement épuisé après avoir lu du texte avec des phrases trop longues. Les dix premières pages de Crime et Châtiment de Dostoïevski m'ont donné l'impression de lire un livre complet sur la géométrie algébrique avancée.

Pourtant, j'ai continué, motivé par l'idée qu'un jour je serais capable de créer des effets visuels, des jeux, des simulations physiques, et ainsi de suite.

Mon premier emploi

J'ai fait quelques petites demos et des démonstrations de physique, rien de très spécial, et dans l'ensemble, elles étaient assez rudimentaires, mais d'une manière ou d'une autre, elles ont réussi à me faire obtenir un stage dans une petite entreprise locale travaillant sur un moteur 3D pour téléphones.

C'était en 2008 ou là, lorsque j'avais 18 ans. À l'époque, je ne possédais même pas de smartphone. Le premier iPhone était sorti un an plus tôt et j'ai toujours été un peu en retard avec la dernière technologie.

J'étais assez sûr qu'un moteur 3D pour téléphone n'avait aucun sens – qui voudrait regarder du contenu 3D sur cet écran minuscule ? Et j'avais, bien sûr, complètement raison ! Eh bien, d'accord, je n'avais pas raison, mais pire encore – et quelque peu à mon horreur – j'étais complètement dépassé.

J'avais réussi à donner une sorte d'impression de compétence lors de l'entretien, mais en vérité, je n'avais aucune idée de la façon de programmer correctement des shaders ou d'améliorer et d'optimiser un moteur de rendu.

Je n'ai pas été capable de faire le travail et mon contrat n'a pas été renouvelé – je me sentais assez embarrassé pour ne jamais avoir inclus ce court passage dans mes futures candidatures.

Implication dans l'Open Source

À peu près à cette époque, j'ai également apporté quelques petites contributions à quelques jeux et moteurs 3D open source. Ce n'était rien de très spécial, ou mathématique, ou de pointe – juste l'ajout de petites fonctionnalités comme copier-coller des valeurs constantes dans une liste à partir d'une spécification ou ajouter une fonctionnalité pour ramasser plusieurs objets en même temps au lieu d'un seul objet. Des choses comme ça.

J'apprenais encore assez lentement et je n'étais pas capable de terminer des tâches complexes par moi-même. C'était frustrant, car j'étais au courant de la programmation depuis environ six ans et je m'y étais plus activement exercé depuis deux ans. Les personnes impliquées étaient très serviables, cependant, et j'ai appris beaucoup de petites choses de tout le monde qui m'aidait.

Mon expérience universitaire

L'année de mes 19 ans, j'ai postulé à l'université. Je n'avais pas les prérequis formels pour m'inscrire dans une université finlandaise, car je n'avais pas passé les examens de fin d'études secondaires finlandais (à peu près comparables au SAT aux États-Unis et aux A-levels au Royaume-Uni).

Pourtant, je leur ai écrit une lettre demandant une permission spéciale pour participer aux examens d'informatique. J'ai obtenu la permission et j'ai obtenu un score suffisamment élevé aux examens pour m'inscrire.

Malheureusement, j'étais encore un étudiant assez médiocre. D'une part, j'étais un peu trop fier et je trouvais que les cours pour débutants étaient quelque peu trop simples pour moi. D'autre part, si un cours devenait difficile, je perdais rapidement la motivation pour étudier.

Après quelques années à n'avoir terminé que quelques cours et sans avoir appris grand-chose, j'ai été exclu.

J'avais environ 21 ans, sans école, sans emploi, et de retour à vivre chez ma mère. Je continuais à programmer comme passe-temps. Écrire des fonctionnalités mineures pour des logiciels open source, essayer quelques petits boulots (et les échouer tous). Puis j'ai remarqué que quelqu'un sur l'un de mes canaux IRC cherchait de l'aide pour sa startup. Je me suis porté volontaire et j'ai fini par être embauché.

Travailler dans une startup

Je connaissais vaguement la personne, car elle était partiellement impliquée dans les mêmes communautés que moi, bien que nous n'ayons pas directement parlé avant que je rejoigne son entreprise.

C'était une configuration un peu inhabituelle. Nous partagions un appartement, qui faisait un peu partie du salaire de manière officieuse, et mon salaire était environ la moitié de ce que l'entreprise pour laquelle je travaille maintenant paierait pour des stagiaires et des juniors à leur premier emploi.

Je ne recommanderais généralement pas ce type de contrats aux gens, mais dans mon cas, cela ne s'est pas trop mal passé. J'ai enfin pu être quelque peu utile, je pouvais vivre seul, et je gagnais au moins un peu d'argent – même si à la fin du mois, il n'en restait jamais.

Je n'étais toujours pas très bon pour terminer des tâches par moi-même et la qualité de mon code était plutôt mauvaise. Mais avec ce niveau de salaire, la startup de mon ami n'avait pas vraiment beaucoup d'options. La plupart du temps, je faisais des améliorations mineures de fonctionnalités, je corrigeais des bugs et j'ajoutais de nouvelles fonctionnalités au logiciel.

Un an ou deux plus tard, j'ai rencontré ma future épouse. Nous avons emménagé ensemble, j'ai changé de ville et j'ai laissé cette startup derrière moi.

Développeur de jeux junior

J'ai ensuite postulé à une autre startup, avec un salaire légèrement meilleur, et avec plus de 2-3 personnes travaillant pour eux. Ma tâche pour l'entretien technique était d'ajouter un effet miroir à une scène 3D avec un patineur sur glace.

Typiquement, on fait des réflexions en plaçant une caméra virtuelle là où se trouve la réflexion et en rendant ensuite la scène du point de vue de cette caméra. Je n'avais jamais fait cela, cependant, et j'ai fini par utiliser une autre astuce que j'avais faite précédemment.

J'ai simplement rendu la scène à nouveau, juste retournée sur l'axe des X. C'est une technique imparfaite mais elle était couramment utilisée dans les anciens jeux et fonctionne suffisamment bien pour les surfaces plates qui sont sous la caméra à une distance suffisante.

Le travail était un peu partout en ce qui concerne les compétences nécessaires. Le fait que j'avais contribué – même de manière insignifiante – à un grand nombre de projets divers a finalement porté ses fruits.

Au cours de la même journée, je pouvais coder des shaders pour des effets graphiques. Je pouvais corriger un backend web, configurer des installateurs ou maintenir des serveurs (avoir utilisé Linux pendant une grande partie de mon adolescence en valait la peine ! Bien que cela ne m'ait jamais rendu aussi populaire à l'école qu'on me l'avait dit).

De développeur junior à CTO

Lorsque j'ai commencé, j'étais officiellement un développeur de jeux junior. Avec le temps, nous avons obtenu de plus en plus de projets, le travail est devenu plus exigeant, et un jour, notre CTO est parti. Sans personne d'autre pour le remplacer, je suis devenu son remplaçant.

À peu près à la même époque, le bon vieux Adobe Flash était en train de mourir et son support touchait à sa fin, et nos produits se trouvaient être principalement en Flash. J'ai donc fini par diriger une réécriture majeure de nos principaux produits de Flash vers le moteur de jeu Unity.

En même temps, nous avons élargi notre répertoire de produits web, et j'ai dirigé le développement de ceux-ci également – parfois avec plus de succès, parfois moins. Je me demande encore comment j'ai réussi à suivre tout cela et à ne pas m'effondrer sous le stress, mais je suppose que lorsque vous donnez à quelqu'un des responsabilités, il peut bien se hisser à la hauteur.

Image Un produit de mesure du bruit et de caméra de foule d'une startup pour laquelle j'ai travaillé (à partir des matériaux promotionnels d'Uplause)

J'ai fini par travailler dans cette entreprise pendant six ans. Mais à un moment donné, j'ai commencé à sentir que mes chances de développement professionnel étaient épuisées. Nous avions des stagiaires et des juniors qui passaient, restant de six mois à un an, et la plupart du temps, j'étais le seul développeur expérimenté à temps plein.

Je ne me sentais plus très investi dans les projets. Ils étaient assez amusants à faire, mais je ne possédais aucune partie de l'entreprise et mon salaire n'était pas au niveau où il aurait été ailleurs.

À l'époque, je n'étais pas très au courant de la scène IT finlandaise plus large. Je connaissais surtout nos plus grandes entreprises de jeux – qui n'étaient pas et ne sont toujours pas très nombreuses – mais je ne savais pas vraiment quelles étaient les grandes entreprises de conseil ou de produits.

J'ai donc fini par postuler à un nouvel emploi en cherchant simplement des offres d'emploi sur Google et en trouvant une entreprise avec une mission et des valeurs déclarées qui semblaient correspondre à ce que je recherchais.

Je ne le savais pas à l'époque, mais cette entreprise avait en fait remporté plusieurs prix pour être l'un des meilleurs endroits où travailler. Et c'était, en un sens, assez prestigieux d'y travailler.

Je suis arrivé à l'entretien lamentablement sous-préparé, mais l'adéquation culturelle était bonne et mes compétences techniques ont été jugées suffisantes pour passer les tours d'entretien et j'ai fini par être embauché.

Des startups au conseil en logiciel

Ainsi, il y a environ trois ans, j'ai quitté le monde des startups pour devenir consultant en logiciel.

Lorsque j'ai rejoint mon entreprise actuelle, j'étais assez confiant en mes compétences et me considérais comme devenu un très bon et intelligent programmeur. Je n'avais pas complètement tort, mais il s'est avéré que je suis passé du statut de gros poisson dans un petit étang à celui, au mieux, de poisson moyen dans un étang beaucoup plus grand.

Mes vieux ennemis, la concentration et la focalisation (ou leur manque), orchestraient à nouveau une discorde assez difficile à gérer. Je doute de jamais être complètement libre de devoir régulièrement répéter la lutte pour trouver la motivation et maintenir ma discipline.

Il y avait aussi des parties de mon ensemble de compétences techniques que j'avais gravement négligées. Au cours de la première année et demie, j'ai considérablement amélioré mes compétences en codage fonctionnel et ma capacité à écrire du code facilement testable.

J'avais également besoin de moderniser beaucoup de mes connaissances. M'habituer aux nouveaux outils d'intégration continue, aux outils de test des services cloud et aux bibliothèques, a été un processus assez long. (Dans les petites startups à peine viables, nous utilisions généralement des serveurs privés virtuels car ils étaient moins chers et les services cloud n'étaient pas encore aussi matures qu'ils le sont aujourd'hui.)

Le travail pratique est l'une des meilleures façons de s'améliorer, et je me suis amélioré – et à un rythme assez décent, à mon avis.

Aujourd'hui, notre entreprise n'est pas très attachée aux titres et nous utilisons parfois des titres délibérément gonflés juste pour les rires. Mais si je dois donner un titre à un client, je suis généralement un consultant logiciel senior. C'est un titre suffisamment descriptif.

Et après un long parcours ardu pour devenir un développeur capable de lancer des projets, de diriger le développement de fonctionnalités, de participer à toutes les étapes du développement logiciel, et dont l'aide et les commentaires peuvent être fiables, je pense avoir enfin mûri suffisamment pour cocher toutes les cases de ce qui est attendu d'un développeur senior.

Je continue constamment à apprendre de nouvelles choses. Récemment, j'ai commencé à sentir que j'aimerais essayer de travailler sur l'ingénierie des données, l'analyse des données et les tâches de machine learning.

Puisque j'ai principalement sauté l'école, j'ai suivi des cours de statistiques à l'université ouverte d'Helsinki pour mieux comprendre la terminologie et les méthodologies que les analystes de données utilisent.

D'un autre côté, j'ai également commencé à étudier pour des certifications cloud clés, comme les certifications d'administrateur de données et d'ingénieur de données, pour améliorer mes qualifications dans les offres clients.

Et, ironiquement, après avoir enfin eu un peu de succès dans l'étude de cours difficiles, j'ai également commencé à sentir que peut-être un Bachelor's Degree ne serait pas impossible pour moi non plus. Bien que je ne sois pas sûr, après tout ce temps, si je le veux toujours en informatique !

"La chance est ce qui arrive lorsque la préparation rencontre l'opportunité"

Voilà donc mon parcours, depuis la première fois que j'ai vu du code jusqu'à ce que je fais aujourd'hui. Ce fut parfois une route frustrante et cahoteuse, et je sais que beaucoup de gens ont eu plus de facilité à apprendre à programmer que moi. Pourtant, je me considère assez chanceux dans l'ensemble.

Un ancien collègue avait une citation du philosophe romain Sénèque comme signature, « La chance est ce qui arrive lorsque la préparation rencontre l'opportunité ». Mais il y a bien plus à cela. Votre environnement d'enfance affecte votre préparation et les opportunités que vous obtenez sont dues au hasard statistique.

Je me considère chanceux d'avoir eu tant d'opportunités malgré le fait de les avoir manquées en raison d'un manque de préparation.

Et je me considère chanceux d'avoir eu des parents soutenants et un cousin intelligent et conscient de la programmation pour me montrer des choses.

Aujourd'hui, j'ai de la chance d'avoir des collègues assez incroyables, extrêmement compétents, et un environnement de travail où la neurodiversité est acceptée.

Pourtant, il y a un peu de vérité dans cette citation. Si la préparation est le produit du travail acharné, j'ai fourni le travail même lorsque le travail consistait principalement à me cogner la tête contre le mur.

La vérité est que si vous avez un désavantage comme la dyslexie ou le TDAH, les choses peuvent prendre beaucoup plus de temps à apprendre que pour quelqu'un d'autre. Mais cela ne signifie pas que c'est impossible à apprendre. Le résultat final peut être d'autant plus doux. Les compétences que vous finissez par acquérir seront durement gagnées, un témoignage de votre capacité à surmonter les difficultés.

Aujourd'hui, il est absolument génial de voir à quel point les ressources pour les nouveaux apprenants sont meilleures. Lorsque j'étais plus jeune, la qualité des ressources gratuites – lorsqu'elles étaient disponibles – était souvent douteuse au mieux, et de nombreux tutoriels n'enseignaient pas bien les choses, si même correctement.

Nous avons des ressources comme le MOOC.fi de l'Université d'Helsinki disponibles pour tous, gratuitement. Et nous avons bien sûr freeCodeCamp. Il existe de nombreuses communautés d'apprentissage réparties sur Reddit, Discord, et ainsi de suite.

Utilisez bien ces services et, un jour, après avoir réussi, peut-être regardez en arrière et voyez comment vous pourriez contribuer à votre tour.

Un dernier conseil que je voudrais donner aux personnes nouvelles en programmation : La programmation est à son meilleur lorsqu'elle est amusante. Si vous vous ennuyez avec vos cours actuels et que vous ne sentez pas que vous passez un bon moment, essayez quelque chose de différent.

Générez des ondes sinusoïdales et combinez-les en accords. Créez des fractales de manière programmatique. Essayez de faire le site web le plus irritant possible, avec des lumières clignotantes et des effets sonores lorsque vous cliquez sur des boutons.

Rendez la programmation amusante. Vous apprendrez également beaucoup de choses de manière surprenante en le faisant.

En plus de l'équipe éditoriale de freeCodeCamp, je voudrais créditer Liisa Toivonen pour son aide dans la relecture et certaines suggestions.

Merci d'avoir lu !