L'ingegneria del software come viene insegnata oggi è interamente focalizzata sulla programmazione orientata agli oggetti e sulla visione del mondo "naturale" orientata agli oggetti. Esiste una metodologia dettagliata che descrive come trasformare un modello di dominio in un modello di classe con diversi passaggi e molti artefatti (UML) come diagrammi di casi d'uso o diagrammi di classe. Molti programmatori hanno interiorizzato questo approccio e hanno una buona idea su come progettare da zero un'applicazione orientata agli oggetti.
Il nuovo hype è la programmazione funzionale, che viene insegnata in molti libri e tutorial. Ma che dire dell'ingegneria del software funzionale? Durante la lettura di Lisp e Clojure, sono venuto su due dichiarazioni interessanti:
I programmi funzionali sono spesso sviluppati dal basso verso l'alto invece che dall'alto verso il basso ("On Lisp", Paul Graham)
I programmatori funzionali usano le mappe in cui i programmatori OO usano oggetti / classi ("Clojure per programmatori Java", interazione di Rich Hickley).
Quindi qual è la metodologia per una progettazione sistematica (basata sul modello?) Di un'applicazione funzionale, cioè in Lisp o Clojure? Quali sono i passaggi comuni, quali artefatti uso, come posso mapparli dallo spazio problematico allo spazio della soluzione?