설에 집에 들렸다가 고등학교 2학년 때 즈음인가 사두었던 책을 발견했다.
국문으로는 어떻게 문제를 풀 것인가? - 수학적 사고 방법 -
라는 책이다.
아마 기억하기로는 Calculus 바이올린 책을 사야해서 교우사 홈페이지를 들어갔다가 발견했던 것 같다.
(교우사라는 키워드 때문에 기억이 났다.)
당시는 뭔가 책에 대해서 알아보고 구매했던 것은 아니고, 제목에 끌려서 막연하게 문제를 푸는데 도움이 되지 않을까 기대하며 샀던 것으로 기억한다.
그렇게 구매 이후 책장에 꽂혀있던 것이다.
시간이 지나 거의 10년이 지나 다시 꺼내보게 되었다.
국문으로도 있으나 3챕터의 순서가 조금 다르다. 허나 순서와 내용이 관련이 없으니 크게 상관은 없을 것 같다. 영문은 3챕터가 알파벳 순서로 되어있으나 국문은 옮긴이가 나름의 의미적 순서를 부여한 것 같다. 국문 링크
어떻게 문제를 풀 것인가 - 예스24
G. 폴리아 저/우정호 역. 교우사(오판근). 판매가 25,000원. 이 책에서는 수학 문제의 답을 가르쳐 주는 것보다는 그 문제를 풀고 답이 나올수 있게 하는 수학적 사고 방법에 대해서 설명하고 있다.이 책은 수학을 배우는 사람이나, 수학을 가르치는 사람뿐만...
https://www.yes24.com/Product/Goods/325507어떻게 문제를 풀 것인가?
책에 대한 모든 내용을 요약하고 싶지는 않다. 그럴 의도도 없었고. 그냥 책을 읽으면서 느낀 점을 적어보고 싶었다.
책의 목적은 우선 교수법에 가깝다. 표면적으로만 보았을 때는 수학에만 관련된 것으로 보이지만, 문제를 해결하기위해 발문하고, 해결책을 찾아내는 과정에 대한 방법론을 제시하고 있다. 단순히 해결책을 찾는 것이 목적이 아니라, 일반화 하고 추상화 하는 과정을 통해 문제 해결 능력을 키우는 것을 다루고 있다.
좀더 확장해서 생각해보면, 이 책에서 제시하는 수학적 사고의 방법론은 소프트웨어 개발에도 적용할 수 있다고 생각한다.
개발을 하면서 만나는 것들, 문제들. 문제를 발견하고, 정의하고, 해결해 나가는 과정은 수학적 사고의 방법론과 유사하다.
때로는 어떤것이 미지수 인지도 모를 때가 있고, 때로는 목적을 잃어버릴 때도 있다. 다양한 방법이 존재하기도 하고, 어떤 방법이 최적인지도 알 수 없을 때도 있다.
이 책에서는 여러가지 질문을 던져가며 문제에게 다가간다.
책에서는 교사와 학생간의 발문이지만, 개발의 경우는 나와 내 자신간의 발문이라고 생각하면 된다.
Four phases
- 문제에 대한 이해
- 연결성을 파악하고 ‘계획’을 세우기
- 계획을 실행하기
- 해결책을 돌아보고, 검토하고 논의하기
바람직한 문제 해결을 위해서는 이 네가지 단계를 거쳐야 한다고 한다.
책에서는 직육면체의 대각선의 길이를 구하는 문제를 예로 들고 있다.
여기서 네가지 과정을 지나면서 교사가 던지는 질문은 다음과 같다.
- ‘미지인 것은 무엇인가?’
- ‘어떤 것이 주어졌는가?’
- ‘관련된 문제를 알고 있는가?’
- ‘관련된 문제로 전에 해결한 경험이 있는가?’
- ‘어떤 보조 요소를 도입하면, 문제를 해결할 수 있을까?’
- ‘그 단계가 올바른지 어떻게 알 수 있을까?’
- ‘결과를 다른 방법으로 이끌어낼 수 있을까?’
- ‘그것을 한눈에(glance) 알 수 있는가?’
- ‘결과나 방법을 다른 문제에 적용할 수 있을까?’
이어 좋은 발문과 나쁜 발문에 대해서도 다루고 있다.
위의 문제를 해결하는 과정에서 ‘관련된 문제를 알고 있는가?’ 라는 질문대신 ‘피타고라스의 정리를 적용할 수 있는가?’ 라고도 물어볼 수 있다. 허나 저자는 이것을 좋은 발문이라고 보지 않는다.
문제 해결에 있어서 발문
피타고라스의 정리는 매우 간결하기에 쉽게 외우고 적용할 수 있다. 하지만 그것이 왜 성립하는지에 대한 이해가 없이는 확장하거나 다른 문제에 적용하는 것은 어려울 것이다. 예를들어 비유클리드 기하학에서는 피타고라스의 정리가 성립하지 않는다. 왜 구면좌표계에서는 피타고라스의 정리가 성립하지 않는가? 를 도출해 내기 어려울 것이다.
마치 공식만 가지고 있는 것은, ai가 이미지를 해석하는 것과 같다. AI는 예술 작품을 일종의 정사영처럼 보이는 표면적인 픽셀로 해석하지만, 실제 반고흐의 ‘별이 빛나는 밤’에는 수겹의 붓 터치라는 한가지 축이 더 존재한다. 그것을 이해하려면, 그림을 그리는 과정을 이해해야 한다.
소프트웨어 개발에 있어서도, 문제를 해결하기 위해 발문하는 것은 중요하다. 이 발문은 나 스스로에게 할 수도 있고, 동료에게 할 수도 있다.
책에서 접근 하는 방식들은 학습에 대한 접근 방식이지만, 개발은 업무의 영역에도 걸치고 있기에 100% 적용하기는 쉽지않다. 문제 해결을 위해 시간을 무한하게 투자할 수 없을 뿐더러, 자칫하면 더 상위의 목표를 잊게 될 수도 있다. 개발적 성취를 위해 문제를 해결하는 것이 목적이 될 수는 있지만, 기본적으로 비즈니스적 목표를 달성하기 위해 문제를 해결하는 것이다.
그렇지만도, 문제를 해결하기 위해 발문하는 것은 중요하다. 이미 우리가 고민하는 문제에 대한 여러가지 다양한 해결책들은 이미 존재한다.
적당한 해결책을 잘 찾아서 적용하는 것 또한 쉬운일은 아니지만, 어느정도 나 자신이 문제에 대해 이해하고, 해결책을 찾아내기 위해 발문하는 시간을 가지는 것은 중요하다고 생각한다.
예를 들어, 복잡한 컴포넌트를 마주했을 때, 어떻게 하면 이 복잡함을 줄일 수 있을까? 라는 문제를 만날 수 있다.
이때도 구체적인 상황에 따라 여러가지 방법이 존재할 수 있다. compound components
, render props
, custom hooks
, HOC
등등.
적절하게 찾아 선택하는 것도 문제를 빠르게 해결하는데 도움이 될 것이다.
물론 바퀴를 다시 발명하자는 것은 아니지만, 각 바퀴들이 탄생하기 까지는 누군가의 발문이 있었을 것이다.
하고 싶은 말은 (여유가 된다면) 시간을 가지고 스스로에게 발문을 해보자는 것이다. 그렇게 문제를 해결하는 과정중에 기존의 해결책에 수렴할 수도 있을 것이고, 새로운 해결책을 찾아낼 수도 있을 것이다. 그 과정을 통해 어떤 목적성을 가지고 어떤 흐름으로 해당 방법론이 탄생하고 발전해왔는지에 대해서도 이해할 수 있을 것이다.
respice finem
책에 나오는 격언으로, 라틴어로 ‘시작하기 전에 목표를 생각하라’라는 뜻이다. That is, look at the end. Remember your aim. Do not forget your goal
책을 읽다보면, 대부분의 내용들은 ‘당연하지..’라는 생각들이 든다. 하지만 당연한 것들이라고 해서 우리가 행동하고 있는 것은 아니다. 그것을 다시 한번 상기시키는 것이 중요하다고 생각한다.