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

훌륭한 프로그래머의 딜레마라는 글을 보게 되었는데, 내용이 재미 있어서 한번 제 블로그에 옮겨와 봤습니다.

“열심히”씨와 “훌륭한”씨는 각각 “엄청난소프트웨어회사”와 “허벌난소프트웨어회사”의 두 직원이다. 우연치 않게 두 회사에 정확히 똑같은 내용의 주문이 들어왔다. “열나어려운문제” 해결을 위한 프로그램을 작성해 달라는 것이었다.

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

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

둘 중에 누가 승진을 했을까?

열심히씨는 승진하고, 급여인상을 받았다. 훌륭한씨는 급여삭감을 직면하고는 퇴사해 버렸다.

훌륭한 프로그래머는 가난하다. 훌륭한 프로그래머의 딜레마인 것이다.

위 글의 원문 댓글에, 미국은 우주에서도 써 지는 볼펜을 개발하느라 엄청난 비용과 노력을 들였는데, 소련의 우주 비행사들은 우주에서 연필을 사용하고 있었다는 이야기가 있습니다.

열심히 연구해서 우주에서 써 지는 볼펜을 만들어 내는 것과 연필을 생각해 내는 두 가지 방법 중 어느것이 더 좋은 방법인지에 대해서 여러가지로 생각해 볼 수 있겠지만, 제 생각엔 연필이라는 기존에 해결 가능한 방법을 생각해 내는게 더 멋지다고 생각하거든요.

연필을 먼저 생각해 낼 수 있었다면, 필기구때문에 불필요하게 투자되는 시간과 비용을 없앨 수 있었겠죠. 연필을 생각해 낼 수 있다는 것과 연필을 생각해 낼 수 없다는 것은 어마어마한 능력의 차이가 있다고 생각합니다.

적어도 프로그래밍에 있어서는 쉬운 해결책을 생각할 수 있는게 능력이 아닌가 싶습니다. 똑같은 프로그램도 코드를 간결하고 간단하게 쓰는게 실력이고 능력이 아닌가 싶어요.

여담이지만, 제 블로그의 예전에 썼던 했던 글 중에 ‘자바로 다이아몬드 만들기’의 글에서 댓글로 달아주신 화현님의 코드를 보고 좌절감을 느낀적이 있습니다. 제것보다 훨씬 깔끔하고 간결 했거든요. 아직도 무언가를 만들어 낼때 지저분하게 늘어지는 제 코드를 보고 있자면, 가끔은 제가 많이 부족하다는 느낌이 들곤 합니다.

위에 링크 해 놓은 블로그의 글에도 써 있듯이, 원문을 읽어보시면 재미있는 댓글들을 볼 수 있으니 저 역시 원문도 한번 읽어 보시는 것을 추천합니다.S