Inżynieria oprogramowania, jak się ją obecnie uczy, koncentruje się całkowicie na programowaniu obiektowym i „naturalnym” obiektowym spojrzeniu na świat. Istnieje szczegółowa metodologia opisująca sposób przekształcenia modelu domeny w model klasy z kilkoma krokami i wieloma artefaktami (UML), takimi jak diagramy przypadków użycia lub diagramy klas. Wielu programistów zinternalizowało to podejście i ma dobry pomysł na temat projektowania aplikacji obiektowych od zera.
Nowym hype jest programowanie funkcjonalne, którego uczy wiele książek i samouczków. A co z funkcjonalną inżynierią oprogramowania? Czytając o Lisp i Clojure, doszedłem do dwóch interesujących stwierdzeń:
Programy funkcjonalne są często opracowywane oddolnie zamiast odgórnie („On Lisp”, Paul Graham)
Funkcjonalni programiści używają map, w których OO-programiści używają obiektów / klas („Clojure for Java Programmers”, wykład Rich Hickley).
Jaka jest zatem metodologia systematycznego (opartego na modelu?) Projektowania aplikacji funkcjonalnej, tj. W Lisp lub Clojure? Jakie są typowe kroki, jakich artefaktów używam, jak zamapować je z obszaru problemu na obszar rozwiązania?