고무오리 문제 해결법

등록일: 2014. 10. 15

우리는 스택 익스체인지에서 질문을 하려는 사람에게 질문을 하려면 일정한 노력을 기울일 것을 요구한다. 약간 짓궂게 구는 것이다. 그래서 질문을 올리는 사람은 다음과 같은 조건을 충족해야 한다.

  • 질문을 읽는 사람들이 충분히 이해할 수 있게 자세한 내용을 모두 적어야 한다. 당신이 종사하는 분야에 대한 전문가가 아닌 사람도 어떤 일이 벌어지고 있는 것인지 감을 잡을 수 있게 배경지식도 함께 서술하라.
  • 해당 질문에 대한 답이 왜 필요한지 밝혀라. 그 질문을 하러 여기까지 온 이유가 무엇인가? 단순한 호기심 때문인가, 아니면 그것 때문에 프로젝트의 진행이 막힌 상태인가? 당신의 삶 전체를 돌아보는 장황한 이야기는 필요 없다. 문제를 둘러싸고 있는 기본적인 문맥을 이해하는 데 필요한 정보만 서술하라.
  • 문제를 해결하기 위해 이미 수행한 연구과정이 있으면 그 내용을 밝혀라. 발견한 내용이 있으면 그것도 말하라. 스스로 아무런 연구도 하지 않았다면 질문을 꼭 해야 하는 것일까?
  • 이러한 요구는 궁극적으로 공평함 때문이다. 당신이 우리에게 소중한 시간을 들여서 당신을 도울 것을 요청하고자 한다면 우리가 당신에게 질문을 매끄럽게 다듬는 데 당신의 소중한 시간을 투자하라고 요구하는 것은 정당하다. 우리가 당신을 도울 수 있게끔 우리를 도와달라는 말이다!

