F# Deep Dives, de Tomas Petricek et Phillip Trelford, est un nouveau livre cherchant à illustrer la valeur business apportée par F#, en pratique. Celui-ci présente 11 scénarios industriels réels et montre comment F# a permis à des experts du domaine de traiter leurs problématiques avec une approche fonctionnelle.
Le livre couvre chaque cas dans un chapitre propre, écrit par un auteur différent. Chacun des chapitres commence par une rapide description des objectifs et des difficultés en présence, avant de décrire en détail comment F# a permis d’atteindre ces objectifs et d’expliquer l’approche choisie pour résoudre le problème. Les cas d’étude s’étendent sur divers domaines, du développement de jeux aux systèmes financiers, des interfaces utilisateur riches à l’analyse de réseaux sociaux, du parsing de texte à la programmation multi-agents. Dans plusieurs cas, les solutions décrites impliquent l’intégration de multiples technologies en plus de F#, comme C#, R et JavaScript, l’utilisation de divers formats de données, comme CSV, JSON et XAML et de diverses pratiques de développement telles que les tests unitaires, l’analyse de performances ou les tests d’acceptance.
F# Deep Dives ne cible pas le lectorat débutant, il présuppose une connaissance basique de F#, bien que toutes les bases soient rappelées en appendice. Chaque chapitre est complètement autosuffisant et peut être lu de façon indépendante. Cependant, les chapitres sont ordonnés selon la complexité des scénarios traités et l’envergure des technologies nécessaires. Un projet contenant tout le code et les données accompagne chaque chapitre. L’ensemble est hébergé sur GitHub. InfoQ a contacté Tomas Petricek pour lui poser quelques questions sur le livre et sur F#.
InfoQ : Bonjour Tomas, pourrais-tu décrire la genèse de ce livre ? Pourquoi était-ce important de l’écrire ?
Le livre est né pour répondre à une question que nous entendons souvent : "Comment utiliser réellement F# sur un projet d’envergure en production ?". Phil et moi connaissons un grand nombre de personnes qui ont vraiment utilisé F# avec succès en production, donc nous avons décidé de partager leurs expériences avec la communauté. C’est aussi ce qui en fait un livre différent, par rapport aux autres livres sur F#. Celui-ci s’appuie sur des cas d’utilisation réels de F# dans l’industrie et illustre toute une variété d’approches pour l’adoption de F#.
InfoQ : Le livre effectue son immersion progressivement, en commençant par les cas les plus simples. Quels critères vous ont fait décider quels sujets inclure ?
Nous avons en fait procédé dans l’autre sens : nous avons commencé par collecter des idées auprès des utilisateurs de F# que nous connaissons et les avons ensuite regroupé en chapitres de façon logique, avant de les trier (à peu près) par complexité. Le livre ne suit donc pas vraiment un plan préconçu mais reflète plutôt les domaines où F# est utilisé.
InfoQ : De tous les scénarios présentés dans le livre, lequel se rapprocherait d’une sorte de "killer scenario" pour un langage comme F# ? Pour quel genre d’applications les fonctionnalités du langage apportent un avantage par rapport aux autres langages, qu’ils soient fonctionnels ou impératifs ?
Nous avons essayé de couvrir un ensemble de sujets aussi large que possible, il n’y a donc pas de thème majeur pour le livre, mais un domaine que je considère intéressant est la "data science". F# a les Type Providers (chapitre 6), une fonctionnalité unique qui permet un accès très facile à la donnée et qui vous permet d’écrire des algorithmes complexes (chapitre 4) et de visualiser et d’explorer les résultats (chapitre 5). En plus, il y a de plus en plus de librairies open-source pour la data science avec F#.
InfoQ : Vous avez utilisé F# depuis les premières versions chez Microsoft Research. Pourrais-tu nous raconter ton expérience avec F# durant cette période là et en quoi celui-ci t’apportait de la valeur ?
Oui, j’ai écrit mon premier billet au sujet de F# en 2006 (mais ne le lisez pas, le code présenté ne fonctionne plus !). Durant mon premier stage en 2007, j’ai travaillé sur un projet pour traduire F# en JavaScript, qui a inspiré plus tard des outils comme WebSharper et FunScript. C’était très plaisant, j’ai travaillé sur le projet pendant la semaine et j’ai écrit à plusieurs moments des contournements assez fous pour faire fonctionner les choses. J’ai ensuite montré ce que j’avais fait à Don Syme. Après le weekend, Don fournissait une nouvelle version du compilateur et des librairies et plus rien ne fonctionnait ! Mais le design était amélioré et je pouvais me débarrasser de mes contournements. L’expérience a certainement permis à WebSharper et FunScript d’être meilleurs.
InfoQ : F# appartient à un groupe de langages qui ont permis une sorte de "renaissance fonctionnelle" pour tout un tas d’applications. Comment F# a-t-il contribué à ce renouveau d’intérêt pour les langages fonctionnels ?
Pour moi, la chose principale, c’est que F# n’est pas strictement fonctionnel. Nous aimons parler de "functional-first", ce qui veut dire que le style fonctionnel est le style de prédilection mais que le langage fonctionne très bien avec les autres paradigmes aussi. Je pense que ceci est très important car cela permet d’utiliser F# sans difficulté au sein de projets de taille importante.
InfoQ : F# est fortement couplé à la plateforme .NET. Comment perçois-tu le mouvement récent de Microsoft vers le passage en open-source de la plateforme ? Qu’est-ce que cela peut signifier pour le futur de F# ?
La communauté F# est très tournée vers l’open-source et F# fonctionne réellement très bien sur Linux et Mac avec Mono et sur iOS et Android en utilisant les outils Xamarin. Donc, c’est très bien de voir Microsoft être contributeur dans ce domaine également !
InfoQ : F# est en constante évolution. Le livre utilise F# 3 et F# 4 est déjà en cours de préparation. Comment résumerais-tu l’évolution de F# ? Comment le langage est-il devenu plus mature au fil des années ?
Je pense que vous pouvez observer la maturité du langage en regardant les modifications du langage et l’évolution des librairies. Les Type Providers en F# 3 n’ont pas requis de changement important de syntaxe, mais ceux-ci apportent un pouvoir énorme et je les vois comme une bonne direction pour le futur. Je pense qu’il y a encore beaucoup de grandes choses à faire en matière de librairies ou d’extensions dans le genre des Type Providers.
InfoQ : Quelle est l’interaction entre C# et F# ? Est-il correct de dire que C# est le produit phare de Microsoft, alors que F# est plus un terrain d’expérimentations pour des idées qui feront ensuite éventuellement leur chemin vers C# ?
Je ne pense pas que "terrain d’expérimentations" soit le bon terme. L’équipe C# observe évidemment F#, mais F# reste réellement un langage différent, avec un bagage différent et un style de programmation différent. Cela veut dire que des fonctionnalités telles que les Type Providers sont parfaitement adaptées à F# mais sont beaucoup plus délicates à introduire dans le contexte du C#. Même async, qui est d’abord apparu dans F# avant d’être ajouté à C#, illustre cela. Sur un certain nombre d’aspects, les choses ne sont pas aussi bien adaptées en C#.
InfoQ : Tu es aussi consultant, avec FSharpWorks. Dans quels domaines l’industrie adopte t-elle le plus la programmation fonctionnelle, et F# en particulier ?
J’ai travaillé pas mal avec BlueMountain Capital, qui est un hedge found basé à New York et qui est un contributeur actif à l’écosystème open-source de F#. La finance est manifestement l’un de ces domaines. Mais si vous jetez un œil à F# Testimonials, vous trouverez beaucoup de diversité. L’exemple le plus fascinant est sans doute l’utilisation par Goswin Rothenthal de F# pour la conception du toit du bâtiment du Louvre d’Abu Dhabi.
InfoQ : Le dernier index TIOBE (février 2015) présente F# comme le langage fonctionnel le plus utilisé, avec une popularité à peine inférieure à la moitié de celle de Python. Quels pourraient être les facteurs clés qui permettraient une adoption encore plus importante dans le futur ?
L’index TIOBE est amusant mais on ne peut pas le considérer comme une métrique objective. Ceci dit, je pense qu’il reflète une tendance dans la popularité de F#. Au cours de l’année dernière, quasiment un nouveau user group par semaine est apparu quelque part dans le monde. La prochaine chose de taille qui aidera certainement est la récente F# Software Foundation, qui est une organisation à but non lucratif ayant pour but de promouvoir et de faire avancer F# et sa communauté.
Aux côtés des deux coéditeurs, le livre est écrit par des experts F# connus comme Chris Ballard, Keith Battocchi, Colin Bull, Chao-Jen Chen, Yan Cui, Johann Deneux, Kit Eason, Evelina Gabasova, Dmitry Morozov, Don Syme.
Au sujet de l’Auteur
Tomas Petricek a découvert la programmation fonctionnelle alors qu’il était étudiant à l’université Charles University de Pragues. Il est Microsoft MVP C# depuis 2004 et l’un des membres les plus actifs de la communauté F#. En plus de ces travaux avec F#, il utilise C# 3.0, avec une approche fonctionnelle depuis les premières versions en 2005. Il est diplômé de l’Université de Cambridge et a travaillé sur plusieurs projets avec l’équipe F# chez Microsoft Research.