Інженерія програмного забезпечення, як вона викладається сьогодні, повністю орієнтована на об'єктно-орієнтоване програмування та "природний" об'єктно-орієнтований погляд на світ. Існує детальна методологія, яка описує, як перетворити модель домену в модель класу з декількома кроками та безліччю артефактів (UML), таких як діаграми використання-випадку або діаграми класів. Багато програмістів інтерналізували цей підхід і мають гарне уявлення про те, як спроектувати об’єктно-орієнтований додаток з нуля.
Новий ажіотаж - це функціональне програмування, яке викладається у багатьох книгах та навчальних посібниках. А як щодо функціональної інженерії програмного забезпечення? Читаючи про Ліспа і Клуджуре, я прийшов до двох цікавих тверджень:
Функціональні програми часто розробляються знизу вгору, а не зверху вниз ("На Ліпп", Пол Грем)
Функціональні програмісти використовують карти, де OO-програмісти використовують об'єкти / класи ("Clojure для Java-програмістів", розмова Річа Хіклі).
Отже, яка методологія систематичного (на основі моделей?) Проектування функціонального додатку, тобто у Ліспі чи Клоджуре? Які загальні кроки, які артефакти я використовую, як їх відобразити з проблемного простору в простір рішення?