728x90
반응형

출처 : http://thoughts.chkwon.net/feynman-algorithm/

 

미국의 유명한 물리학자 리처드 파인만은 다음과 같은 ‘일반적인’ 문제 해결법을 제시 했다.

1. Write down the problem.

2. Think real hard.

3. Write down the solution.

 

1. 문제를 쓴다.

2. 열심히 생각한다.

3. 답을 쓴다.

 

 

 

한 십년쯤 전에 이 걸 처음 봤을 때는, 황당하다고 생각했고, 파인만 같은 천재들에게나 해당하는 문제 해결방법이라고 생각했다. 몇 년 후 시간이 흘러서, 대학원생일 때 이걸 다시 봤을 때는 2번 항목에 감명을 받았었다. 문제를 ‘직접’ 해결하는 방법 중에, 저 방법 말고 다른 방법이 도대체 뭐가 있을까를 생각 했다. 열심히 생각하는 것 이외에 문제를 해결하는 방법은, 답을 아는 사람에게 물어 본다 따위가 있을 수 있겠으나, ‘직접’ 해결하는 방법은 아니다. (물론, 답을 아는 사람에게 물어 보는 해결 방법에서도, 누가 답을 알고 있을 것인지에 대해서 열심히 생각해 봐야 한다.)

2011년, 이제 와서 다시 이 문제 해결방법에 대해서 생각하게 됐다. 여전히 2번에 대해서는 강한 동의를 하고 있지만, 지금 감명 받은 부분은 1번 항목이다.

‘문제를 쓴다.’

이것은 내가 풀어야 할 문제가 정확히 무엇인지를 알고 있을 때만 할 수 있는 것이다. 당연하다. 문제가 뭔지 모르는 데, 문제를 어떻게 쓸 수가 있을까? 그런데, 많은 경우에 우리가 풀고 싶은 문제가 도대체 무엇인지 정확히 알지 못한다. 풀어야 할 문제를 정확히 알고 정확하게 기술할 수 있는 경우는 얼마 되지 않는다. 그래서 아무리 생각해 봐야, “문제”를 풀지도 못 하고, 소위 ‘삽질’만 하게 된다.

파인만이 제시한 문제 해결 방법 1단계, 2단계, 3단계는 같은 크기의 중요성을 갖는다고 생각한다. 두번째 단계가 가장 어려워 보이지만, 실제로는 첫번째도 그에 못지 않게 어려우며, 세번째도 어려움으로는 뒤처지지 않으며 비슷한 수준으로 중요하다.

파인만의 문제 해결 방법은 ‘일반적인’ 경우에도 모두 적용된다고 생각하고, 내가 지금 이야기 하고자 하는, 1단계의 중요성 역시 적용된다고 생각한다. 하지만, 내가 그런 이야기를 할 수 있을 만큼, 인생 전반에 대해서 경험과 내공이 많지 않으니, 그래도 남들보다 조금 더 시간을 투자했다고 할 수 있는, 공부하고 연구하는 것에 대해서 이야기 해 보겠다.

공부를 하면서 만나는 많은 연습 문제들과 시험 문제들은, 1단계를 누군가가 잘 해 놓은 것이다. 문제는 아주 잘 씌여져 있다. 그래서 1단계가 필요없다. 대신, 이런 경우에 1단계는, 문제를 ‘잘’ 읽는 것이다. 그래서 문제가 무엇인지를 정확히 ‘인지’ 해야 한다. 문제를 푸는 방법은 알고 있었는데, 문제를 잘 읽지 않아서, 잘못된 답을 해 본 경험이 꽤 있을 거라고 생각한다. 그래도, 이런 경우에는 조금만 조심하면 1단계는 비교적 쉽게 넘어갈 수 있다.

내가 1단계를 직접 해서, 문제를 써야 하는 경우는 굉장히 어려울 수 있다. 연구를 해서, 논문을 써야 하는 경우를 생각해보자. 많은 연구 초심자들은 (나같이) 도대체 어떤 문제를 풀어야 하는지를 모를 때가 많다. 연구라는 것을 처음 시작하는 사람들은, 아예 감도 잡지 못 한다. 석사과정 학생들에게, 혹은 박사과정 학생들 까지도, 지도교수가 논문 주제를 던져주는 경우가 많은 이유이다. 어떻게 해야 도대체 ‘문제’ 라는 것을 발견할 수 있는 지를 모른다.

조금 감을 잡았다고 해도, 여전히 문제를 정확히 기술 하는 1단계를 통과하기에는 많은 과정들이 남아있다. 예를 들어서, ‘대형 지진 발생 이후의 대처법’ 이라는 것에 대해서 관심이 생겨서 연구를 하기로 했다고 하자. 이것은 ‘연구 분야’가 될 수는 있을 지언정, ‘문제’는 전혀 아니다. (사실 연구 분야라고 부르기에도 너무 범위가 넓다.) 조금 더 범위를 좁혀서 ‘대형 지진 발생 이후의 적절한 구호 물자 운송방법’ 에 대해서 연구를 하기로 했다고 하자. 많이 양보해서 이건 논문의 ‘제목’은 될 수 있어도, 문제는 아직 아니다. 사실, 논문의 제목보다는, 저런 유사한 여러가지 문제에 대해서 기술한 ‘책’의 제목으로 더 적합하다고 생각한다.

