일반적인 프로그램에서 프로그래머에게 고도의 수학적 지식을 요구하지는 않는다. 하지만 문제를 파악하고, 구조적으로 분해해야 하는 능력은 필요하다. 특히 효율적이라는 부분에서는 반드시 최적화를 수행하여야 한다. 이 책은 일반적으로 프로그래밍 초기에 배우는 이산 수학(Discrete Mathmatics) 으로 볼 수 있다. 정수론 귀류법과 재귀 등에 대해서 나오는데 재미있게 잘 소개하고 있다.
이 책에서 재미있는 것은 분해이다. 모든 문제에서 해를 찾는 것이 break down하여 작은 범위로 만들어 생각해야 한다는 것이다. Recursive 부분을 특히 강조된다. 실제 Recursive 루틴을 잘 사용하지는 않는다. 순차 루틴에 비해 비효율적이고, 특히 Stack Overflow등을 방지하기가 어렵다. 문제해결에서 나누어 분해하는 것은 당연한 일이다.
수학에서는 큰 수를 다루는 것이 아주 일반적이다. 지수를 사용하여 큰 수를 잘 사용하고 있다. 실제 물리적인 세상에서는 지수적인 폭발이 발생하지 않지만, 수의 세계에서는 매우 간단하다. 프로그래밍에 있어서도 지수적인 폭발이 생기는 것은 매우 주의해야 한다. 책에서 소개해 준 옵션의 숫자에 따른 테스트의 경우의 수가 증가하는 것을 보여주었지만, 실제 Loop 사용 등에 있어서 무한루프와 더불어 조심해야 하는 것이 곱셈의 증가가 생기는 것이다. 이 책은 수학 책이니 지수와 더불어 로그를 통해서 숫자를 잘 다루는 법을 소개해주고 있다. 인공지능에 대해서는 아주 간략한 수학적 내용을 이야기하고 있다. 인공지능에 관심있는 사람은 이것을 기초로 맛보고, 좀더 심화된 내용으로 공부해야 할 것이다.
큰 정수 n 이나 k를 다룰 때 이것을 실제의 작은 수 3,5를 이용하여 확인하고 이해하는 것은 많은 도움이 될 것 같다. 실제 큰 수의 경우는 답이 나와도 맞는 지 틀린 지 체크하기가 어렵지만, 3이나 5의 경우에는 쉽게 확인할 수 있을 것이다.
수식을 증명하는 방법으로 귀납법을 소개하고 있다. 두 개의 명제로 증명할 수 있고, 이해하기 쉽게 설명해주고 있다. 또 하나의 증명 방법은 귀류법으로 명제를 반대로 하여 틀림을 증명하면 바로 명제의 참을 증명할 수 있는 부분이다. 이 2개의 증명 방법에 대해서는 꽤 자세하게 소개된다.
프로그래머에게 일부를 제외하고는 아주 복잡한 수학은 사용되지 않는다. 그러나 모든 프로그래머는 문제 해결 능력을 가지고 있어야 한다. 그리고 그 접근 방법은 기본적인 수학을 사용한 접근 방법이 되어야 할 것이다. 이런 접근 방법에 대해서 알려주는 책이다.