Le génie logiciel tel qu'il est enseigné aujourd'hui est entièrement axé sur la programmation orientée objet et la vision orientée objet «naturelle» du monde. Il existe une méthodologie détaillée qui décrit comment transformer un modèle de domaine en un modèle de classe avec plusieurs étapes et de nombreux artefacts (UML) comme des diagrammes de cas d'utilisation ou des diagrammes de classe. De nombreux programmeurs ont internalisé cette approche et ont une bonne idée de la façon de concevoir une application orientée objet à partir de zéro.
Le nouveau battage médiatique est la programmation fonctionnelle, qui est enseignée dans de nombreux livres et tutoriels. Mais qu'en est-il de l'ingénierie logicielle fonctionnelle? En lisant sur Lisp et Clojure, je suis arrivé à deux déclarations intéressantes:
Les programmes fonctionnels sont souvent développés de bas en haut plutôt que de haut en bas («On Lisp», Paul Graham)
Les programmeurs fonctionnels utilisent des cartes où les programmeurs OO utilisent des objets / classes («Clojure for Java Programmers», exposé de Rich Hickley).
Quelle est donc la méthodologie pour une conception systématique (basée sur un modèle?) D'une application fonctionnelle, c'est-à-dire en Lisp ou en Clojure? Quelles sont les étapes courantes, quels artefacts dois-je utiliser, comment les mapper de l'espace du problème à l'espace de la solution?