Une interview avec Erik Schierboom, dans laquelle lui et Jeremy Walker discutent de programmation fonctionnelle, de la maintenance des parcours Exercism et de l'analyse statique à venir des solutions Exercism.
Salut Erik. Merci de figurer dans le premier Contributor Spotlight d'Exercism ! Nous voulions mettre en avant ton travail, parce que tu donnes l'impression de contribuer à absolument tous les aspects d'Exercism et que ton expérience à travers tout le projet t'a donné de précieuses idées !
Alors, pour planter le décor, comment t'es-tu impliqué dans Exercism au départ ?
En 2014, j'ai suivi un cours de programmation fonctionnelle qui utilisait Scala comme langage. Après avoir terminé ce cours, j'ai cherché des ressources pour approfondir mes compétences en Scala et j'ai découvert Exercism. Il ne m'a pas fallu longtemps pour devenir accro et commencer à suivre d'autres parcours de langages sur Exercism. Comme j'avais beaucoup profité des commentaires que les gens laissaient sur mes solutions, j'ai commencé à commenter les solutions du parcours C#. À un moment donné, on m'a proposé de devenir mainteneur du parcours C#, ce que j'ai accepté avec plaisir. Cinq ans plus tard, je suis mentor sur les parcours C# et F#, mainteneur des parcours C#, F# et Scala, et je participe aux spécifications des problèmes communs à tous les parcours.
Super. Tu as donc rejoint Exercism très tôt dans sa vie. Pour ceux qui ne le savent pas, pourrais-tu expliquer ce que signifie être mainteneur sur Exercism ?
Bien sûr. Abstraitement parlant, un mainteneur Exercism est responsable de la « santé » d'un parcours. En pratique, cela peut vouloir dire beaucoup de choses : implémenter de nouveaux exercices, mettre à jour des exercices existants ou relire les pull requests d'autres mainteneurs. Un autre aspect important est de bien ordonner les exercices d'un parcours, pour que les apprenants aient la meilleure expérience d'apprentissage possible. Note qu'être mainteneur ne signifie pas qu'il faille s'engager dans toutes les activités mentionnées plus haut ; il est tout à fait valide qu'un mainteneur se concentre sur une ou deux activités seulement.
Merci ! Donc, en plus de te concentrer sur C#, F# et Scala, tu as à peu près parcouru tous les parcours de langages sur Exercism. As-tu des préférés du point de vue d'un apprenant ?
Même si j'ai énormément appris sur chaque parcours que j'ai suivi, mon parcours préféré est sans doute celui de Haskell. Non seulement c'est un excellent langage avec plein de concepts intéressants, mais la qualité de ses mentors était absolument époustouflante. Mes autres préférés sont les parcours Kotlin et F#, Kotlin et F# étant des langages extrêmement bien conçus et pragmatiques dans lesquels j'adore programmer.
Oui, j'entends beaucoup de bien des mentors Haskell ! J'imagine que parcourir autant de parcours t'a donné une foule d'idées intéressantes sur la programmation. Y a-t-il des choses en particulier que tu as apprises de cette expérience ?
Oh oui, énormément de choses ! Travailler avec une grande variété de langages expose à de nombreuses manières différentes d'aborder les problèmes. Ces différentes approches ont toutes influencé mon style de programmation d'une manière ou d'une autre, même si ce sont probablement les langages fonctionnels qui m'ont le plus marqué. Aujourd'hui, j'utilise des concepts fonctionnels dès que je peux, même dans des langages non fonctionnels (qui intègrent petit à petit des fonctionnalités fonctionnelles).
J'ai aussi appris que même si chaque langage est différent, beaucoup se ressemblent en réalité. Par conséquent, apprendre un nouveau langage devient beaucoup plus facile une fois qu'on en connaît quelques-uns. Par exemple, connaître Haskell signifie qu'on peut probablement apprendre F# ou Scala assez rapidement. Apprendre de nouveaux langages peut donc aussi être un bon choix de carrière, car on passe ensuite d'un langage à un autre plus facilement.
Enfin, j'ai appris que se faire guider par des mentors pendant qu'on apprend un langage rend le processus bien plus agréable et efficace.
J'ai constaté la même chose. Apprendre des autres est un tel multiplicateur ! D'un point de vue pratique, comment as-tu géré toute l'installation des différents langages ? Je trouve souvent l'idée d'apprendre un nouvel IDE un peu intimidante. Es-tu resté sur un éditeur que tu connaissais pendant que tu travaillais ces langages, ou as-tu varié pour essayer d'avoir une expérience plus idiomatique ?
Pour certains langages, configurer un nouvel environnement de développement était autrefois un peu pénible, mais de nos jours la plupart des langages sont assez simples à installer. J'essaie ensuite de trouver un IDE qui m'offre la meilleure expérience pour ce langage précis. Comme je travaille alternativement sous Windows et Mac OS, l'IDE doit aussi être multiplateforme. Un exemple d'excellent IDE multiplateforme est Visual Studio Code, que j'utilise pour les parcours Haskell, JavaScript, TypeScript, Elm et Elixir. Pour les autres parcours, j'utilise un IDE JetBrains : Rider pour C# et F#, IntelliJ IDEA pour Java, Scala et Kotlin, et enfin RubyMine pour Ruby (à noter : ce sont aussi des IDE multiplateformes). Comme tu peux le voir, j'utilise plusieurs éditeurs pour obtenir la meilleure expérience pour chaque langage (même si les IDE JetBrains sont évidemment assez similaires).
Astuce de pro : si tu es contributeur principal d'un projet open source, JetBrains te permet de demander une licence open source gratuite !
C'est super utile. Merci ! Donc, tu es mainteneur pour C#, F# et Scala. Qu'est-ce qui t'attire particulièrement dans ces langages ?
C# est immédiatement devenu mon langage préféré lorsqu'il est sorti en 2002. C'est un langage bien conçu et élégant, avec d'excellents outils et une excellente documentation. Le langage évolue aussi assez rapidement, ce qui signifie qu'il y a toujours de nouvelles choses à apprendre ! Un dernier atout : il tourne sur l'excellent framework .NET (Core).
F# a aussi été un coup de foudre. Avec sa syntaxe élégante et un riche ensemble de fonctionnalités (fonctionnelles), j'ai constaté que je pouvais faire plus avec moins de code, en particulier pour la modélisation de domaine. C'est aussi un langage très pragmatique, avec des fonctionnalités orientées objet et une excellente interopérabilité avec le code .NET existant (il tourne sur le même framework .NET (Core) que C#). Un autre atout est son outillage, parmi les meilleurs disponibles pour les langages fonctionnels. En prime, il dispose de l'une de mes introductions à un langage préférées, sur le site fsharpforfunandprofit.
Scala est le langage qui m'a fait découvrir la programmation fonctionnelle, et pour cette raison il occupe une place particulière dans mon cœur. Comme F#, c'est un langage pragmatique, pour à peu près les mêmes raisons. Grâce à son intégration dans l'écosystème Java, il a vraiment contribué à populariser la programmation fonctionnelle.
C'est intéressant que tu aies découvert la programmation fonctionnelle avec Scala, que tu sois mentor sur F#, mais que tu considères le parcours Haskell comme le meilleur. Pour quelqu'un qui veut se lancer dans la programmation fonctionnelle sur Exercism, lequel de ces parcours lui recommanderais-tu d'essayer en premier ?
Excellente question ! Mon vote va à F#, car je trouve que c'est le langage le plus facile à apprendre. C'est principalement dû au fait que le langage F# est moins complexe que les deux autres. Les excellents outils et la documentation de F# sont aussi un gros atout pour débuter. Cela dit, je recommande vraiment de rejoindre aussi le parcours Haskell une fois que tu as terminé le parcours F#, car Haskell possède des fonctionnalités avancées et formidables que F# n'a pas.
Tu as eu accès à pas mal de nos projets pour l'avenir d'Exercism. Y a-t-il quelque chose qui t'enthousiasme particulièrement pour le projet ?
Parmi toutes les améliorations prévues, c'est l'analyse statique des solutions qui m'enthousiasme le plus. L'idée est de mettre en place un système capable de commenter automatiquement les solutions soumises, en analysant ces solutions par programmation pour repérer les problèmes et suggestions courants. Cela devrait beaucoup aider les mentors, car ils n'auraient plus à commenter ces problèmes et suggestions courants et pourraient se concentrer sur des problèmes plus intéressants.
Si ça t'intéresse, jette un œil à mon prototype (précoce) d'analyseur pour le parcours C#, qui utilise la .NET Compiler Platform pour analyser statiquement du code C#.
Oui, l'analyse statique est aussi à peu près ce qui m'enthousiasme le plus. C'est génial de voir que tu as déjà un prototype prêt. Je pense que les gains de rapidité que l'analyse statique va nous apporter vont considérablement améliorer Exercism, et je suis vraiment impatient de voir comment on peut l'étendre pour apprendre à coder aux grands débutants. Je pense que ça change vraiment la donne.
Dernière question : as-tu des projets personnels ou des causes qui te tiennent à cœur et auxquels tu aimerais faire un clin d'œil ?
Pour moi, m'impliquer dans Exercism, contribuer à son code open source et mentorer des gens a été une expérience incroyablement gratifiante. J'ai appris énormément de choses, rencontré des gens vraiment formidables et j'ai le sentiment d'avoir pu aider beaucoup de personnes.
J'aimerais encourager les gens à voir s'ils peuvent eux aussi s'impliquer. Si tu as un langage qui te passionne et que tu veux aider les gens à l'apprendre, inscris-toi comme mentor sur Exercism. Si tu préfères écrire du code, choisis un projet open source et contribue. Je te promets que c'est bien moins effrayant que ça en a l'air et que tu te sentiras très bien en le faisant !
Génial ! Merci d'avoir pris le temps de discuter et pour tout ton travail sur Exercism !