저의 페이스북 담벼락의 글을 가져왔습니다.
---
오픈튜토리얼스 코드의 내부구조가 상당히 복잡해서 3년이 넘도록 내부의 구조를 정리해야겠다고 벼르고 있었다. (똑같이 동작하는데 코드를 효율적으로 바꾸는 활동을 프로그래밍에서는 리팩토링이라고 한다.) 3~6개월에 한번씩 리팩토링을 시도했다. 할 때마다 번번히 실패를 했다. 2~3주 열심히 코딩하다보면 강의가 땡겨서 강의에 매달리고 강의를 하다보면 리팩토링이 땡겨서 또 리팩토링에 매달리고를 반복했다.
생각해보면 코딩이건 강의건 뒤로갈수록 앞에서 한 작업들이 일종의 업보(karma)가 되어 복잡성이 기하급수적으로 늘어난다. 복잡성이 늘어나면 뇌에 몰리는 부하는 점점 커지고, 성취 대비 뇌의 피로도가 급격히 악화된다. 지친 뇌는 새롭게 시작할 일을 찾게 되는데 나에겐 강의와 코딩사이를 왔다 갔다하는 것이 패턴이 된 것 같다. 뇌를 이기는 의지는 없다.
결국 어떻게 뇌가 견딜 수 있는 강도로 복잡한 일을 처리할 것인가가 중요한 이슈가 되는데 (좀 성급한 판단일지 몰라도)이번 리팩토링이 성공한 듯 보이는 이유를 추정해보면 이렇다.
예를들어 코딩을 할 때 M과 V와 C라는 크게 세가지 종류의 일이 있다고 생각해보면, 지금까지는 의욕이 넘쳐서 M,V,C 모두를 완전히 새로운 코드로 개선하려고 했다. 처음엔 쉽게 되는 것 같지만, 각각의 요소들의 복잡성이 기하급수적으로 커지면서 급기야는 뇌가 감당할 수 있는 부하를 넘어서게 되고, 뇌는 복잡하지 않은 새로운 일로 여행을 떠날 준비를 시작한다.
이번 리팩토링은 M,V,C 중에서 M과 V는 진부하게 고정시키고 C 업무를 새롭게 하는데 집중을 했다. 그 결과 C는 완전히 새로워졌지만 MV는 철저하게 진부한 상태로 남아있다. 물론 MV는 C와 밀접하게 연관되어 있기 때문에 C를 변경하는데 여간 걸리적거리는 것이 아니다. C의 변경이 제한되더라도 작업의 초반에는 MV를 수정하지 않았고, C의 변경이 끝나감에 따라서 MV를 제한적으로 변경했다.
리팩토링이 성공한 적이 거의 없었기 때문에 이번 리팩토링도 실패하나보다 싶었는데 작업이 일정한 진척도에 도달한 순간 여러가지 후속작업들이 빠르게 되거나, 저절로 되어 있는 경우도 있었다. 리팩토링이 잘 되었다는 느낌은 처음 받아본 것 같다. 지금까지는 리팩토링을 할 바엔 새롭게 짜고 말았다. 무슨 일이든 한번의 경험이 제일 중요하다. 그 한번의 경험이 신념의 토양이 되니까.
무엇인가를 새롭게 하려면 새롭게 하려는 것을 제외한 모든 것을 철저히 진부하게 고정시키는 것이 필요한 것 같다. 모든 것을 새롭게 하려고 하면 아무것도 새롭게 할 수 없을지도 모른다. 우둔한 보수는 새로움을 전면적으로 막고, 교묘한 보수는 모든 면에서 새롭게 할 것을 부추긴다. 우둔한 진보는 모든 것을 동시에 새롭게 하려고 하고, 교묘한 진보는 무엇을 새롭게 할 것인가가 아니라 무엇을 진부하게 할 것인가를 결정한다.