Menu toggle

J’ai suivi il y a quelques mois une formation à la programmation fonctionnelle avec Scala sur coursera. La formation est assurée par Martin Odersky de l’Ecole Polytechnique Fédérale de Lausanne (EPFL), créateur du langage Scala. J’ai adoré la formation et j’ai même rempilé pour une seconde série de cours sur la programmation réactive.

Le logo de la formation FP - Scala sur Coursera

Avant de me lancer dans ces cours, j’avais entendu parler de programmation fonctionnelle et je connaissais vaguement les grands principes de ce type de langages, mais je n’avais jamais réellement codé avec un langage fonctionnel. J’avais envie de découvrir de nouveaux langages sur la JVM, Scala me semblait un bon choix, malgré les critiques que j’ai pu entendre par-ci par-là (les Cast Codeurs ?).

L’histoire des langages informatiques

Les premières vidéo ont abordé l’histoire des langages informatiques et quelque grands concepts de programmation : les notions de stratégies d’évaluation (par valeur ou par référence), la récursion, les opérateurs fonctionnels, le currying

Il m’a semblé intéressant de sortir du carcan de la programmation objet Java pour aller explorer les paradigmes des autres langages de programmation. Dans mon travail de tous les jours, Java “classique” est omniprésent, à tel point que j’en oublie qu’il existe d’autres façons de modéliser un programme (programmation évènementielle, programmation logique…).

Toutes ces notions sont importantes pour élargir notre vision de l’informatique et nous permettre de choisir au quotidien la solution la plus adaptée au problème. Avec Java on a tendance à avoir un marteau et à voir tous les problèmes comme des clous.

La programmation fonctionnelle

Pendant les cours sur Coursera, les enseignants ont pris de temps d’expliquer les principes sous-jacents à la programmation fonctionnelle et ça permet de mieux s’approprier les concepts. J’ai beaucoup aimé la simplicité et l’élégance du code fonctionnel écrit en Scala. Une fois le code écrit (ce qui n’est pas simple), tout semble clair et élégant.

Lors de la conférence MixIt 2014, j’ai assisté à un atelier sur Akka (un framework basé sur des acteurs écrit en Scala). Il était possible de réaliser l’atelier en Java ou en Scala (j’ai galéré pour réussir à le faire en Scala). Les réponses étaient beaucoup plus lisibles et élégantes en Scala qu’avec Java. Faire de la programmation fonctionnelle permet de simplifier l’écriture de son code mais il faut avoir les bons outils, Java donne l’impression de ne pas être encore bien adapté pour écrire simplement du code fonctionnel élégant.

La programmation réactive

La seconde partie du cours s’attarde sur la programmation réactive qui est à la mode en ce moment. Il s’agit juste d’utiliser les possibilités offertes par la programmation fonctionnelle pour rendre son application plus rapide et plus efficace possible. La gestion évènementielle et asynchrone des opérations à réaliser est bien sûr au coeur de du fonctionnement. Scala propose de manipuler simplement des Promises et des futures ; on peut construire des Streams de données que l’on agrège en temps réel avec seulement quelques lignes de code.

Le cours s’est terminé sur un TP très intéressant où l’on a réalisé une base de donnée clé-valeur minimaliste mais répartie sur plusieurs noeuds, avec du failover, de la redondance et de la persistance. Le tout est construit autour du framework Akka qui apporte le support des acteurs dans Scala.

Conclusion

Je n’utilise pas Scala quotidiennement mais ce cours m’a été particulièrement utile pour comprendre le paradigme fonctionnel. Je réutilise mes connaissances sur les patterns fonctionnels lorsque je développe avec Javascript (les promises d’Angular $q n’ont plus de secrets). Dès que mes projets auront migré sur Java 8, je pourrais reprendre la programmation fonctionnelle avec les nouveaux Streams et les lambda.

En plus de toutes ces connaissances, j’ai reçu les deux certificats Coursera (avec distinctions) délivré par l’EPFL et Coursera. Pour approfondir encore plus ces connaissances, je prépare en ce moment une présentation théorique et pratique sur la programmation fonctionnelle.