착한 수학

더 자세히 들어가기 전에 한가지 먼저 애기할 것이 있다. 나는 “실수”라는 표현을 싫어한다. 이 표현은 다른 종류의 수는 실체가 아니라는 인상을 준다. 이것은 어리석고, 짜증나고, 실망스러우며, 사실이 아니다. 사실 이 용어는 허수에 대응하는 의미로 붙여진 것이다. 허수는 그 개념을 조롱하는 의미에서 “허구”라고 이름 지어진 것이다. 하지만 실수라는 표현이 너무 잘 정착되어서 이떻게 할 수가 없다. // 언제나 이름이 중요하다. 변수 이름 잘 만들자!

[IT 전공자] 만약 당신이 IT 전공자이거나 IT관련 종사자이면 이 책을 뒤에서 부터 읽어라. 정확히 말해서 Part6 –> Part4 –> Part5 순서로 읽길 권한다. 책의 서두를 장식하는 Part1 ~ 3까지 내용은 IT전공자에게 굉장히 쉽고 당연한 이야기들이 많다. 하지만 Part 4~6은 IT 전공자라고 해도 충분히 읽어볼 가치가 있다. 유한상태머신과 프로그래밍에 대한 시각이 굉장히 세련되게 전개되고 있기 때문에 꼭 읽어볼 필요가 있고, 무엇보다도 ‘유한상태머신’에 대해서 이렇게 전문적이면서 예제를 중심으로 설명한 책이 거의 없다는 점에서 이 책이 가져다 주는 가장 멋진 챕터라 생각한다. 쉽게 말해서 필독하라!

[IT 비전공자] 만약 당신이 IT 비전공자, IT 종사자가 아니거나 중/고 등학생 혹은 교양으로 이 책을 접한다면 Part 1~4까지는 꼼꼼하게 읽어보고, Part 5~6 부분은 관심있는 부분만 읽어도 좋다고 생각한다. 이 책의 Part1 부분에 나오는 정수를 정의하는 부분은 여타 다른 정수론에서 설명하는 것보다 직관적이고 쉽다. 수학이 왜 필요한지에 대해서 생각해 볼 좋은 계기가 될 것으로 생각한다. 수학이 왜 수학인지 알고 싶다면 Part1의 내용에 집중해 보길 권한다. “수학의 본질은 자유”에 있다고 했던 칸토어의 말을 곱씹어 보길 권한다.

같은 책 3번 읽은 자의 조그마한 충언…


  1. 제목이 ‘착한수학’ 이라고 해서 뭔가 당황했다. 착하다는 표현은 굉장히 긍정적인 표현인데 이게 사람의 신체에 붙으면 다른 뜻으로 활용되기도 하지만 수학의 접두로 붙으니 뭔가 느낌이 남달랐다. 책을 읽으면서 아니나 다를까, 아주 어려운 이야기를 당연하게 시작한다. 공리에 대해서 나오기 시작하고, 숫자에 대한 뭔가 알 수 없는 그러나 어렴풋한 이야기들이 나온다. 하지만 읽고 있으면 굉장히 쉽게 다가온다. 어려운 이야기속에 꼭 들어가 있는 “그 말의 속 뜻은” 부분에서 책쓴이는 의미를 명확하게 알려주고 넘어간기 때문이다. 자연수, 정수, 유리수, 무리수에 관련된 이야기를 읽다보면 자연스럽게 실수에 대한 명확한 관점이 생긴다. 특히 ‘0(zero)’에 관련된 부분에서 난 null을 떠올리게 되었다.

  2. 이 책을 읽으면서 느꼈던 것 중 가장 혁신적인 감정은 ‘프롤로그’를 배워봐야 겠다는 느낌이다. 인공지능 랩에서 공부를 할 때 프롤로그는 약간 오래된 인공지능에 교재에 간혹 실리는 예제의 일종이다. 그리고 죽은 언어라는 느낌이 강했다. 그런데 ‘착한수학’의 논리부분에서 프롤로그로 논리에 관련된 예제가 나온는데, 이게 굉장히 신선한다. 내가 알고 있는 프롤로그가 아니라 정말로 논리적인 어떤 것을 검증하는 언어로 구현된다. 하스켈 같은 언어도 소개되고 있다. 전혀 다른 언어에 대한 느낌을 가질 수 있어서 너무 기분이 좋았다. 내년에는 뭔가 새로운 것을 시도해 볼 수 있는 뭔가를 얻게 되어서 기분이 매우 좋다.

  3. 유한 상태 기계에 대한 논의는 참신했다. 단순히 이런거다를 넘어서 실전에서 유용한 예제등이 나와서 컴퓨터 프로그래밍에 대한 좀 더 깊은 개념에 대해서 설명한다. 집합도 마찬가지로 집합에서 끝나지 않고 공리적 집합론을 소개하고 실전에 필요한 내용들에 대해서 소개하고 있다.

미적분이나 선형대수학이 아니라 정말로 컴퓨터 프로그래밍에 필요한 수학을 알고 싶으면, 이 책을 꼭 추천한다. 계산은 나오지 않는다. 그러나 개념과 논리가 당신을 유혹할 것이다.


  1. 기수는 개수를 세고, 서수는 위치를 가리킨다. // 당연하지만 너무 쉽게 잊고 사는 것 같다.

  2. 정수의 모델을 만드는 것과 같은 일을 할 때, 우리가 그것을 정의하는 방식이 각 정수에 대해 꼭 하나의 객체만을 만드는 경우가 아닐 때가 종종 있다. 우리는 우리가 모델을 만드는 각각의 객체들에 대해, 모델 안에서 동치인 값들의 모임이 있도록 모델을 정의한다. // 클래스에 대해서 다시 생각해 보게 된다.

Written on November 10, 2014