콘텐츠로 건너뛰기

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

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

프로그래머의 딜레마
프로그래머의 딜레마

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

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

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

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

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

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

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

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

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

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

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

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


17 개의 댓글

  1. 연필과 우주사용가능 펜은 느낌이 좀 다르지만요. 🙂
    위에서 보기엔 효율이 좋아보이는거보다 열심히 하는 사람이 눈에 들어오는 법이라. ^^

    1. 열심히 하는 사람이 더 눈에 들어오기는 하죠^^ㅋ
      “훌륭한”씨도 마냥 노는 모습 보다는, 쉬운 해결책을 발견하기 위해 머리를 싸매고 고생했다는 것을 매니저에게 어필할 수 있었다면 퇴직을 당하는 최악의 상황까지는 오지 않았을텐데 말이죠.

      덧, 연달아 2개 등록된 똑같은 댓글 중 하나는 삭제했습니다^^

  2. 그 밑에 또 글이 하나 있네요. 대충 내용은, “훌륭한 프로그래머는 누군가는 그 진가를 알아준다”가 되려나요. 하여간 개발자의 길은 복잡하고 험난하군요.

  3. 논쟁의 여지가 있어보이네요.
    제 경우 후자의 훌륭한 프로그래머라고 전재한 타입의 경우 정말 화가나더군요
    전혀 훌륭한 프로그래머라 할수가 없습니다.
    정말 천재로 처음부터 모든 문제의 해결과 완벽한 구현이 가능한 천재가있을지 의문이지만 그렇다고해서 수없이 새롭고 다양한 기술들이 빠르게 나오는 컴퓨터를 컨트롤해야하는 프로그래머로써 훌륭한 프로그래머는 무엇일까요?
    그건 무엇보다 노력하고 그 노력을 결실로 맺을수있는 사람이 아닐까 생각합니다.
    첫번째 열심히인 프로그래머의 경우 기본적 소양이 부족한지는 모르겠으나
    같은 타입의 또다른 문제가 다시 왔을때 똑같은 시간이 걸릴수는 없습니다.
    그것이 경력이 인정받는 이유이구요.
    컴퓨터 기술과 기반 OS의 변화와 하드웨어의 파이프라인의 변화는
    한 개인이 처음부터 감당할수있는 문제가 아니며 수많은 영향권하에서 프로그래밍하는것에서 모든 변수를 경험해보기전에 알고있을수없는거죠
    그럼에도 그문제의 인식과 해결을 마무리하고 스스로 노력하는 사람이
    또다른 문제에 봉착하였을시 적극적인 노력을 하게되고 경험은 그문제들을
    향한 대책을 더 빠르게 찾아갈수있는것이죠.
    두번째의 훌륭한프로그래머라고 전재한 사람은 기본적으로 과시형이며
    약삭빠른사람이죠. 문제의 해결을 알고있으면서 주어진 기간동안을 최대한 이용하기위해 잔머리만 굴린격이죠. 자신의 능력을 보여주는거라고 볼수도있지만
    결국은 그 사람의 됨됨이를 보여준 모습밖에는 않되는거죠.
    사람이 자기의 이익도 챙길수 있어야하는 것은 맞습니다만..
    문제는 그 모습을 들킨것에 더 문제가 있는거겠죠.
    영악하게 굴려면 좀더 철저하게 그리고 헛으로라도 노력하는듯 모습을 보여주던지
    자신의 이미지 메이킹에 실패한 사람이 되버린거같네요
    분명 당장은 두번째의 경우가 프로그래머로써 더 능력은있는 사람일수는 있습니다만 첫번째 사람이 당연히 회사에선 훌륭한사람이고 훌륭한프로그래머가되기위해 노력도 더 많이 할수있는 사람같네요

    1. 원문 댓글에 “열심히”씨와 “훌륭한”씨의 차이를 문제 해결 스타일의 차이로 보시는 분도 있더라구요.
      똑같은 문제에 직면 했을때,
      “열심히”씨는 문제에 직접 부딧쳐 가며 해결하고 수정해 가는 스타일이고, “훌륭한”씨는 문제에 직면하면 기존의 방법을 보류하고 새로운 해결책을 다각도로 연구하는 사람이라고 하는 글이 있더라구요.

      “훌륭한”씨가 진짜로 2개월간 마냥 논 것인지, 논 것처럼 보여진 것인지는 잘 모르겠습니다.

      호박나무님 말씀대로 논란의 여지가 많은 글은 맞는것 같습니다. 원문에서도 댓글을 통해 의견이 분분하거든요. 제 경우엔 프로그래밍 스타일은 “열심히”씨에 더 근접하지만, “훌륭한”씨의 방법이 좀 더 멋지다는 생각을 하고 있는 편이라..ㅎㅎ

      호박나무님의 댓글의 이미지메이킹 실패는 저 역시 완전 동감하고 있습니다^^ㅋ

  4. 핑백: 라온수카이's てがみ

  5. 헉 저는 “훌륭한”쪽이였나요!! 그럼 저의 미래는 가난한 실직자? OTL
    음음, 어째튼 글만 봤을때는 “훌륭한”프로그래머가 밉보이긴 했네요 “2달반”동안 노는모습을 보이고 마지막 반개월만에 해치워서 보여준걸 보면…
    저라면 낼름 만들어서 낼름 보여주겠습니다 -_-;;

    1. 화현님은 미래의 가난한 실직자…ㅎㅎㅎ
      아니, 그런식으로 해석해 버리시면 어떠해욧!!ㅎ
      민망하게..ㅋ

  6. 훌륭한 개발자가 열심히까지 한다면 정말 좋겠지요. 생각해보면, 훌륭한 개발자보단 열심히(성실히)하는 개발자가 더 드문것 같습니다. 머리는 찻으나 마음이 비엇다라고 해야하나. 잘읽었습니다~~꾸벅

    1. 그렇군요. 즉, “훌륭한”씨와 “열심히”씨를 적절하게 믹스 했을때가 금상첨화라는 말씀이시군요!!ㅎㅎ

  7. 음.. 후자쪽은 실력은 있을지 몰라도
    그리 훌륭하다고 하기가 뭐하네요..

    그리고 스페이스펜 같은 경우..
    연필은 흑연이 날리기도 하고 (우주니까 떠다니겠죠).
    게다가 흑연은 도체입니다. 기계에 들어가면 무슨 일이 생길지 모르죠.
    우주선에 문제가 생긴다고 밖으로 도망친다던가 할수있는게 아니니만큼
    최소한의 문제라도 있을때에 대비해서 만들었다고 알고있습니다.

    1. 연필의 흑연 이야기를 뒤늦게서야 알아버렸네요. 루돌프님이 말씀하신 그런 이유로, 현재 연필은 사용되지 않는다고 하네요.

  8. 정리해서 다시씁니다.
    후자의 훌륭한씨가 특별히 문제 될것은 없다고 생각됩니다.
    그리고 왜 훌륭한씨한테 화가 나는지도 모르겠네요..
    무슨일을 하던 계약한기간이 있는건데 그기한안에 일만 마쳐주면 되는거 아닐런지요..
    1달짜리일을 하루에 했다고 하루일당만 받고 나가시겠습니까?

    ‘첫 2달 반을 빈둥거리며 지냈다.’ 이대목에서 화가나나봅니다…
    정말 알수없는일이지요..
    훌륭한씨가 처음부터 리스크를 꽤뚫고 해결책을 찾고 있었는지는요.

    ‘훌륭한 프로그래머는 가난하다. 훌륭한 프로그래머의 딜레마인 것이다.’
    글의 요지도 비아냥 아닌지요..
    막말하면 훌륭하게 코딩할 필요없다는거지요.. 훌륭한씨처럼 가난해질테니까요..
    리스크를 꽤뚫고 더 좋은 알고리즘을 생각해 150줄로 줄여도..
    결국은 밥그릇 뺏길뿐이라는 비아냥아닌가요..

    그냥 열심히씨처럼 창의성같은건 버려둔채 열심히하다 문제생기면 기간늘려달라
    하는게 더 보기 좋으니까요..
    물론 저역시 후자의 훌륭한씨보단 전자에 가깝지만요..

    무조건 열심히 하고.. 오랜시간 앉아있는 개발자가 좋은개발자란 생각이…
    조금은 아쉽네요..

    1. 제가 자주 보고 있는 루미넌스님의 블로그에도 비슷한 뉘앙스의 글이 등록되어 있네요.
      http://basher.pe.kr/tt/lumi/184
      로버트 D.오스틴의 “측정역기능”이라는 말을 본문에 적어 주셨는데, 지적 노동자의 성과를 측정하려 하면 오히려 모든 성과와 체계가 붕괴해 버릴 수 있다는 것이라는군요.

      그렇다고 해서 ‘열심히’씨가 성과를 보여주기 위해 마구잡이 식으로 코드의 분량을 늘린 것은 아니지만, 지적 노동을 하는 ‘열심히’씨와 ‘훌륭한’씨의 성과를 마음대로 점수매겨 버린 매니져가 안타깝습니다. ‘열심히’씨와 ‘훌륭한’씨는 그렇게 하지 않았지만 분명 다음번에 매니저와 일 하게될 사람 중 약은 프로그래머가 있다면, 매니져의 평가 방식에 맞춰 높은 평가를 받기 위해 마구잡이식 코드 늘리기에 힘쓰게 될지도 모르겠습니다.실직자가 되지 않기 위해서요…안습….;;;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다