Don't Copy&Paste but Generalize or Generate!

KLDP 갔다가 보게된 글.
최근 들어 초기에 가졌던 의욕이 사라지고 있지는 않은가 회의가 드는 시점에서 좋은 글을 보게 된 것 같다. “스스로”가 내 방식인데… 난 지금 뭘하고 있는건지 모르겠다.
——————————————

긁어붙이기(CopyAndPaste)는 프로그래밍에서 악의 축이다. 절대로 긁어붙이지 말고 Generalize Or Generate 하라. 같은 일을 하는 부분의 코드는 전체 프로그램에서 하나만 존재해야 한다. 따라서, 같은 일을 하는 루틴은 단 하나로 빼서 일반화된 루틴을 만들든가, 그것이 프로그래밍 시스템 내에서 어려우면 코드를 생성하는 생성기를 만들어서 쓰든가 해야 한다. 이것이 바로 내가 말하고자 하는 GeneralizeOrGenerate 다. 그러나 CopyAndPaste 해서 적당히 고치는 식으로 만들다 보면 같은 역할을 하는 코드가 여러 곳에 산재하게 되고, 나중에 변형/개선할 일이 있을 때 그 중의 일부반 고치게 되면 엄청나게 골치아픈 문제가 발생하곤 한다.

수학자들이 하는 일이 놀랍게 보이는 이유는, 그들이 어떤 문제를 풀고자 할 때 오히려 더 풀기 어려워 보이는 일반적인 문제에 접근해 그것에 대한 해법을 구함으로써 처음에 풀려고 했던 특수한 문제를 해결하곤 하기 때문이다. 이러한 문제 해결 방법은 수학의 역사를 통해 공인된 것이다. 이러한 방법의 장점은 한 문제를 해결하는 데 그치는 것이 아니라 그와 비슷한 부류의 많은 문제들도 쉽게 해결할 수 있다는 것이다.

프로그램을 하는 것도 수학 문제를 푸는 것과 근본적으로 다를 바가 없다. 단지 주어진 문제만을 푸는 것이 아니라 더 일반적인 문제를 해결함으로써 주어진 문제를 푸는 것이 좋은 수학 문제 풀이이듯이, 좋은 프로그램이란 풀고자 하는 문제보다 일반화된 문제를 다룰 수 있는 프로그램을 통해 특정 문제를 해결하는 프로그램이다. 이러한 프로그램은 활용 범위가 넓을 뿐만 아니라 차후 프로그램의 변경이나 개선시 관리하기도 쉽다.

그러나 실무에서는 이렇게 당연한 사실을 무시하곤 하는 경향이 있다. 개발자들은 급한 일정 등을 핑계로 문제만을 겨우 해결하는 아무렇게나 만든 프로그램을 쏟아내곤 한다. 이럴 때 가장 흔하게 뼈져드는 유혹이 바로 비슷한 코드를 CopyAndPaste 해서 적당히 몇 군데 고쳐서 쓰는 것이다. 차리리 처음 맞딱드리는 문제라면 이런 유혹에 덜 빠지겠지만 과거에 해결했던 것과 유사한 문제를 풀 때 이런 유혹에 빠지기 쉽다. 루틴을 CopyAndPaste 해서 이것 저것 고치는 것을 아무 죄책감 없이 하는 분위기는 정말 큰 문제이다.

CopyAndPaste 와 같은 습관을 버리고 GeneralizeOrGenerate 하며 살아가자. 엔지니어의 의견이나 분석은 전혀 반영하지 않은 채 업무성과를 보이기 위한 프로젝트 기획이나 수주를 따기에만 급급한 주먹구구식 영업 관습 등, 나름대로 열악한 사정이야 있을 수 있다. 하지만 그렇다고 해서 타성에 젖어들면 개인은 물론이거니와 자신이 속한 집단도 발전이 있을 수 없다. 일정을 잘못 잡은 것은 엔지니어가 책임지고 고려해야 할 사항이 아니라 관리자의 임무이다. 개발자가 관심을 가져야 할 것은 프로그램의 품질이다.

http://mithrandir.xcool.net/~kyagrd/moniwiki/?GeneralizeOrGenerate&action=show&dummy=1

Leave a Reply