이제 범위를 좁혔으니, 무엇이 정말 ‘문제’가 되는지를 알아야 한다. 사실 이것은 쉬운 일은 아니다. 내가 ‘만들어낸’ 문제와 ‘실제로 발생하는’ 문제는 전혀 다를 수도 있기 때문이다. “Financial calculus: an introduction to derivative pricing” 이라는 책의 서문에 보면, 많은 사람들이 잘못된 문제에 정확한 답을 찾기 위해서 헛수고를 하고 있다고 나온다 — finding precise answers to the wrong questions. 파인만 문제 해결법의 첫번째 단계에서 실수를 범했기 때문이다. (거론한 책을 읽어 보지는 않았다. 우연히 서문을 잠깐 읽게 되었고, 저 부분에서 감명을 받아, 기억하고 있을 뿐이다.)

위에서 언급한 지진 발생 이후의 물자 운송방법이라는 주제에 대해서, 있을 법한 문제로는 다음과 같은 것이 있다. (내가 정확히 연구하는 분야가 아니기 때문에, 말이 안 될 수 도 있겠다.)

–  A 라는 빈도로 B 라는 지역에서 구호 물자에 대한 수요가 발생할 때, 얼마나 자주 C 지역에서 B 지역으로 물자를 수송해야 할까?

이것은 ‘문제’ 이다. Problem 혹은 question 이긴 하지만, wrong question 일 수는 있다. 예를 들어서, 실제로 B 라는 지역에서 수요는 A 라는 빈도로 발생하는 것이 아니라, AA 라는 빈도로 발생한다고 하면, 이것은 wrong question 이다.

파인만 문제 해결방법 1단계를 제대로 하지 않은 다른 경우도 있다. 예를 들어서, A 라는 ‘분야’에 B 라는 모델을 적용시켜보았다 라는 논문을 쓸 수도 있겠다. 이것은 문제를 해결한 것이 아니라, 단순히 논문을 한 편 쓴 것이고, 당연히 좋은 논문은 아니다. 좋은 논문이 되려면, ‘A라는 분야에서 발생하는 C 라는 문제를 해결하기 위해 B 라는 모델을 이용했다.’ 정도가 되어야 한다. 좋은 논문이 되기 위해서는 우선 좋은 문제가 있어야 한다.

이 글을 쓰게 된 동기는, 내 자신을 반성하기 위해서 이다. 여지껏 내가 쓴 논문들은 (몇 편 되지도 않지만) 좋은 문제 없이, 열심히 “답”을 구한 논문들이 많다. 아마 대부분일 것이다. 그리고, “문제”가 풀리지 않아서 결국 포기 했던 것들은, 거의 모두가 실제로는 문제를 찾을 수가 없을 때였다. 문제가 무엇인지 명확하게 알고 있을 때는, 열심히 하면 대부분 문제가 풀렸다. 논문은 아니지만, 컴퓨터 프로그램을 작성한 것이 결과가 제대로 나오지 않는 경우, 소위 버그가 있는 경우를 예로 들어 보자. ‘결과가 제대로 나오지 않는다. 어떻게 제대로 나오게 할 수 있을까?’는 좋은 문제가 아니다. 좋은 문제가 되기 위해서는 몇가지 단계로 나누어야 한다. (1) 어떤 결과가 제대로 나오고, 어떤 결과가 제대로 나오지 않는가? (2) 결과가 제대로 나오지 않는 것은 잘못된 코드 때문인가, 혹은 잘못된 알고리즘 때문인가? 더 나아가서, 알고리즘이 풀려고 하는 문제 자체가 잘 못 된 것인가? 등으로 나누어서 문제를 정의 하고, 열심히 생각하면, 대부분 해결 된다.

고민이 있을 때는, ‘문제’가 무엇인지를 명확히 구체화 시켜 보자. 열심히 생각하면 그 문제를 해결 할 수 있을지도 모른다. 문제를 명확히 구체화 시킬 수 없을 때는, 두 가지 경우가 있을 수 있다. (1) 문제가 아니다. 그러므로, 고민 거리가 아니다. (2) 내 능력으로는 문제를 구체화 시킬 수 없다. 고로, 당연히 문제를 해결 할 수도 없다. 고민 거리가 아니다.

파인만은 위대하다.

세 번째 단계 ‘답을 쓴다’ 에서도 여러가지 어려움이 발생한다. 이것에 대해서는 스크롤바가 너무 많이 내려왔으므로, 다음 기회에 이야기 해 보기로 하자. 그리고 제대로 된 문제를 좀 더 쓰고, 풀어 보고, 답을 구하고, 답을 써 보고 난 다음에 이야기 하기로 하자.

728x90
반응형