Architectures fonctionnelles

La formation FunAr présente l’architecture fonctionnelle (Functional Architecture) comme alternative à l’architecture orientée-objets classique. Elle a pour objectif de permettre aux participant·e·s de passer de l’utilisation de la programmation fonctionnelle à la conception d’architectures d’applications et de systèmes répartis complexes basés sur ses principes.

Même si vous n’utilisez pas de langages fonctionnels purs fortement typés (Scala, OCaml, Haskell), cette formation vous offrira de nouveaux outils et concepts pour enrichir votre pratique de l’architecture, de la conception et de la réalisation de programmes complexes.


Les architectures fonctionnelles présentent l’avantage d’être moins complexes et plus robustes que les architectures orientées-objets car elles promeuvent la stricte séparation des calculs et des interactions avec le monde extérieur, la gestion explicite de l’état du système et de ses transformation, la capacité d’abstraire et de généraliser tous les composants du systèmes.

FunAr propose un contenu riche articulant les pratiques issues du Domain Driven Design - séparation des contextes, langages ubiquitaires, primat du domaine métier sur l’infrastructure technique ; de l’eXtreme Programming - conception incrémentale, architecture hexagonale, développement dirigé par les tests ; de la programmation fonctionnelle pure strictement typée - types algébriques de données, classes de types, foncteurs et monades libres, effets algébriques.

Ce contenu est soutenu par une approche pédagogique dynamique basée sur la développement complet d’une application métier réelle suivant le domaine proposé par les participants, de travaux en sous-groupes accompagnés suivis de discussions interactives des concepts introduits et d’un approfondissement des notions au travers d’exemples de code réel, le tout présenté sous la forme de code en langage Haskell.


Public

Cette formation s’addresse aux ingénieur·e·s logiciels, architectes, développeurs et développeuses maîtrisant déjà les outils « standards » du développement logiciel et souhaitant élargir leurs compétences et connaissances sur des techniques émergentes.

La connaissance des langages fonctionnels est un plus mais n’est pas indispensable : si les exemples présentés seront en Haskell, les participants pourront utiliser le langage de leur choix pour les travaux pratiques.

Pour ceux qui souhaitent toutefois pratiquer le langage Haskell, une journée uniquement dédiée à l’apprentissage du langage est proposée en option avant le démarrage de la formation.

Sessions

Les sessions suivantes sont programmées ou en préparation. Le tarif journalier inclut le déjeuner.

Les dates indiquées ne comprennent pas la journée optionnelle de formation au langage Haskell. Cette journée sera programmée le jour précédent le démarrage de la formation principale.

Ville Dates Tarif H.T./j Détails
Nantes du 10 au 12 juin 2020 590 € En partenariat avec S’inscrire
Grenoble Septembre 2020 590 € En partenariat avec ChangIT S’inscrire
Paris 4ème trimestre 2020 TBD Session en préparation, en partenariat avec Je suis intéressé·e
Lyon 4ème trimestre 2020 TBD Session en préparation, en partenariat avec Je suis intéressé·e

Programme

Jour 1 : Domaine métier

Objectif : Utiliser les outils de la FP pour modéliser un domaine métier

  • Rappels sur les principes des langages fonctionnels
    • La programmation fonctionnelle fortement typée (les langages ML), le langage Haskell, historique et familles de langages
    • Principes de base : fonctions, données immuables, récursion vs. itération, algorithmie, types de base
    • L’environnement de développement : outillage, « IDEs », éco-système Haskell, tests, outils de build…
  • Isoler un Core Domain pur : Séparation entre fonctions pures effets de bord,
  • Utiliser le système de types pour guider le développement et imposer des invariants sur le domaine métier
  • Définir un langage ubiquitaire au moyen de Langages Spécifiques de Domaines (DSLs)
  • Utilisation de QuickCheck pour simuler et tester le domaine

Jour 2 : Effets de bord

Objectif : Construire une application « ligne de commande » autour d’un modèle métier

  • Gérer les E/S : les monades et la monade IO
  • Structuration de programmes : modularités, packages, compilation séparée
  • Stockage de données : lire/écrire des données structurées, manipuler des fichiers, sérialisation « automatique »
  • Event sourcing fonctionnel : séparation commandes/événements, état transitoire, machines à états
  • Modélisation et test de code applicatif avec QuickCheck

Jour 3 : Concurrence & répartition

