"선언형 프로그래밍은 "What(무엇을)" 에 관한 것이다."
너무 심플해서 처음에는 이해하지 못했던 내용입니다. 리액트를 공부하면서도 등장했던 "선언적(Declarative)" 이다라는 표현. 오늘은 이를 회사에 입사한 상황에 빗대어서 이해해 보겠습니다.
eensungkim
은 인턴으로 회사에 입사했습니다. 입사하자마자 온보딩 과정이 진행됩니다. 그리고 회사에서 사용하는 툴을 지급된 맥북에 설치하라는 미션이 eensungkim
에게 주어집니다.
비대면으로 모든 업무가 진행되는 상황이기 때문에 직접적으로 다른 크루의 도움을 받기란 쉽지 않습니다. 사실 꼭 비대면 상황이 아니더라도 기존 크루가 일일히 툴을 세팅해주는 것은 효율적이지 않은 것 같습니다.
회사에서는 어느 링크로 들어가서 어떻게 다운받아 설치할 수 있는지, 초기 환경 세팅은 어떻게 하면 되는지를 상세하게 기록해 노션 문서에 정리해두었습니다. 이제 eensungkim
을 비롯한 모든 신입들은 노션 문서에 자세하게 기록된 내용들을 잘 쫓아가기만 하면, 큰 어려움 없이 툴들을 세팅할 수 있게 되었습니다.
위의 상황에서 "신입은 회사에서 사용하는 툴을 설치한다." 라는 문장은 선언적인 문장이라고 할 수 있습니다. 신입이 "무엇을" 해야하는지를 한 눈에 보기에도 명확하게 설명하고 있죠.
그러나 신입이 이를 수행하기 위해서는 더 자세한 정보가 필요합니다. 사용하는 툴의 이름은 무엇인지, 어디에서 다운받을 수 있는지, 초기 세팅은 어떻게 해야 하는지 등이 안내되어야 하겠죠. 이것이 바로 명령적인 문장입니다. "어떻게" 해야 하는지를 기술한 것을 말하죠.
컴퓨터에게 무언가를 지시하기 위해서는 구체적이고 명확하게 지시 사항을 전달해야 합니다. 컴퓨터는 추상적으로 던져진 질문을 이해하지 못하기 때문입니다. 그래서 초창기 프로그래밍은 일반적으로 명령형 프로그래밍 방식으로 작성되었습니다.
명령형으로 작성된 프로그램은 정보의 양이 과다하게 많아 오늘날의 프로그래밍과는 어울리지 않습니다. 구체적인 동작 과정을 추상화 작업으로 감추고 무엇을 해야 하는지를 기술하는 편이 협업 상대방에게 효과적으로 정보를 전달하는 방법이기 때문입니다.
신입의 온보딩 과정을 다시 살펴보겠습니다. 만약 회사의 다른 누군가가 신입 온보딩 과정에서 무엇을 진행하는지 관심을 가졌다고 가정해보겠습니다. 모든 툴을 일일히 열거하면서 어느 링크에서 다운받아 이러저러한 과정을 거쳐 설치하고 이렇게 세팅해야 한다고 설명하는 것은 매우 비효율적입니다.
회사에서 사용하는 툴을 설치하도록 안내하고 있다고 설명하는 것으로도 충분합니다. 구체적인 과정은 신입들에게만 안내하는 것이죠. 이를 통해 복잡한 과정을 추상화하고 "무엇을" 하는지에 집중해 정보를 전달할 수 있게 됩니다.
개발자는 공부를 통해 선언형 프로그래밍의 내부에서 동작하는 일련의 명령형 프로그래밍 과정들을 알아야 하고 또 이해할 수 있어야 합니다. 실제 개발 과정은 이러한 것을 알고 있다는 전제로부터 출발하기 때문입니다.
명령형 프로그래밍과 선언형 프로그래밍에 대해 잘 정리되어 있는 글을 링크로 첨부해드립니다. 쭈욱 읽어보시면 구체적으로 이해하는 데 도움이 될 것 같습니다.