gimmesilver's blog

Agbird.egloos.com

포토로그



어렵게 문제 풀기 단상

 대충 많은 분들이 짐작하셨듯이 지난 주에 낸 문제 는 간단한 답이 있는 문제를 일부러 어려운 척 설레발 친 겁니다. 답은 아래와 같습니다.
 믾은 분들이 넌센스아니냐고 하셨지만 결국 문제의 본질은 작도법이 아니고 땅을 분할하는 방법이기 때문에 넌센스가 아닙니다. 그저 낚시질 좀 했을 뿐입니다...-_- 변명하자면 이 문제는 패러독스의 세계라는 책에 나오는 문제들 중 하나를 각색한 것입니다. 책에서 저자는 왓슨과 홈즈의 이야기를 들려줍니다. 

 탐정 생활을 은퇴한 후 전원 생활을 하는 홈즈에게 왓슨이 찾아옵니다. 왓슨은 홈즈에게 그가 그렇게 유명해진 이유는 사건의 난해함 때문이 아니라 오히려 해결책의 단순함 때문이었다고 말하죠. 다시 말하면 대중은 답을 알기 전에는 매우 어려워 보이지만 사실 매우 단순한 해결책이 있는 문제를 접할 때 흥미를 느낀다는 겁니다. 만약 홈즈의 해결책이 복잡한 이론적 배경을 필요로 할 정도로 복잡했었다면 그가 그렇게 유명해지지 못했을 거라고 말합니다. 그러면서 왓슨은 홈즈에게 그가 지금까지 해결했던 사건들처럼 알고보면 너무나 명백해서 이것이 답인지 따로 검증할 필요가 없지만 답을 알기 전에는 매우 어려워 보이는 문제 여섯 가지를 냅니다. 홈즈는 다른 어려운 문제는 쉽게 해결하지만 저 땅 분할 문제만큼은 밤새도록 골몰했음에도 풀지 못합니다.
 부끄럽지만 저도 못 풀었습니다. 저는 심지어 아마 저 문제는 비유클리드적으로 풀어야 하지 않을까? 뭐 이딴 생각을 하면서 종이에 정사각형을 그려놓고 이리 저리 종이를 접어보기도 하고 네 귀퉁이가 모이도록 둥글게 휘어보기도 하면서 온갖 뻘짓을 다했었죠...

 아니 무슨 저 따위 문제에 낚여서 파닥거리나...뭐 이렇게 어이없어 할 수도 있겠지만 저는 일을 하면서도 비슷한 경험을 한 적이 많습니다. 이를 테면 아래 프로젝트가 한 예입니다.

 이전 회사에서 이동 통신용 데이터 분석 프로그램을 개발했습니다. 와이어샤크처럼 데이터를 캡쳐해서 여러 가지 이동 통신 특성에 맞는 분석 결과를 보여주는 윈도우 기반의 프로토콜 분석기였죠. 보통 분석이 필요한 IDC가 있으면 먼저 서버에서 데이터를 미러링했다가 나중에 가지고 와서 해당 프로그램으로 분석을 하곤 했습니다. 그런데 이런 방식이 너무 불편하다보니 이동 통신 담당자가 그냥 미러링하는 서버에 분석 프로그램을 설치하고 필요할 때마다 노트북으로 미러링 서버에 접속해서 즉석에서 데이터를 분석할 수 있게 해달라고 요청했습니다.
 이를 위해 회사에서는 분석 프로그램을 서버-클라이언트 방식으로 수정하기로 결정했습니다. 그런데 그 당시 그 프로그램을 개발했던 팀장님과 저는 다른 프로젝트 때문에 그 프로그램을 수정할 여력이 없었는데다가 회사 내에 그 프로그램을 수정할 만한 다른 윈도우 프로그래머가 없었습니다. 결국 여력이 있는 다른 리눅스 개발자들이 해당 프로그램을 리눅스 버전으로 포팅해서 수정하기로 결정했죠. 말이야 간단하지만 그 많은 프로토콜 분석용 라이브러리들을 다 포팅한다는 것은 정말 어마어마한 작업이었습니다. 
 자세한 건 잘 기억나지 않지만 그렇게 작업은 진행되었습니다. 꽤 많은 시간이 지났고 그 포팅 작업은 점점 산으로 가 완전히 새로운 시스템 개발 프로젝트가 됐습니다. 그 때쯤 되면 원래의 목적은 온데간데 사라지고 그저 회사 브로셔에 새로운 정체불명의 솔루션이 추가되죠. 암튼 그 프로젝트가 거의 끝날 무렵 한 팀장님이 이러시더군요. '가만...근데 그 때 그 서버에 접속해서 데이터 분석할 수 있게 해달라고 했던 거 말이야...그냥 윈도우 원격 접속 기능 이용하면 되는 거 아니었나?'
 예...저희는 그 동안 정사각형을 다섯 등분하기 위한 작도법을 개발하고 있었습니다.

 이런 일도 있었습니다. 팀 동료 한 분이 웹 페이지용 파서를 개발하고 있었는데 여러 가지 웹 페이지 형태에 따라 적합한 템플릿을 적용해서 메타 정보를 추출하는 기능을 구현하고 있었습니다. 이 때 매 페이지를 분석할 때마다 해당 페이지에 가장 적합한 파싱 템플릿을 추출하기 위해 템플릿 정보를 담은 객체마다 점수를 매기고 이 중에서 최대값을 가진 객체를 선택해야 했습니다. 이를 위해 템플릿 객체들을 매번 정렬을 하자니 너무 부하가 클 것 같아 좀 더 효율적인 방법이 뭘까 고민하더군요. 저는 여기에 바로 낚여서 특정 값 범위로 그룹을 나눠서 관리하고 그 중 가장 큰 그룹만 정렬하면 좀 더 효과적이지 않을까 뭐 이러면서 한 10분 정도 열띤 논의를 했습니다. 그런데 갑자기 그 팀 동료가 말하더군요...'가만...최대값을 가진 객체만 알면 되는데 왜 굳이 정렬하려고 했지?'

 정확한 사례를 기억할 순 없지만 이런 비슷한 경험은 그 외에도 많이 있었습니다. 아마도 어떤 문제를 해결할 때 순간 떠오른 해결 방법을 구체적으로 기술하는 과정에서 그 방법 자체가 가진 문제를 해결하느라 원래 문제의 본질을 잊고말았기 때문이 아닌가 싶습니다. 이야기에 나오는 측량기사는 땅을 분할하기 위해선 작도를 해야 한다는 생각에 얽매였기 때문에 죽을 때까지 문제를 해결하지 못했던 것이고 이전 회사 사람들은 '서버에 접속하는 거니 서버-클라이언트 모델이지(웹 서비스 모델을 생각하지 않은게 천만 다행입니다)' 뭐 이랬던 거고 팀 동료(와 저)는 효율적인 정렬 방법에 신경을 쏟은 것이죠.

 디버깅할 때도 이런 비슷한 경험을 합니다. 언뜻 보기에 굉장히 복잡한 문제가 있는 것 같아 열심히 산으로 갔는데 나중에 알고보면 간단한 실수로 인한 적이 많이 있죠. 회의를 할 때도 그렇습니다. 열띤 토론을 하다보면 원래 문제는 까마득히 잊습니다. 그리고선 서로의 주장과 반박에 대해 대응에 대응을 거듭하다보면 어느새 산 꼭대기에서 노를 젓고 있는 거죠. 
 이제는 워낙 이런 삽질을 한 적이 많다보니 문제 해결 과정이 지나치게 복잡해질 때면 아차 싶어 처음으로 돌아가 다시 생각하곤 합니다만 그럼에도 불구하고 여전히 비슷한 실수를 할 때가 많습니다.

 때론 반대로 어떤 문제를 너무 쉽게 해결해놓고선 이게 정말 해결책이 맞는지 의심스러울 때가 있습니다. 이와 관련해서  대체 뭐가 문제야 라는 책에는 다음과 같은 글귀가 있습니다.

