Kỹ thuật phần mềm như được dạy ngày nay hoàn toàn tập trung vào lập trình hướng đối tượng và quan điểm hướng đối tượng 'tự nhiên' về thế giới. Có một phương pháp chi tiết mô tả cách chuyển đổi mô hình miền thành mô hình lớp với một số bước và rất nhiều tạo tác (UML) như sơ đồ trường hợp sử dụng hoặc sơ đồ lớp. Nhiều lập trình viên đã tiếp thu phương pháp này và có một ý tưởng tốt về cách thiết kế một ứng dụng hướng đối tượng từ đầu.
Sự cường điệu mới là lập trình chức năng, được dạy trong nhiều sách và hướng dẫn. Nhưng những gì về kỹ thuật phần mềm chức năng? Trong khi đọc về Lisp và Clojure, tôi đã nói về hai câu thú vị:
Các chương trình chức năng thường được phát triển từ dưới lên thay vì từ trên xuống ('On Lisp', Paul Graham)
Các lập trình viên chức năng sử dụng Bản đồ nơi các lập trình viên OO sử dụng các đối tượng / lớp ('Clojure cho lập trình viên Java', nói chuyện bởi Rich Hickley).
Vậy phương pháp nào cho một thiết kế có hệ thống (dựa trên mô hình?) Của một ứng dụng chức năng, tức là trong Lisp hoặc Clojure? Các bước phổ biến là gì, tôi sử dụng các tạo phẩm nào, làm cách nào để ánh xạ chúng từ không gian vấn đề sang không gian giải pháp?