今回のエントリーでは自分がサラリーマン生活を経てから理系の大学に戻った際に感じた数学の壁とどういう対策をしたかシェアしていきたいと思います。
最近Twitterを使ってなかったので、完全に乗り遅れましたが、誰かがエンジニア数学不要論を展開しているらしいです。自分は賛成でも否定でもなく、単純に数学にブランクのある社会人がどう数学の壁を乗り越えるかにFocusしていこうと思います。
タイトルにある通り社会人向けと書いてる理由は数学に対してブランクがあるからです。自分が大変だったこととどういう戦略をとったかをシェアしていきたいと思います。
1.CSに必要な数学とは
文系卒の社会人がコンピュータサイエンスを学ぶにあたって、まずぶち当たる壁が数学になります。多くのコンピュータサイエンスは実装の前に理論を学ぶ必要があり、なぜその理論が良いのか証明したり、証明を理解する必要があるため、 コンピュータサイエンスは理系の中でも特に数学が必要とされます。CSによく登場する数学の分野としては主に
離散数学(Discrete Mathematics、Combinatorics、Graph Theory)
解析 (Real Analysis、Numerical Analysis)
線形計画法・非線形計画法(Linear Programing、Nonlinear Programming)
確率論 (Probability、Randomized Algorithms)
線形代数(Linear Algebra)
などの分野です。
例えば、アルゴリズムは離散数学を使ってグラフ問題やカウンティング組み合わせ問題を解く必要があります。
解析に関してはアルゴリズムがどれくらい速いかを計算する必要があり解析の知識が必要となります。
線形計画法・非線形計画法(Linear Programing、Nonlinear Programming)は機械学習の分野でよく登場する分野になります。
確率論は機械学習ではもちろんですがアルゴリズムの世界でもRandomizedアルゴリズムと言う、ランダムに値を割り当てることで通常のアルゴリズムよりも早く問題を解決する特定のアルゴリズムがあります。また暗号化の分野でも確率は大事になるため確率論と computer Science は切っても切れない関係にあります。
最後に線形代数ですが線形代数は数学の基礎といってもいいほど万物に使われる根幹となるため 、深く理解する必要があります。
2.数学のギャップがある社会人の壁
では何が問題かというといきなりこれらの数学をいきなり学び出しても前提知識が抜けていたり、ブランクがあるため、授業に追いつくことがかなり難しいです。そのため、卒業に必要な単位を取る以前にそもそもこれらを前提とする知識を自分で勉強する必要がある、またはPrerequisite(そのクラスを取るために必要な一個レベルを下げた) クラスを取る必要があります。前提知識を自分で勉強する場合も、クラスを取って勉強する場合もそれなりの時間をかける必要があります。
前提知識と言うと例えば微分積分、数列、Trigonometric(sin/cos/tanとその関係性)の復習と数学1 Aで 出るような場合の数の計算に出てくる定理と、できれば証明の仕方も頭に入れとく必要があります。
自分はカナダに来る前に約半年ほどかけてこれらの前提知識を自分で勉強しました。
別のエントリで社会人が学業に戻る際の数学のギャップについても語っているのでこちらを参照ください。
https://bluevancouver.hatenablog.com/entry/study-blank
また、単純に履修を終えるのに時間がかかるという問題ではなく、単純に難しいためそもそも単位を取ることが難しいです。例えば線形計画法・非線形計画法などは数学部としてオファーされるため数学メジャーの学生と同じ土俵で勝負することになります。そのため平均点をとることさえも努力が必要となります。もちろん数学のレベルは自分が勉強したいコンピュータサイエンスの分野にもよるのですが、昨今流行りの機械学習やディープラーニングを 扱うエンジニアになりたいのであれば多くの時間を数学に時間を使うことになります。
3.ここからは対策編です。
対策としては数学の教科書は1行読むのにとても時間がかかるため出来るだけ動画で学習することをまずお勧めします。何も準備せずに授業に臨んだり、初見で教科書を読む際は理解度が30%程度であるため YouTube やUdemyを使ってわかりやすい説明を聞いてから教科書を読んだり授業に臨むと理解度が上がるようになりました。
参考までにリストを載せておきます
離散数学: ほとんどのトピックは彼の動画でカバーできます。特に問題を一緒に解ける動画が参考になります。https://www.youtube.com/c/Trevtutor
Real Analysis: 難しいproofをわかりやすく説明してくれています。 https://youtu.be/h9Ez1qdsqps
Numerical Analysis: Jeffrey Chasnovのyoutube動画は、数学をエンジニア向けに説明してくれているので、見やすいです。https://youtu.be/d3sZa3T2TJw
確率論: 英語圏の学生はみんな見ているチャンネルです。教授よりもわかりやすいことで有名。機械学習に使われるテクニックも一緒に学ぶことができます。https://www.youtube.com/c/joshstarmer
Linear Algebra: 数あるyoutuberのなかで、最もわかりやすく、Linear Algebraの本質をアニメーションで説明してくれているチャンネルです。 https://youtu.be/fNk_zzaMoSs
また、数学は英語で勉強することを個人的には おすすめします。日本語で勉強した名前や定義をまた英語で再度頭に入れることは二度手間ですし、数学で使う英語はパターンがあって、慣れたら逆に英語で勉強した方がわかりやすくなります。