훌륭한 프로그래머의 딜레마



-----------------------------------------------------------------------------
소프트웨어 업계의 잘 알려지지 않은 명작 [ Wicked Problems, Righteous Solutions ]에
나온 일화를 국내 XP(Extreme Programming)의 전도사 김창준님이 각색한 것이다.
-----------------------------------------------------------------------------
 
'열심히' 씨와 '훌륭한' 씨는 각각 '엄청난 소프트웨어 회사'와 '허벌난 소프트웨어 회사'의 두 직원이다. 우연치 않게 두 회사에 정확히 똑같은 내용의 주문이 들어왔다. '열나 어려운 문제' 해결을 위한 프로그램을 작성해 달라는 것이었다.

열심히 씨는 처음 예상 소요 시간인 3개월 동안 정말 열심히 일했다.
하지만 일을 하면서 예상 외의 장애를 직면했고, 밤샘 작업까지 해가면서 3개월 마지막 날 매니저에게 이런 말을 할 수 있었다. "정말 열나게 프로그램을 짰습니다. 밤샘도 하고요. 제가 지금까지 작성한 프로그램은 2,000줄입니다. 그런데 새로운 문제가 기술적으로 불가피하게 발생했습니다. 복잡한 버그(프로그램 오류)도 몇 가지 해결해야 하고요. 한달 가량이 더 필요합니다". 그러고 한 달 후 열심히 씨는 몇 개의 버그와 더불어 나름대로 작동하는 프로그램을 매니저와 고객에게 자랑스럽게 보여줄 수 있었다. 벌겋게 충혈된 눈과 미처 깎지 못한 수염, 무지무지 어렵고 복잡해 보이는 2,500여 줄의 프로그램과 함께. "예상보다 훨씬 더 복잡한 문제였군요. 정말 수고하셨습니다."라는 칭찬을 들으면서,

훌륭한 씨는 매니저가 '의무적으로' 잡아놓은 예상 소요 시간 3개월의 첫 2달 반을 빈둥거리며 지냈다. 매니저는 훌륭한 씨가 월말이 되어서 "정말 죄송해요. 아직 한 줄도 못짰어요. 너무 어려워요. 좀 봐주세요."라고 처량하게 자비를 구할 날을 손꼽아 기다렸다. 웬걸, 마지막 날 훌륭한 씨는 예의 '너무도 태연스러운' 모습으로 나타났다. 150여 줄의 프로그램과 함께. 그 프로그램은 멋지게 '열나 어려운 문제'를 해결했다. 하지만 매니저 가 그 코드를 들여다 보자, 한 마디로 "너무도 쉬웠다." 초등학생도 생각해 낼 정도였다. 매니저와 고객은 이름을 '열나 쉬운 문제'로 바꾸는 데에 전적으로 동의한다. 훌륭한 씨는 "이렇게 간단한 문제를 3개월씩이나 걸려서 풀었습니까? 왜 이렇게 성실하지 못하죠?"라는 비난을 들어야 했다.

둘 중에 누가 승진을 했을까? 열심히 씨는 승진하고, 급여인상을 받았다. 훌륭한 씨는 급여삭감을 직면하고는 퇴사해 버렸다. 훌륭한 프로그래머는가난하다. 훌륭한 프로그래머의 딜레마인 것이다.





위나라의 임금이 편작에게 묻는다.

"그대 삼형제 가운데 누가 제일 잘 병을 치료하는가?"

큰 형님의 의술이 가장 훌륭하고 다음은 둘째 형님이며 저의 의술이 가장 비천합니다. 임금이 그 이유를 묻자 편작이 대답한 내용은 이러했다.

'큰 형님은 상대방이 아픔을 느끼지 전에 얼굴빛을 보고 그에게 장차 병이 있을 것임을 안다. 그리하여 그가 병이 생기기도 전에 원인을 제거하여 준다. 그러므로 상대는 아파보지도 않은 상태에서 치료를 받게 되고 따라서 그간 자기의 고통을 제거해 주었다는 사실을 알지 못한다. 큰 형이 명의로 소문나지 않은 이유는 여기에 있다.
둘째는 상대방이 병세가 미미한 상태에서 그의 병을 알고 치료를 해준다. 그러므로 이 경우의 환자도 둘째형이 자신의 큰 병을 낫게 해주었다고 생각하지 않는다.
그러나 나는 병이 커지고 환자가 고통속에 신음할 때가 되어서야 비로소 병을 알아 보았다. 환자의 병이 심하므로 그의 맥을 짚어야 했으며 진기한 약을 먹이고 살을 도려내는 수술도 했다. 그런데 사람들은 나의 그러한 행위를 보고서야 비로소 내가 자신의 병을 고쳐주었다고 믿게 되었다. 내가 명의로 소문이 나게 된 이유는 여기에 있다.'