Software Engineering, wie es heute gelehrt wird, konzentriert sich ausschließlich auf objektorientierte Programmierung und die "natürliche" objektorientierte Sicht auf die Welt. Es gibt eine detaillierte Methodik, die beschreibt, wie ein Domänenmodell mit mehreren Schritten und vielen (UML-) Artefakten wie Anwendungsfalldiagrammen oder Klassendiagrammen in ein Klassenmodell umgewandelt wird. Viele Programmierer haben diesen Ansatz verinnerlicht und haben eine gute Vorstellung davon, wie eine objektorientierte Anwendung von Grund auf neu entworfen werden kann.
Der neue Hype ist die funktionale Programmierung, die in vielen Büchern und Tutorials gelehrt wird. Aber was ist mit funktionaler Softwareentwicklung? Beim Lesen über Lisp und Clojure kam ich zu zwei interessanten Aussagen:
Funktionsprogramme werden oft von unten nach oben statt von oben nach unten entwickelt ('On Lisp', Paul Graham)
Funktionale Programmierer verwenden Maps, in denen OO-Programmierer Objekte / Klassen verwenden ('Clojure for Java Programmers', Vortrag von Rich Hickley).
Wie lautet also die Methodik für ein systematisches (modellbasiertes?) Design einer funktionalen Anwendung, dh in Lisp oder Clojure? Was sind die gängigen Schritte, welche Artefakte verwende ich, wie ordne ich sie vom Problemraum dem Lösungsraum zu?