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