Objectif : Déployer un service REST-like fonctionnel

  • Services REST en Haskell : Servant, introduction à la programmation dans les types
  • Primitives de concurrence : Threads, variables partagées, primitives de synchronisation, passage de messages
  • Software Transactional Memory : définir des opérations concurrentes composables
  • Programmation par flux : compositions de flux d’événements/commandes, bibliothèque Pipes
  • Découpage d’une application en Bounded contexts autonomes, composition et validation des différentes interfaces et dépendances

Deux jours riches et interactifs. Arnaud et Frederic abordent tous les sujets qui permettent de sauter le pas du fonctionnel en PROD au quotidien. Ils ont su adapter le contenu de la formation aux demandes des participants et répondre à chacune des questions. Excellent !

Christophe Cadhilac
Co-fondateur et Développeur chez Alkeya

D’excellents conseils pour enfin démarrer concrètement une pratique professionnelle de la programmation Haskell. Au delà d’Haskell, une exploration poussée des principes essentiels de l’architecture logicielle moderne.

Un excellent moment à coder tous ensemble, de l’architecture les mains dans le cambouis, guidés par deux experts, particulièrement pédagogues et sympathiques, qui maîtrisent parfaitement leur sujet.

Pascal Grange - Développeur - LGO

Avec cette formation, j’ai pu me perfectionner dans l’utilisation d’un langage fonctionnel, dépasser le cadre de l’utilisation théorique pour voir comment il était possible de penser une application en langage fonctionnel, et qu’est-ce que ce paradigme implique dans la conception et le design logiciel, notamment dans le cas d’une architecture en event-sourcing.

Fabien Lamarque, Software Craftsman

Une initiative particulièrement bienvenue pour tenter de raccrocher les wagons du DDD et de la programmation fonctionnelle !

J’ai trouvé dans le déroulé de cette formation ce qui manque souvent aux contenus sur le sujet : une application des concepts progressive dans un contexte proche des problèmes que l’on rencontre au quotidien.

Josselin Auguste, Développeur

J’ai participé à la formation FunAR avec une certaine appréhension, sans expérience probante en programmation fonctionnelle et n’ayant donc a priori pas tous les pré-requis pour un contenu qui s’annonçait plutôt pointu.

La formation est effectivement de haute volée, mais Arnaud et Frédéric maîtrisent parfaitement leur sujet, ce qui leur permet de s’adapter au public présent en temps réel. Ils ont su dissiper mes doutes sur la légitimité de ma présence : il “suffit” d’une bonne expérience de développeur et d’avoir les chakras ouverts...

Un jeu de va et vient entre du code très concret (Haskell made simple !) et l’explicitation des concepts et patterns sous-jacents rend la formation directement exploitable, en apportant un regard nouveau sur les tests (QuickCheck et le PBT), les types, ou en dédramatisant l’event sourcing. Je recommande sans réserve :-)

Sylvain Ferlac, Développeur @Akenlab

Cette formation est l’adaptation française de la formation FUNAR développée par Michael Sperber et Nicole Rauch en allemand et proposée par l’ISAQB

Les formateurs sont :

Arnaud Bailly

Arnaud développe professionnellement depuis 1994 et a soutenu une thèse de Doctorat en Informatique en 2005 sur le « Test et validation de composants logiciels ».

Il a travaillé en ESN, comme coach Agile et XP, formateur et enseignant, chercheur, consultant, tech lead, architecte, CTO de start-ups.

Il code en Haskell, Idris, Java, Javascript, Clojure, C et plein d’autres langages.

Il est intéressé par tout ce qui touche de près ou de loin au code : langages de programmation - particuliérement fonctionnels, conception et architecture, processus de développement et qualité logicielle, agilité - particulièrement dans sa forme XP et « Craft », programmation systèmes, DevOps et automatisation dans le cloud, théorie et pratique des systèmes répartis, organisation et pensée systémique…

Frederic Merizen

Frederic s’intéresse au code, aux individus qui le produisent, à leurs interactions pendant cette production, et à la tension entre le code dispositif technique et le code genre littéraire ; comment s’organiser pour écrire un code utile aujourd’hui, et qui donne les clefs à l’équipe de demain pour le comprendre et le modifier.

Il développe professionnellement depuis 2003.

Il a été core contributeur au compilateur SmartEiffel, a enseigné à l’université, travaillé en ESN, dispensé du coaching agile, leadé des équipes techniques, et écrit du code, beaucoup.

Parmi ses langages favoris : Clojure, Rust, Haskell, mais il a codé aussi en Python, TypeScript et bien d’autres langages - et il espère allonger la liste.

Contacts

Arnaud Bailly : arnaud@pankzsoft.com

Frederic Merizen : frederic@soft-xki.com