Lors de l'apprentissage d'un nouveau langage de programmation, il y a toujours une phase plutôt inconfortable à passer : d'une part, on ne se sent pas toujours prêt à entammer un projet substantiel, mais on ne souhaite pas répéter les même petits problèmes que l'on sert ad nauseam. C'est souvent à ce moment où je laisse tomber l'apprentissage, préférant m'élire un nouveau langage du jour ou de retomber dans mes vieilles pantouffles.

Visiblement, je ne suis pas seul dans cette situation, puisque plusieurs ressources en ligne se sont penché sur le problème. Malgré un tour d'horizon plutôt rapide, en voici quelques uns qui font partie de mon arsenal hebdomadaire :

Le classique : Project Euler

Impossible de le passer sous silence. Un ténor en la matière, malgré son approche quelque peu différente. Le but ici est de résoudre un problème -- souvent à teneur mathématique -- en utilisant le langage de programmation de son choix. Les mathophobes peuvent se rassurer, la plupart des problèmes faisant surtout appel a une bonne curiosité et à de bonnes aptitudes en recherche.

Le projet est intéressant et les problèmes sont amusants à résourdre. Toutefois, pour apprendre rapidement comment fonctionne un nouveau langage, l'intérêt est un peu moindre. Souvent, la phase de recherche et de réflexion prend beaucoup (beaucoup!) plus de temps que l'implémentation. Les problèmes sont souvent (et avec raison!) conçus de sorte qu'une approche en force brute est inutile. Il est mentionné qu'un programme efficacement implémenté devrait résoudre le problème en moins d'une minute.

Tout de même, il s'agit d'un incontournable de s'essayer. Au moins une fois. Ou plusieurs.

Le challenger : Exercism

Ici, le focus est nettement sur l'apprentissage d'un langage de programmation. Une vingtaine de langages sont présentement disponibles et pour chacun, une kyrielle de problèmes. J'en suis encore à mes premiers pas (voir l'usager `johnrx`, bande de curieux!) mais jusqu'à présent, j'aime beaucoup ce qui est présenté.

Pour se connecter, il suffit (au plus simple) d'utiliser son compte github (vous savez, le réseau social des neurds :-) et vous êtes up-and-running en moins de deux.

Un élément très intéressant est le concept de nitpick, ou de "gossage" comme j'aime le traduire. Une fois que la solution pour un problème est fournie, il nous est possible d'aller voir les implémentations des autres et de les critiquer, se comparer et même de laisser un petit "I think it looks great!". Les nitpicks vont autant dans l'utilisation du langage que dans l'approche du problème. Cela ajoute une dimension rarement éprouvée dans un site du genre : nous allons au delà des exercices académico-jetables où le feedback est un élément secondaire. Ici, la soumission d'un problème est la première étape. Dépendant du langage utilisé, le feedback peut prendre plusieurs jours, mais chacun de mes exercices fut commenté et/ou a reçu des questions.

Le site est encore à ses premiers balbutiments, mais déjà, j'adopte.

Le make your own adventure

Le classique reste toujours de trouver un problème que nous faisons face et de se forcer convainque que l'utilisation d'un nouveau langage peut être approprié. Cela peut être de porter une librairie connue dans un autre langage ou de créer un petit utilitaire qui nous servira ça et là.

Au delà du langage en soi, cette approche permet également de se familiariser avec l'écosystème entier qui accompagne : souvent, l'organisation du code est déjà (semi-)spécifiée et il s'agit d'un bon exercice de s'y frotter avec un projet de plus petite envergure. On se crée un /repository* github et on se lance.

Je reste toujours curieux de voir d'autres approches pour se familiariser avec un nouveau langage de programmation. Au besoin, je metterai à jour ce post ou en ferai une deuxième édition!