「100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊」に寄稿しましたよというお話

今年で 10 周年を迎えた「 Developers Summit 」ですが、記念して

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

という本が刊行されました。


ありがたいことに僕も一冊紹介して良いと言われたので結城先生( id:hyuki )の

プログラマの数学

プログラマの数学

で一本描かせていただきました。


僕にとってプログラムを始めたばかりの頃の先生は結城先生の本でした。
Java言語プログラミングレッスン(上・下)」で基礎を学び、「Java言語で学ぶデザインパターン入門」で色々なパターンを知り、「Java言語で学ぶデザインパターン入門 マルチスレッド編」でスレッドに対する恐怖を取り除いてもらいました。
そんな方の本を紹介するのはなんとなく恐れ多い気もしたのですがやっぱり本当に自分が薦めたいと思う本を書かないと全てに対して失礼だと思い自分がアタマが悪いことも含め正直に書かせてもらいました><

ヨシオリがちゃんと学生の時に勉強してこなかったプログラマさんに贈りたい

数学をに苦手意識とか
持つことは無いんだよ

素因数分解や行列の計算が社会に出てなんの役に立つんだよ」
僕は学生の頃、そう考えていました。まさか 10 年後、3D の座標計算で行列の計算が必要になって高校二年の数学の参考書を買って泣きながら勉強し直すなんて想像すらしていませんでした。
そんな僕がオススメするのは結城浩さんの書かれた『プログラマの数学』という本です。
世間的には「結城浩」さんと「数学」という言葉で有名なのは『数学ガール』だと思います。
でも、恥ずかしながら僕は『数学ガール』が理解出来ませんでした。もちろん登場人物は魅力的ですし、そこで出てくる会話のセンスにも惹かれるのですが、肝心の会話の数学的な内容が理解できませんでした。
そもそも僕は数学に対する劣等感がありました。。
「やっぱりきちんと勉強してこなかったから数学がわからないんだろうな」と感じていました。
プログラマとして数学を勉強し直したいな。と思いながら何から手をつけていいかわからない状態でした。
逆にプログラミングに数学が必要なのか疑問に思う人もいるかも知れません。
僕みたいにどうしても行列の計算が必要になってから行列の計算だけ勉強すればいいんじゃないかと思うかもしれません。


でも、違うんです。


コンピュータは日本語に訳すと計算機と呼ばれたりします。誤解を恐れずに言えば色々な問題を解決するためにプログラムを書きそれをコンピュータに計算させるのです。そうなると計算をして問題を解決する方法をプログラマは考えなくてはいけません。つまりより良く計算をさせるために「数学的な考え方」が出来ないといけないのです。
って書くとなんかやっぱり難しいような気がしてきちゃいますね。でも、全然難しいことをしようとしているのではないのです。
一個すごく簡単な例を挙げます。プログラマなら一度は書いたことがある if 文の条件分岐、これも「数学的な考え方」のひとつなのです。ホントです。第 2 章の「論理 -- true と false の 2 分割」に書いてあります。僕も最初にこの本を読んだ時にビックリしました。
数学ってもっとよくわからない記号がいっぱい出てくるようなものだと思ってましたから。
この本に出てくる数学的前提知識は四則演算(+,−,×,÷)と累乗くらいです。今「はじめに」を読み返してそう書いてあったので間違い有りません。でも、本当にその前提知識だけで数学に関するたくさんの事を教えてくれます。
例えば第 3 章ではパリティチェックについて手品を例に説明が書いてありますし、第 6 章では再帰について「ハノイの塔」というパズルで説明が書いてあったりします。
ある図形が一筆書きで書けるかどうか簡単に判断できる方法がわかりますか?
折り紙を何回折れば月まで届くかわかりますか?
答えはもちろんこの本に書いてあります。「数学的な考え方」の解説まで付いて。


どんな事でも基礎が大事だと言われます。実際そうなんだと僕も思います。
プログラミング言語自体を学ぶことも、アルゴリズムを学ぶことも、開発手法を学ぶこともそれぞれ大事だと思います。
ただ、もしも貴方が僕と同じように数学に対する劣等感を持っているのなら、数学を勉強してみるのはどうでしょうか?
別に数学者になろうと思っているわけじゃないので厳密な正しさとかは求めなくて良いと思います。
気軽に自分の「数学的な考え方」を強化すればいいのです。


ちなみに…… やっぱり今でも僕は「数学ガール」に出てくる数学の話は理解できませんでした。
もっと勉強しなきゃいけませんね。