Программная инженерия, как ее преподают сегодня, полностью сосредоточена на объектно-ориентированном программировании и «естественном» объектно-ориентированном взгляде на мир. Существует подробная методология, которая описывает, как преобразовать модель предметной области в модель классов с несколькими шагами и множеством (UML) артефактов, таких как диаграммы вариантов использования или диаграммы классов. Многие программисты усвоили этот подход и имеют хорошее представление о том, как создать объектно-ориентированное приложение с нуля.
Новая шумиха - это функциональное программирование, которому посвящено множество книг и учебных пособий. Но как насчет функциональной программной инженерии? Читая о Lisp и Clojure, я пришел к двум интересным утверждениям:
Функциональные программы часто разрабатываются снизу вверх, а не сверху вниз («On Lisp», Пол Грэм).
Функциональные программисты используют карты, где объектно-ориентированные программисты используют объекты / classes («Clojure для программистов на Java», выступление Рича Хикли).
Итак, какова методология систематического (основанного на модели?) Проектирования функционального приложения, например, в Lisp или Clojure? Каковы общие шаги, какие артефакты я использую, как сопоставить их из проблемной области в области решения?