Rekayasa Perangkat Lunak seperti yang diajarkan hari ini sepenuhnya berfokus pada pemrograman berorientasi objek dan pandangan berorientasi objek 'alami' dunia. Ada metodologi terperinci yang menjelaskan cara mengubah model domain menjadi model kelas dengan beberapa langkah dan banyak (UML) artefak seperti use-case-diagram atau class-diagram. Banyak programmer telah menginternalisasi pendekatan ini dan memiliki ide bagus tentang bagaimana merancang aplikasi berorientasi objek dari awal.
Hype baru adalah pemrograman fungsional, yang diajarkan di banyak buku dan tutorial. Tapi bagaimana dengan rekayasa perangkat lunak fungsional? Saat membaca tentang Lisp dan Clojure, saya menemukan dua pernyataan menarik:
Program fungsional sering dikembangkan dari bawah ke atas bukan dari atas ke bawah ('On Lisp', Paul Graham)
Pemrogram Fungsional menggunakan Peta di mana Pemrogram OO menggunakan objek / kelas ('Clojure for Java Programmers', berbicara oleh Rich Hickley).
Jadi apa metodologi untuk desain sistematis (berbasis model?) Dari aplikasi fungsional, yaitu dalam Lisp atau Clojure? Apa langkah-langkah umum, artefak apa yang saya gunakan, bagaimana cara memetakannya dari ruang masalah ke ruang solusi?