원문 캡처 · paulgraham.com
원문 캡처 · paulgraham.com

폴 그레이엄(Paul Graham)이 1993년 『On Lisp』 서문에서 제시한 상향식 설계는 문제에 맞게 Lisp에 연산자를 더하고, 언어와 프로그램을 함께 발전시키는 방식이다. 그는 이 접근이 프로그램을 더 작고 읽기 쉽게 만들며 코드 재사용에도 도움이 된다고 설명한다.

전통적인 하향식 설계는 프로그램의 목적을 하위 작업으로 나누고, 각 작업을 다시 작은 하위 작업으로 쪼갠다. 반면 상향식 설계에서는 프로그램을 작성하다 필요한 연산자가 떠오르면 직접 추가하고, 새 연산자를 활용해 다른 부분의 설계도 단순화한다. 그 결과 같은 프로그램을 다른 순서로 쓰는 데 그치지 않고, 더 추상적인 연산자를 갖춘 언어와 그 언어로 작성한 더 작은 프로그램을 만든다는 설명이다.

그레이엄은 프로그램이 짧아지면 구성 요소와 요소 간 연결이 줄어 읽고 수정하기 쉬워지고 오류가 생길 여지도 줄어든다고 주장한다. 먼저 만든 프로그램의 유틸리티를 후속 프로그램에 재사용할 수 있고, 코드에서 반복되는 패턴을 발견해 설계를 단순화할 수도 있다고 덧붙인다. 다른 언어에서도 라이브러리 함수를 활용하면 이런 설계를 어느 정도 적용할 수 있지만, 그레이엄은 Lisp에서 언어를 확장할 수 있는 폭이 더 크다고 본다.

그레이엄은 이런 개발 방식이 소규모 팀에 더 잘 맞지만, 동시에 작은 팀이 할 수 있는 일의 범위도 넓힌다고 말한다. 이는 1993년 에세이의 설계 관점이며, 본문은 구체적인 실험이나 성능 비교를 제시하지 않는다.

원문: Programming Bottom-Up