たなかの読書記録

スタートアップで働く人間が、読んでよかったなぁと思う本を紹介していきます。

記録#5『プログラマの数学 第2版』ゼロの意味は?

昨年はPHPでのWebサービス開発や、Pythonを使ったデータ解析にチャレンジしました。その中で扱われるのは"論理"だったり"統計" "ランダム化"だったりして、改めて数学への関心が高まっています。

今月第2版がでた『プログラマの数学』買ってみました。

著者は『数学ガール』を書いた結城浩さんです。

プログラマの数学第2版

プログラマの数学第2版

 

 ゼロの物語:「ない」ものが「ある」ことの意義

第1章のテーマが、ゼロについて。その中で出てくるエピソード。

これは、今でも覚えている小学1年生の思い出です。

「それではノートを開いて、『じゅうに』と書いてください」

と先生は言いました。わたしは新しいノートを開き、きちんと削った鉛筆を握って、大きな数字でこう書きました。

102

なるほど、たしかに。そう書きたくなる気持ちもわかります。IとかVで数字を表すローマ数字で『じゅうに』を書こうとするとXIIで、X (10) とII (2)を並べて書くよなーと。

人間が日常生活で使ってる10進法、コンピュータが使っている2進法・8進法・16進法は『位取り記法』というジャンルに入ります。(ローマ数字は位取り記法ではない)この位取り記法では、0は非常に重要な意味合いを持ちます。

  • 場所を確保する:10の位の数字がなくても空欄を書かなくて良くなる
  • ルールをシンプルにする:10^0 = 1と定義することで、全ての位を10^nで示せることになる

たしかにたしかに。もっと具体的にイメージするために提示されている、『日常のなかのゼロ』という項目では、

  • 予定がないという予定:時間を「空き」として認識することで探す対象になる
  • 薬効がない薬:3日飲んで1日休む薬があったとすると、毎日薬を飲むが4日目の薬をダミーのものにしておくほうが習慣化しやすいのでは

などの例が示されています。日常のなかのゼロ、っていう考え方はとても素敵な観察だと思いました。

剰余:周期性・規則性を見つけ出す

第3章は、剰余(割ったときの余り)について。小学校低学年で割り算と余りについて習って以来、あまり意識して使ったことのなかったテーマですが、本の中で紹介されていた例はとても面白かったです。

  • Q. 今日が月曜日として、1億日後の曜日は?
  • A. 1周間は7日。100,000,000(1億)÷7 = 14,285,714 余り 2になる。つまり14,285×7= 99,999,998日後は同じ月曜日。その2日後である1億日後は水曜日のはず。

確かに。。。簡単で、シンプルで、美しいなぁと思いました。

他にも、恋人探しだったり畳敷きだったり、一筆書きなどなど問題を、"剰余"という視点から捉えなおしていきます。この章は全体の中でも特に面白かったです!

再帰:自分で自身を定義する

プログラムを書いていると、for文なんかで

  • x = x + 1

みたいな文を書くことが往々にしてあるんですが、自分自身を定義するために自身を使うこと、これが再帰です。

個人的になるほどなぁと思ったのは、この前の数学的帰納法の章と合わせての説明なんですが、

実は、再帰(recursion)と帰納(induction)はどちらも「大きな問題を、同じ形をした小さな問題に帰着させる」という点では本質的に同じです。 

再帰的なプログラムを書くためには、その構造を見抜くことが必要になります。観察の練習をたくさんして、構造をどんどん見いだせる人になりたいです。

指数的な爆発:困難な問題との戦い

第8章は指数・対数について。

最初に出てくる、「10個独立したチェックボックスが必要なWebサービスを作らなきゃいけないとして、その開発をする上でのテストは2^10(1,024)回やらなきゃだめになります」っていう一文。気をつけます。。。

最後に

自分の子供が中学生・高校生とかになったらぜひ読ませたい一冊でした。数学は一つの言葉です。この言葉を知っておくと、世界の捉え方がもっと豊かになるなと思います。