우리는 이러한 사항을 자세하게 설명하기 위해 질문을 던지는 방법을 정리한 페이지를 마련해 뒀다. 그 페이지는 네트워크를 통해 여러 곳에 링크돼 있다. (그리고 스택 오버플로우는 엄청난 분량의 질문이 쏟아지고 있기 때문에 처음 접속한 사용자가 첫 질문을 올리기 전에 이러한 페이지의 내용을 모두 읽고 클릭하길 요구한다. 브라우저에서 익명 사용자 모드로 질문하기Ask Question를 클릭해도 이 페이지의 내용을 볼 수 있다.

우리가 막으려고 하는 형태의 질문은 무엇보다도 정상적이지 않은 별도의 목적을 가지고 있으며, 적절한 대답이 있을 수도 없는 종류의 질문이다. 그러한 질문은 누구에게도 도움이 되지 않고 대개 아무런 답변도 없는 상태로 남아 있기 때문에 Q&A 사이트를 오염시켜서 유령도시로 만드는 존재에 불과하다. 스택 오버플로우에서는 질문 자체가 담고 있는 정보나 문맥이 부족해서 적절한 답변이 나올 수 없는 것으로 판단되면 그러한 질문을 곧바로 닫아버리고, 만약 그 질문이 오랫동안 개선되지 않은 상태로 남아있으면 결국 삭제한다.

이미 말했듯이 우리는 짓궂게 행동하기를 즐긴다. 하지만 그렇게 하는 데는 합당한 이유가 있다. 우리는 당신에게 고무오리 문제 해결법을 가르쳐줌으로써 당신이 스스로 도울 수 있게 만들어 주려는 것이다. 그리고 그 방법은 확실히 효과적이다. 나는 지난 몇 년 동안 사람들이 스택 오버플로우나 다른 스택 익스체인지 사이트에 질문을 빠짐없이 자세히 적는 과정에서 어떻게 자신이 가진 문제의 답을 찾을 수 있었는가에 관한 피드백을 어마어마하게 받았다.

이것은 매우 흔한 일이다. 한번 생각해보라.

내가 스스로 문제를 해결했을 때 커뮤니티에 어떻게 고마움을 표시할 수 있을까?

나는 지금까지 질문을 한 개 올렸고, 또 다른 질문은 거의 올릴 뻔 하다가 말았다. 그런데 두 경우 모두 나는 질문에 대한 답을 최소한 부분적으로는 글을 올리는 과정 자체를 통해 찾을 수 있었다. 나는 해답을 스스로 생각해 낼 수 있도록 도와준 커뮤니티와, 글을 올리는 절차 자체에 대해 고마움을 표하고 싶다. 글을 올리는 과정 자체가 해답을 명확하게 밝혀주는 것은 아니지만 내 생각을 글로 적는 행위는 나로 하여금 더 깊게 사고하도록 만들었다.

질문을 적절하게 구성하는 것 자체가 해답을 낳는 경우가 종종 있는 이유는 뭘까?

나는 이러한 일이 얼마나 자주 일어났는지 모르겠다.

  • 문제가 있다.
  • 그 문제를 스택 오버플로우에 올리기로 한다.
  • 내 질문을 엉성하게나마 적어서 올린다.
  • 내 질문이 말이 되지 않는다는 사실을 발견한다.
  • 어떻게 질문해야 하는지에 대해 15분 가량 생각해본다.
  • 내가 완전히 엉뚱한 방향에서 문제에 접근하고 있었다는 사실을 깨닫는다.
  • 처음부터 다시 시작하다가 금방 해답을 얻는다.

이러한 일이 일어난 적이 있는가? 바로 이러한 일들이 일어나기 때문에 올바른 질문을 던지는 것 자체가 해답으로 이르는 길의 절반에 해당하는 것처럼 보이기도 한다.

일단 질문을 던지기 시작하는 것은 실제로 자신의 문제를 스스로 디버깅하는 데 도움을 준다.

실질적인 답변을 얻기 위해 질문 자체의 의미가 명료하게 드러나고 최대한 자세한 내용이 담기게끔 노력하는 경우라면 특히 그렇다. 이런 일이 당신에게도 일어난 적이 있는가?

이것은 새로 발견된 개념이 아니다. 시간이 충분히 흐르면 거의 모든 커뮤니티가 이와 동일한 결론에 도달하는 것처럼 보이기도 한다. 즉, “오리에게 물어보기”는 문제를 해결하기 위한 대단히 강력한 기법이라는 사실을 깨닫게 되는 것이다.

밥은 사무실 구석을 가리켰다. “저기에” 하고 그가 말했다. “오리가 한 마리 있지. 일단 저 오리에게 질문을 해보게.”

나는 오리를 바라봤다. 그것은 사실 인형 오리로, 살아있는 오리가 아니었다. 설령 그것이 살아있었다고 해도, 코드 설계와 관련된 정보를 얻을 만한 곳으로는 적당하지 않았을 것이다. 나는 다시 밥을 바라봤다. 밥은 장난을 하는 것이 아니었다. 그는 나의 상사였으므로 나는 내 자리를 지키기 위해서라도 이 일을 해야만 했다.

나는 엉성한 자세로 오리에게 다가가 고개를 숙였다. 마치 기도를 하기라도 하는 것처럼 오리를 향해 다가섰다. “이봐,” 밥이 말했다. “뭘 하려는 거야?”

“오리한테 질문을 하려고 하는데요.” 내가 말했다.

밥의 부하직원 중 한 명이 사무실 안에 있었다. 그는 이를 쑤시면서 악당 같은 미소를 짓고 서 있었다. “앤디” 하고 그가 말했다. “나는 자네가 오리한테 기도를 하길 바라는 게 아냐. 자네가 오리한테 질문을 던졌으면 해.”

나는 입술에 침을 묻혔다. “큰 소리로 말이에요?” 내가 말했다.

“큰 소리로.” 밥이 엄숙한 표정으로 말했다.

나는 목소리를 가다듬었다. “이봐 오리야,” 하고 나는 시작했다.

“그 친구의 이름은 밥 주니어라네.” 밥의 부하직원이 끼어들었다. 나는 그를 잠시 쏘아봤다.

“오리야,” 하고 나는 계속했다. “U자형 걸이를 사용할 때 말야, 머리 부분을 밖으로 꺼낼 때 스프링클러 파이프가 걸이에서 튀어 오르는 것을 막는 방법이 도대체...”

오리에게 질문을 하는 도중에 해결책이 머릿속에 떠올랐다.

U자형 걸이는 철심의 길이 정도 위에 있는 구조물에 고정돼 있다. 파이프 배관공이 걸이가 파이프 위에 달라붙도록 철심을 자르면 결국 그것이 파이프를 붙잡아서 걸이가 튀어 오르는 것을 막아줄 것이다.

나는 밥을 바라봤고 밥은 고개를 끄덕였다. “이제 알겠지, 응?” 그가 말했다.

“철심이 파이프 위로 지나가게 하면 될 것 같아요.” 내가 말했다.

“맞아.” 밥이 말했다. “다음에 질문할 게 있으면 우선 이곳으로 와서 내가 아니라 오리에게 질문하길 바라네. 큰소리로 물어야 해. 그래도 해답을 알 수 없으면 그땐 나한테 와서 질문해도 좋아.”

“알겠습니다.” 나는 그렇게 대답하고 다시 일하러 내 자리로 돌아갔다.

나는 이 이야기를 매우 좋아한다. 이 이야기는 고무오리를 통해 문제를 해결한다는 방법의 핵심이 진지한 태도로 상상 속의 사람이나 사물을 향해 철저하고 상세한 질문을 던지는 데 있다는 사실을 선명하게 드러내기 때문이다. 그렇다. 심지어 자기가 바보 같은 실수를 저질렀다는 사실을 깨닫고 다른 사람에게 질문하려는 시도 자체를 포기하는 경우에도 이런 방식은 도움이 된다. 상상 속의 누군가에게 자신의 질문을 단계별로 자세하게 설명하는 것은 그 자체로 당신을 해결책으로 인도하기 때문이다. 하지만 문제를 이렇게 전체적으로 설명해보고 해결책을 찾기 위해 어떤 식으로 접근할지를 따져보고 싶은 마음이 없다면 다른 사람에게 질문을 던지기에 앞서 스스로 자신의 문제에 대해 깊게 생각해보는 기회를 갖기는 어렵다.

옆에 코딩 친구가 없다면 (사실 코딩 친구가 꼭 있어야 하겠지만) 이처럼 고무오리 문제 해결법을 통해 자신의 문제를 스스로 해결할 수 있다. 혹은 위대하신 인터넷 커뮤니티를 활용해도 좋다. 원하는 답변을 얻지 못하더라도 자신의 문제를 자세하게 (가급적 글로) 설명하는 과정은 새로운 통찰과 발견으로 당신을 안내할 것이다.