만약 문제를 너무 쉽게 해결한다면, 문제를 제시한 사람들은 결코 당신이 진짜 문제를 해결했다고 믿지 않을 것이다.

 넌센스스런 답을 찾긴 했는데... 이렇게 댓글을 다신 분들은 어쩌면 이런 심리가 약간이나마 있었는지도 모릅니다. 위의 네트워크 분석 프로젝트 사례의 경우도 회사내에 누군가는 프로젝트 시작 전부터 윈도우 원격 접속 방법을 생각했지만 웃음거리가 될지도 모른다고 생각에 이야기를 하지 않았을 지도 모르죠. 

 그래서 사실 전 문제를 어렵게 해결하는 것보다 쉽게 해결하는게 더 어렵다는 생각을 할 때가 많답니다.

 p.s. 저에게 낚이신 많은 분들께 사죄의 의미로 위 책에 나온 다른 문제를 내보겠습니다. 전 이 문제를 풀었는데 초등학교 시절 자연 수업에서 배운 내용이 도움이 되었습니다. 문제는 아래와 같습니다.

 한 남자가 어느 날 익명의 편지를 받았다. 편지에는 오늘 밤 자정에 공동 묘지에 있는 납골당으로 나오라는 내용이 적혀 있었다. 그 남자는 누군가의 장난이라 생각했지만 호기심에 편지의 내용대로 납골당에 가보기로 결정했다. 자정 무렵 그가 납골당에 도착했을 때 거기에는 아무도 없었고 단지 초승달만이 희미한 빛을 비추며 그를 반기고 있을 뿐이었다. '제길 낚인건가...' 이런 생각을 하며 집으로 돌아가려는 순간 뒤에서 질질 끄는 발걸음 소리가 들렸다. 그리고...
 다음날 그 남자는 마치 조커마냥 무서운 미소을 띤 채 시체로 발견되었다. 그렇다면 이 남자는 1904년에 있었던 미국 대통령 선거 때 루즈벨트에게 투표를 했을까?


핑백

  • gimmesilver's blog : 지난 번에 낸 퀴즈 답 2009-01-24 11:12:27 #

    ... 먼저 어렵게 문제 풀기 글에서 낸 '납골당 살인 사건' 문제의 답은 '살해당한 남자는 루즈벨트에게 투표하지 않았다.' 입니다. 그 이유를 설명하기 위해 원래 글을 다시 인용해보면...& ... more

덧글

  • 2009/01/18 22:11 # 답글 비공개

    비공개 덧글입니다.
  • 2009/01/18 22:17 # 답글 비공개

    비공개 덧글입니다.
  • silverbird 2009/01/19 22:20 #

    거의 맞추셨습니다.
  • 세라비 2009/01/18 22:58 # 삭제 답글

    문제를 제대로 정의하지 않고 해결하려고 시도해 헤메는 경우를 종종 보게 되네요.
  • silverbird 2009/01/19 22:20 #

    그러게말입니다...반성하겠습니다...-_- a
  • 2009/01/19 09:47 # 삭제 답글 비공개

    비공개 덧글입니다.
  • taewook 2009/02/11 10:04 # 삭제 답글

    최대값 삽질이 오랜만에 기억나네요. ㅎㅎ
  • 2010/05/17 15:07 # 삭제 답글 비공개

    비공개 덧글입니다.
댓글 입력 영역