Extremely Agile/General2007.11.12 01:44
'프로그래밍의 도' (Tao of Programming)라는 유명한 농담이 있습니다. 꽤 재미있는 농담입니다만, 저는 이 농담이 두 가지 측면에서 좋지 않다고 생각합니다. 프로그래머라는 사람들은 조직의 가치에 융화되기 어려운 사람들이라는 잘못된 생각을 전파시킬 수 있다는 점에서 그렇고, 이 농담에서 묘사하는 '도를 깨친 프로그래머'가 실제 프로그래머의 모습과 상당히 거리가 있기 때문에 더 그렇습니다.

제자(第子)가 스승에게 묻기를: "저 프로그래머는 설계(設計)도 않고, 문서(文書) 작성(作成)도 않으며 자기(自己) 프로그램을 테스트해 보지도 않습니다. 하지만 모두 그를 세계(世界)에서 가장 뛰어난 프로그래머라고 칭송(稱頌)합니다. 그 이유(理由)가 무엇입니까?"

가령, 위와 같은 문장이 그 예입니다. '테스트를 하지 않는 프로그래머'가 세계에서 가장 뛰어난 프로그래머라니요? 모든 좋은 프로그램들은 오히려 '뛰어난 테스트'로부터 만들어집니다. 테스트를 하지 않고서도 돌아갈 수 있는 프로그램을 만드는 프로그래머가 되고 싶은 마음은 이해하지만, 현실적으로는 불가능합니다.

도사(道士) 프로그래머 가라사대:
"프로그램을 테스트하고 있을 때는
설계(設計)를 변경(變更)하기엔 이미 늦은 다음이니라."

위의 문장은 부분적으로는 맞고, 부분적으로는 맞지 않습니다. 위의 명제가 맞으려면, 프로젝트가 거의 폭포수 형태로 진행되어야 하고, 설계는 프로젝트 초기에 모두 이루어져야 합니다. 하지만 프로젝트를 애자일 적으로 진행하는 경우에는 테스트를 통해 설계의 얼개가 드러나기도 합니다. 설계는 프로젝트 전반에 걸쳐 조금씩 진행되며, 결과적으로 테스트 시점에 떠안게 되는 오버헤드도 굉장히 낮아집니다. 그럼 저 명제를 제시한 '도사 프로그래머'는 정말로 도사일까요? (저는 아니라고 생각합니다.)

많은 해가 지나 관리자는 은퇴(隱退)하게 되었다. 은퇴식장에 가던 도중 그는 프로그래머가 터미날 앞에서 잠들어 있는 것을 보게 되었다. 그는 어제 밤을 새가며 프로그래밍을 했던 것이다.

위와 같은 문장은 프로그래머가 굉장히 무책임한 부류의 사람들이라는 인상을 줍니다만 (물론 원래 의도는 그렇지 않을 거라고 생각합니다만) 그것도 역시 사실이 아닙니다. 이렇게 사실이 아닌 문장이 농담을 빌어 나열된 것은, 아마도 다음과 같은 이유 때문일 겁니다. 역시 '프로그래밍의 도'에서 인용했습니다.

프로그래머는 왜 생산성(生産性)이 낮은가?
그들의 시간이 회의로 낭비(浪費)되기 때문이다.
프로그래머가 왜 툴툴거리는가?
관리자가 지나치게 참견하기 때문이다.
프로그래머가 왜 하나씩 회사를 떠나는가?
지쳤기 때문이다.
무능력(無能力)한 관리자 밑에서 일하는 프로그래머는 자신의 직업(職業)을 소중히 여기지 않는다.

위에 나열된 문제들은 계획(planning)을 프로젝트 전반기에 어떻게든 마무리하고 그렇게 해서 만들어진 프로젝트를 고수하려고만 하는 프로젝트 팀에서 빈번히 발견됩니다. 전반기의 회의 시간에 상당수의 프로그래머들은 졸거나 다른 일을 하고, 막상 개발에 들어가고 나면 관리자들이 요구사항을 지나치게 변경해 댄다고 툴툴거리게 됩니다. 그러다보면 정작 테스트는 프로젝트 막바지에 몰아서 하게 되고, 그 단계에 오류를 발견하게 된다고 하더라도 설계를 쉽게 변경할 수 없게 됩니다. 그러다보면 프로그래머들은 결국 지쳐서 하나둘씩 회사를 떠나게 되지요. 결국 관리자들은 '프로그래머들이란 책임감이라고는 눈꼽만치도 없는 인간들이야...'라는 식으로 생각하게 될 겁니다.

그러니, 위에서 언급한 '테스트를 하지 않는 프로그래머', 즉 도를 깨친 프로그래머는, 프로그래머가 당면한 여러가지 현실적 문제들을 논리적으로 거꾸로 뒤집어 만들어낸 캐릭터인 셈입니다. 현실과는 완전히 반대이며, 그렇기 때문에 또 정말로 바람직한 프로그래머의 상 과는 '현실적으로' 거리가 있는, 그런 캐릭터가 만들어진 것이죠.

그렇다면 저는 '프로그래밍의 도를 깨친 프로그래머는 애자일적인 프로그래머이다'라는 주장을 하고 싶은 걸까요? 사실 그건 아닙니다. '프로그래밍의 도'라는 이 농담이 폭포수적인 개발 관행의 부조리함에 대한 반감에서 나오긴 했습니다만, 그렇다고 애자일적인 프로그래밍을 하는 사람이 자동적으로 도를 깨친 프로그래머가 되는 건 아닙니다. 사실 '프로그래밍의 도'라는 이 농담에는 꽤 들어둘만한 구절도 몇 군데 있는데, 이런 구절들이 사실상 프로그래밍의 도란 무엇인가를 어느정도는 암시한다고 생각합니다. 결국 프로그래밍의 도라는 것은 특정한 방법론에 귀속되는 것은 아닌 셈이죠.

관리자는 보너스를 주려고 하였지만, 프로그래머는 거절(拒絶)하였다. 프로그래머 가로되. "나는 이 프로그램이 재미있다고 생각했기 때문에 작했을 뿐입니다. 따라서 나는 아무런 보상도 바라지 않습니다."
이 말을 들은 관리자가 말하기를, "이 프로그래머는, 비록 비천(卑賤)한 자리에 있으나, 종업원의 맡은 바 책무(責務)가 무엇인지 잘 알고 있다. 그를 보조 관리자로 승진시키도록 하자!"
그러나 이 말을 들은 프로그래머는 다시 한 번 거절하였다."나는 프로그램을 짤 수 있기 때문에 존재합니다. 만일 승진한다면 다른 사람의 시간을 갉아먹게 될 뿐입니다. 이제 가도 됩니까? 지금 짜고 있는 프로그램이 하나 있거든요."


이 글을 읽는 여러분은 프로그래밍의 도에 대해 어떤 생각을 가지고 계실지 궁금하군요.
 

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^