ソフトウェアエンジニアと数学

2024年10月26日
ソフトウェアエンジニアと数学

工学部での数学

僕は工学部を修士まで進んだけど、大学で何を学んだかと言えば、数学が中心だったように思う。 大学では応用的、実践的なことも学んだけれど、 10年も経たないうちに、それらの知識は陳腐化し始めていると感じる。 一方で、数学の知識というのはやはり普遍なものとして残り続けるし、 かなりの時間を注いできたので、今も能力も残っていると感じる。

意外かもしれないけれど、工学部では実践的なプログラミングも、 回路設計も基礎的な部分しか教わらない。それで仕事ができるようにはならない。 実際には理論が中心で、理論は数学で構築されているので、数学ができないと理解できない。

工学部で学ぶ数学は、実際の工学に直結するもので、高校数学の延長に感じられる部分がある。 高校生の微分・積分って結局何の役に立つの?という疑問の答えがそこにある。 実際の応用が見える、というのが数学科の数学との違いだと思う。 一度、数学科で教えてそうな、現代数学の授業も取ったことがあるけれど、 ひたすら証明しかしてなかったので、最後まで何をやってるのか理解できなかった。 その時は「やっぱり数学科に進まなくてよかった」と記憶がある。

数学の価値

ソフトウェアエンジニアはさまざまなバックグラウンドの人が集まっているので、 文系出身の人や工学部、コンピューターサイエンス出身でない人も多い。 数学の知識がなくても成果を上げることは可能だ。 ただ、だからこそ数学の基礎があることはエンジニアとして一つの強みになると思う。

実際にソフトウェアエンジニアとして働き始めてから、数学的知識が役立ったと感じた場面は、 たまにだけれど、いくつかある。 例えば、線形代数(行列計算)は、3Dレンダリングや画像処理といったグラフィック分野で必須だし、 確率・統計も、データ分析などで直接役に立つ。実際に手計算することはないけれど、 概念を理解してないと、ライブラリを使うような場面でも、何をしているのか理解できないと思う。

あとは技術書なり論文なりを読んだときに、数式が出てくることがあるけれど、 数学を学んでおくと「まあ落ち着いて読めば理解できるだろう」とは思えるようになる。

もっと基礎的な部分で言えば、プログラミングの文法そのものが数学から来ている部分もある。 変数とか関数とか、大なり小なりの記号とか、ブール演算とかは日常的に使う。 物事を抽象化して、シンプルに表現して考えるところは、数学とプログラミングでも共通すると思う。

あとは、プログラミングをやっていると問題を解決するために、一日中考えてるみたいなこともあるけれど、 問題解決に必要な根気は、数学に通じるものがあると思う。 実際のプログラミングでは、こういう精神的体力が必要になるので、それは数学で鍛えられるかもしれない。

僕は数学がめちゃくちゃできたわけではないけれど、中学・高校では数学と物理は一番好きな科目だった。 最近はめっきり数学をやっていないけれど、また改めて数学を学びたいと思う。

10年くらい前に大学で機械学習を研究してたけど、今や当時の知識は完全に時代遅れ。PRMLとかで培った数学の基礎力は陳腐化しないから、やっぱり学ぶべきは数学なのか。

— Junichi Sato (@sat0b.dev) 2024年10月25日 12:56