こんにちは、あのぶるです。

突然ですが、私は数学がとても苦手です。
過去のアルバイト経験のおかげでおつりの硬貨枚数を少なく済ませるための計算だけは早いですが、電卓を使っても割り勘の計算を間違えることがありますし、高校生の頃は理系クラスを選択した直後の実力テストで7点(もちろん100点満点中)を取ってしまったこともあるほど。当時「真っ青な顔をしてておかしなことでもするんじゃないかと思った」と本気で心配してくれた先輩の表情が今でも忘れられません。今でも苦手意識は残っていて、「高校数学やりなおし」という類のタイトルが付いた本を見るとつい手に取ったりカートに積んでしまうほどです。

そんな私が何故わざわざ「数学だらけ」と言われるコンピュータの世界に足を突っ込もうとしたのか……はさておき、今回はITエンジニアとしてある程度以上のレベルを目指そうとしたとき、どうしても数学を避けて通れない事情について考えてみたいと思います。

そもそもコンピュータは計算をする機械である

「computer」という英単語を辞書で引くと何と書いてあるでしょうか。
おそらく冒頭にはそのまま「コンピュータ」と書かれていると思いますが、詳しい辞書なら他にも「(電子)計算機」と書かれていることに気付くと思います。
以前の記事でも述べたとおり、コンピュータ自体は作られてから今に至るまで、少なくとも現在普及しているものであれば、根本的には簡単な計算しかしていません。つまり、足し算・論理演算・条件分岐とデータの出し入れを尋常じゃないスピードで組み合わせて実行し、さらによくある処理を「命令セット」や「API」などの形で抽象化することをOSIのレイヤーごとに重ねていくことで、普段私たちが触れるような複雑な処理を実現しているのです。

また目的に合ったアルゴリズムを選択するときには「計算量」という形で処理効率を見積もることもあります。業務で大量のデータを捌くときに限らず、競技プログラミングの問題を解いたことがあれば、素直に問題を解いたら大量のテストデータで処理制限時間をオーバーしてしまい別の解き方を考えなければいけなくなったという経験もあるかもしれません。

では、そんな計算機(コンピュータ)を使うプログラミングに直結する数学とはどのあたりなのでしょう?それを知るにあたっておすすめの本を紹介したいと思います。
その名もずばり、「プログラマの数学」。著者は数学ガールシリーズの著者でもある結城浩さん。
「数字」の基本から「計算不可能な問題」の話まで、プログラミングの近くにある数学のエッセンスをぎゅっと詰めたような本です。この本を読むことでプログラミングで使う様々な概念をより鮮明に知ることが出来るかもしれません。

過去の記事でも結城さんの著書について取り上げたことがありますので、そちらも併せてどうぞ!

具体的な計算を知らなくても使えるライブラリはある。でも、結局存在を知らなければ使えない

例えば二点間の距離と方向を知るには「三角関数」、音を解析するなら「フーリエ解析」、CGを操るには「線形代数」、路線図から乗り換えの最短ルートを見つけるためには「グラフ理論」、平面の画像データを操るためには「幾何学」、統計データを分析するならもはや「応用数学」と括られる、関連する様々な数学の知識が必要になります。(データ分析を専門とする「データサイエンティスト」という職種があるくらいですしね)
もちろん、ただ使うだけなら計算方法を具体的に知らなくてもライブラリを探せば済むのですが、「何を使えば目的を達成できるのか」を知らなければ、場合によってはそれらを見つけることもままならないことがあります。
似たような話で「算数なんか出来なくても電卓を使えばいい」という意見を見ることがありますが、電卓を使うにも「どのような計算をすれば求めたい値を手に入れられるのか」を考える、つまり最低限式を立てる力はないといけません。もちろん「どんな計算をしたいのか」さえはっきりすればコンピュータも電卓も強い味方になってくれますが、それを具体的に決めるのはもうしばらくは人間の仕事のままでしょう。
とはいえ今は便利なサービスやライブラリがたくさんあるので、それらを使うだけでも十分目的を達成できることも増えてきました。本気の数学を求められる機会は本当に職種や業種によりけりなのかなとも思います。

それでも、いまの世の中にない、本当に新しいものを作ろうとする場に加わるのであれば「どうしたらそれを実現することが出来るのか」を数学レベルから本気で考えないといけない時がやってくるかもしれません。そういう時に頼ってもらえるエンジニアになりたい、というのが私が数学を諦められない理由なんだろうなと思っています。


The following two tabs change content below.

あのぶる

Software Engineer
杜の都で育ち、赤べこの街でコンピュータのいろはを学んだソフトウェアエンジニア。今はスマホゲームのためのWebAPIを作るお仕事をしています。最近はすっかりガルパンおじさん化。