비루한 코딩 실력으로 이것저것 하다 보면 막히는 경우가 자주 있다.
(사실 이런걸 감히 코딩 이라 해야하는지도 의문이다)
전공으로 배우기라도 했다면 교수님에게나 학과 친구에게 물어라도 볼텐데 그것도 여의치 않고
알게된 업계종사자나 회사 동료에게 물어보자니 개인적 부탁의 영역이고 묻는다 하여도 상시로 물어볼 수 있는 것은 아니다.
결국 의지하게 되는 것은 구글을 통해 나와 유사한 사례의 문제를 겪은 이를 찾아 참고하는 것인데,
이러한 과정에서 고무오리 해결법 이라는 단어를 알게 되었다.


코딩 호러의 이펙티브 프로그래밍 - 8점
제프 앳우드 지음
임백준 옮김
위키북스


고무오리 해결법 은 Stackoverflow의 창시자인 제프 앳우드의 저서 <코딩호러의_이펙티브_프로그래밍>의 나오는 말이다.
해당 서적은 소프트웨어 개발과 관련된 지혜와 조언을 담은 책이긴 하나 읽다보면
소프트웨어 개발 분야와 상관 없이 탄성이 나올 정도로 인상 깊은 내용이 많다.

고무오리 해결법은 거창한 것이 아니다. 이 방법은 “해결법”이라고 말헀지만
사실은 “질문법”에 가깝다. ‘좋은 질문에 좋은 답이 온다.’라는 말이 있듯이 고무오리 해결법은 질문하는 법에 대해 이야기한다.
(이는 비단 질문뿐아니라 모든 글쓰기에 해당하는 부분인 것 같기도하다.)

우린 보통 문제가 생기면 질문을 한다. A라는 문제가 발생하여 진행이 막혔을 때 우리는 해답을 찾기 위해 질문 한다.
나같은 경우 구글이 되었던 네이버 지식인이 되었던 검색을 해보고 이것저것 뒤져도 답이 안나왔을 때 질문을 던진다.
보통 질문은 아는 그룹 혹은 지인, 커뮤니티에 하게되는데 이때 고무오리 해결법 이 필요하다.

고무 오리 문제 해결법은 다음과 같다.
자신의 문제를 고무오리(무언가) 에게 설명하기

  • 문제가 발생한다.
  • 문제를 질문하기로 한다.
  • 내 질문을 적어보고 고무오리(가상의 존재)에게 설명해본다.
  • 질문 자체의 문제점 혹은 놓쳤던 부분을 파악 한다.
  • 어떻게 질문해야 하는지에 대해 약 15분 정도 생각해 본다.
  • 내가 완전히 엉뚱한 방향에서 문제를 접근하고 있었다는 사실을 깨닫는다.
  • 처음부터 다시 시작하다가 금방 해답을 얻거나 정확한 질문을 할 수 있게 된다.

자신의 의문을 가시화 하여 나열하면 문제점을 쉽게 찾을 수 있다.
사실 이러한 것은 생각보다 실천하기 어렵다.
개발자에게 질문할 때 이러한 방법을 쓰면 아주 좋다.

나같은 경우 무조건 질문하고 보는 스타일이였는데
스스로 이렇게 생각하였다. ‘나는 프로그래밍에 대한 지식이 부족하고 그들은 전문가이니 내 문제를 해결 할 수있을 거야’
물론 그들은 해결 할 수는 있다. 하지만 해결하기 위해선 제대로된 질문이 필요하다.

가령 내가 예전에 했던 주로 했던 질문 같은

A 안되는데 도와주세요.

라는 질문은 아주 잘못된 질문이다.

A를 하고 있는데 B라는 방법으로 진행했는데 C라는 오류가 발생해요. A에서 D라는 기능만 사용하면 되는데 B방법 말고 다른 방법이 있을까요?

이렇게 질문을 정리하여 ‘도움을 주려는 이’가 불필요한 시행착오를 하지 않도록 돕고
현재 상황과 내가 필요한 것이 무엇 인지 알게끔 하는 것이 중요하다.

이는 일반적 질문 방법에서도 아주 유용하다.
무작정 질문하는 것이 아닌 자신이 처한 상황과 해당 질문의 답으로 필요한 것을 명확히 말하면
해답 역시 명확하게 온다. 물론 가장 좋은 방법은 고무오리와의 대화에서 바로 정답을 찾는 것이다.

본 책에선 아래의 일화로 고무오리와의 대화에서 정답을 찾는 것을 보여준다.

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

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

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

오리에게 질문을 하는 도중에 해결책이 머릿속에 떠올랐다. U자형 걸이는 철심의 길이 정도 위에 있는 구조물에 고정돼 있다. 파이프 배관공이 걸이가 파이프 위에 달라붙도록 철심을 자르면 결국 그것이 파이프를 붙잡아서 걸이가 튀어 오르는 것을 막아줄 것이다. 나는 밥을 바라봤고 밥은 고개를 끄덕였다. “이제 알겠지, 응?” 그가 말했다.

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

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

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

“일단 질문을 던지기 시작하는 것은 실제로 자신의 문제를 스스로 디버깅하는 데 도움을 준다.” 라는 말로 해당 부분을 정리했지만 개발자 뿐아니라 모두에게 적용되면 좋은 말인 듯 하다.

<코딩호러의_이펙티브_프로그래밍>라는 책은 제목 그대로 '효율적인 코딩'을 위해 작성된 책이다.
하지만, 책을 읽는 내내 많은 분야에서 유효한 조언과 효율적인 사고방식을 던져준다.

개발자이거나, 개발자와 함께 일하거나 개발자에 관심이 있다면 읽어두면 아주 좋은 책인 것 같다.