brunch

You can make anything
by writing

C.S.Lewis

by 하리니 Mar 20. 2023

큰 일은 나누자

작은 단위로 쪼개면 쉬워지는 Divide-and-Conquer

 너무 너무 일을 하기 싫다. 그냥 일을 하고 싶지 않은 건지, 하고 싶지 않은 일이라 그런 건지, 아니면 저걸 언제 다 하나 싶은 생각에 그런 건지 모르겠다. 일단 정신을 가다듬고, 커피도 한 잔 하고 나서 기합도 넣어본다. 준비가 되었다 싶을 때, 첫 삽을 푹 떠본다. 그런데, 첫 삽 뜨기 전에 일이 좀 작게 나눠져 있었다면? 굳이 기합까지 넣지 않아도 첫 삽을 뜰 수 있었을지도? 


 일 시작하는게 너무 어렵다면, 먼저 그 일을 작게 나눠야 한다. 작게 잘 나누면, 처음에 커다란 하나의 일로 보였던 것이 어느새 작은 일들의 조합으로 보이기 시작한다. 30분 내외의 시간이 걸리는 작은 조각들을 보면 그래도 해볼 만하다는 생각이 든다. 이 일들을 가지고 단계를 나누면 시작할 수 있는 계획이 이미 만들어진 것이다. 이제, 정말 하기 싫더라도 한 단계 정도를 일단 해보자는 심정으로도 일을 시작할 수 있다.  


 컴퓨터 공학에도 이 같은 컨셉이 있는데, 일명 'Divide and Conquer'라는 것으로, 일을 쪼개 수행하고, 결과를 합치는 방식이다. 아주 아주 단순한 예로, N개의 입력이 들어오면 그것을 처리하는 데 세제곱 만큼의 연산이 발생하는 프로그램이 있다고 가정할 수 있다. 이 때 N개의 입력을 나눠서 처리하면 필요한 연산이 줄어들 수 있는데, 예를 들어 10개의 입력이 들어와 그것을 3, 3, 4개로 나눠서 처리할 수 있다면? 1000 번의 연산이 필요한 일을 118번(27+27+64=118)으로 나눠서 처리할 수 있게 된다. 물론 이는 매우 단순한 예다. 실제로는 고려해야 할 것이 훨씬 많다. 일을 나누고 결과를 조합하는 데 필요한 추가적인 연산들, 일을 나눴을 때 추가로 얻을 수 있는 이점(예를 들면 병렬 처리가 가능하다던가)과 또한 병렬 처리를 위한 데이터 분산에서 발생하는 데이터 이동 비용 등. 중요한 것은, 일을 나눠서 더 쉽게 해결하는 방식은 유명한 수학자와 컴퓨터 공학자들이 이미 옛날부터 고민해온 것이라는 점. 


 일을 시작하기 위한 계획은 조금 단순해도 괜찮다. 일을 잘 나누고 계획하는 것은 사실 매우 어려운 일이다. 실제로, 'Divide and Conquer' 방식에서도 가장 중요한 것은 어떻게 일을 나누냐이다. 실제로도 일을 잘 나누는 것이 그 일을 하는 것보다 어려울 때가 있다. 하지만, 컴퓨터가 아닌 우리는 처음부터 일을 나누는데 많은 공을 들일 필요까지는 없다. 일단 일을 시작하게 만들기 위한 것이지 것이지, 일을 잘 끝내려는 계획은 아니기 때문이다.  


 막상 일을 시작하고 나면, 제대로 일을 끝내기 위해 계획을 수정하거나 새로 짤 수도 있다. 일을 시작해 어느 정도 감을 잡으면, 계획을 더 좋은 방향으로 수정할 수 있는 여러 실마리를 얻게 된다. 따라서 일을 시작하기 위한 계획은 조금 단순해도 좋고, 제대로 된 계획은 일을 진행하면서 다시 세우면 된다. 


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari