오늘날 가르치는 소프트웨어 엔지니어링은 전적으로 객체 지향 프로그래밍과 '자연적인'객체 지향 관점에 중점을두고 있습니다. 도메인 모델을 여러 단계와 유스 케이스 다이어그램 또는 클래스 다이어그램과 같은 많은 (UML) 아티팩트로 클래스 모델로 변환하는 방법을 설명하는 자세한 방법이 있습니다. 많은 프로그래머들이이 접근 방식을 내재화했으며 처음부터 객체 지향 응용 프로그램을 설계하는 방법에 대한 좋은 아이디어를 가지고 있습니다.
새로운 과대 광고는 기능적인 프로그래밍으로, 많은 서적과 자습서에서 진행됩니다. 그러나 기능적 소프트웨어 엔지니어링은 어떻습니까? Lisp와 Clojure에 대해 읽는 동안 두 가지 흥미로운 진술이 나왔습니다.
기능 프로그램은 종종 하향식 대신 상향식으로 개발됩니다 ( 'On Lisp', Paul Graham)
기능 프로그래머는 OO 프로그래머가 객체 / 클래스를 사용하는 맵을 사용합니다 ( 'Clojure for Java Programmers', Rich Hickley의 대화).
그렇다면 Lisp 또는 Clojure와 같은 기능적 응용 프로그램의 체계적인 (모델 기반?) 디자인 방법론은 무엇입니까? 공통 단계는 무엇이며 어떤 이슈를 사용합니까? 문제 공간에서 솔루션 공간으로 어떻게 매핑합니까?