今天教授的软件工程完全专注于面向对象的编程和“自然的”面向对象的世界观。有一个详细的方法描述了如何通过几个步骤和许多(UML)工件(如用例图或类图)将域模型转换为类模型。许多程序员已经内化了这种方法,并且对如何从头开始设计面向对象的应用程序有很好的想法。
新的炒作是函数式编程,它在许多书籍和教程中都有讲授。但是功能软件工程呢?在阅读有关 Lisp 和 Clojure 的信息时,我想到了两个有趣的陈述:
函数式程序通常是自下而上而不是自上而下开发的('On Lisp',Paul Graham)
函数式程序员使用映射,而 OO 程序员使用对象/类('Clojure for Java Programmers',Rich Hickley 的演讲)。
那么,在 Lisp 或 Clojure 中系统化(基于模型?)设计功能应用程序的方法是什么?常见步骤是什么,我使用什么工件,如何将它们从问题空间映射到解决方案空间?