社会人エンジニアがアメリカの大学で苦手な数学を学び直してみた

エンジニアには数学が必要なのか?学び直しの意義を考える

こんにちは、です。

僕は現在、一社会人としてフルタイムでエンジニアをしていますが、色々あってアメリカの大学でコンピュータサイエンスを専攻している社会人学生でもあります。

アメリカの大学に入学するまでの経緯については「オレゴン州立大学のコンピュータサイエンス第2学士号オンラインプログラムに合格するまで」の記事にまとめています。

この記事では、上記の大学に入学する際の必要要件だった数学の単位と、入学後に必要な数学の単位を中学数学から学び直して取得したので、所感や学習内容を備忘録として残しておきます。

また、エンジニアにおける数学の必要性と学び直しの意義について自分なりの意見を残しておきます。数年後に見返して答え合わせできたらいいなと思っています。

受講した数学のクラス

学期 番号 名前 Grade 難易度 作業量
2022 Winter MAT117 College Algebra – Arizona State Univ B 易しい 95時間
2022 Fall MATH208 Discrete Mathematics – Univ of N Dakota A 難しい 200時間

オレゴン州立大学の入学要件に「College Algebra(大学代数学)かPre-Calculus(微積分の前段階)の単位をB以上で修了している」といった要件が含まれていたため、前者のMAT117 -College Algebraを取得しました。

後者のMATH208 – Discrete Mathematics(離散数学)はオレゴン州立大学の卒業要件として必須単位であったため、単位移行をする目的でUniversity of North Dakotaでクラスを受講しました。

多くの大学のコンピュータサイエンス専攻では、入学要件としてある程度の数学レベルが求められます。また、卒業要件として離散数学が必須科目となっています。また、多くのコンピュータサイエンス修士号の入学要件として離散数学のクラスを優秀な成績で修了していることが求められるなど、離散数学はコンピュータサイエンスにおいて重要な基礎数学となります。

上記二つのクラスはオンラインのSelf-pasedのクラスとなっており、期限はありますが目安として3~9ヶ月で完了、もしくは、それより早くも遅くもできるためとても自由度の高いクラスとなってます。

MAT117 – College Algebra – Arizona State Univ

大学代数学という名の講義ですが、以下のように高校数学の範囲が大部分を占め、一部高校数学を超えた範囲となります。

  • 関数、写像、定義域、値域
  • 一次関数・二次関数
  • べき関数、多項式関数、有理関数
  • 合成関数、逆関数
  • 関数のグラフ
  • 指数関数、対数関数とその応用
  • 連立一次方程式、非線形連立方程式
  • 複素数
  • 微積分入門

講義はALEKSというサービスで学習を進めます。

日本の高校で理系選択をした方は大きな問題なく完了できるかと思いますが、僕のような10年弱の数学ブランクがある文系人間にとっては、復習の時間を考慮する必要があります。実際に因数分解レベルから復習し直しました。

とは言いつつも、多少の復習でスムーズにコースを進められたので、単位を早く取得するという目的であればかなり早くコースを終了することもできるかと思います。日本の数学教育のレベルの高さを実感しました。

僕の場合は、後の数学クラスのためにしっかり復習したかったのに加え、この記事「現役エンジニアがアメリカの大学でCSの単位を取得してみた所感」に記載している他のコンピュータサイエンスの講義と並行して受講をしていたため、2ヶ月かけて単位を取得しました。

成績は期末テストが100%反映され、90%以上でグレードAとなり、僕の場合は89%でギリギリBとなってしまいました。再度同じクラスを受講して成績を上書きすることも可能でしたが、あくまで入学時の必須要件として考慮されるだけであり、単位移行されて成績に反映されるわけではないので、Bを最終成績としました。

テストはPCの画面共有とカメラでちゃんと監視されます。

MATH208 – Discrete Mathematics – University of North Dakota

離散数学は原則として離散的な数学を扱うため、代数学等とはかなり毛色が異なります。グラフ理論、組み合わせ理論、最適化問題、計算幾何学、プログラミング、アルゴリズム論が絡む応用分野となっており、主に下記のようなものを学習します。

  • 集合について
  • 命題論理について
  • 述語論理について
  • 二項関係について
  • 半順序関係について
  • 写像(関数)、全射・単射など
  • 数学的帰納法
  • 漸化式・差分方程式

コース構成と範囲は下記の通りです。各Lessonごとの宿題と3つの試験の合計で評価され、試験の評価比重が重いです。

  • Lesson 1: Logical Connectives and Compound Propositions
    Lesson 2: Predicates and Quantifiers
    Lesson 3: Sets: Basic Definitions
    Lesson 4: Styles of Proof
    Lesson 5: Relations and Equivalence Relations
    Lesson 6: Functions
    Lesson 7: Exam 1
  • Lesson 8: Sequences and Summation
    Lesson 9: Recursively Defined Sets
    Lesson 10: Mathematical Induction
    Lesson 11: The Integers
    Lesson 12: GCD’s and the Euclidean Algorithm
    Lesson 13: The Fundamental Theorem of Arithmetic
    Lesson 14: Exam 2
  • Lesson 15: Moduar Arithmetic
    Lesson 16: Permutations and Combinations
    Lesson 17: Inclusion-Exclusion Counting
    Lesson 18: Counting Using Recurrence Relations
    Lesson 19: The Method of characteristic Roots
    Lesson 20: Exam 3

各Lessonでは教科書を読み進めること、録画された講義を見ること、宿題の提出が求められます。愚直にやり切るとかなりの時間が掛かり、Lesson6あたりまでで100時間くらい費やしました…。

後半からはやり方を変更し、録画された講義を倍速で視聴した後に、すぐに宿題に取り掛かり、宿題で詰まったら随時教科書を確認する方針にしました。これで残りの100時間でLesson20まで完了しました。テストはPCの画面共有とカメラで監視され、電卓が禁止されているので手計算が求められます。

大学代数学を受講していたおかげで、離散数学の講義を進めるにあたって、細かい部分のストレスはありませんでした。高校数学を復習していなかったら細かい計算で躓いていたと思います。

離散数学の概念はエンジニアリングの概念と共通しているものが多く、最初に離散数学を学んでおくと、後のコンピュータサイエンスの講義に役立つかと思います。

最終評価は下記となりました。

  • Exam1 94/100
  • Exam2 92/100
  • Exam3 86/100
  • Grade 93.5/100

数学の学び直しの意義とは

正直なところ、離散数学の単位を取得した段階では、数学アレルギーが消えたある種の達成感はありますが、エンジニアリング業務に対する直接的な恩恵を感じる機会は今の所少ないです。

集合や論理などプログラミングをするにあたって当たり前のように使用しているような分野においては、暗黙知的に理解している部分が多いですし、先に学ぶか後から暗黙知的に理解するか、みたいなところはあります。もちろん、初学者の方は圧倒的に効率が良いので、離散数学を先に学ぶことを推奨します。

最近では、転職の際のコーディング試験などでアルゴリズム力を試される機会がありますが、アルゴリズムを学習する上では離散数学の知識は必須となります。

これから微積分や線形代数、統計学の単位を取得して行くことで、AI/機械学習の分野に進んでいくことも一つの選択肢として考えられるので、ひとまず数学アレルギーが消え去ったことで視野が広がったという点では意義があったということにします。

結局エンジニアに数学は必要か?

最低限の数学力は必要です。ありがたいことに日本の義務教育を修了している場合、エンジニアの道に進んでいくための土台は出来上がっていると思います。

その後に、どういうエンジニアになりたいかで必要な数学の知識は変わってくると思います。エンジニアといっても何十種もの職種が存在していますし、同じ職種でもジョブディスクリプションが異なるため、数学の必要性の有無は変動します。

上記の話はエンジニア、プログラマー、デベロッパー、コーダーみたいな職種の定義や日本のIT業界の慣習みたいなところまで掘り下げなければいけなくなりそうなので、この辺にしておきます。

検索エンジンの検索需要から”エンジニアに数学は必要か”論における個人的な意見をここまで書いてますが、エンジニアとして働いていて、業務で必要だと感じたらその時点で勉強してると思いますし、そもそも数学の必要性に疑問を感じる人は”エンジニアになりたいエンジニアではない人”だけなのでは?という気がしています。

まとめ

数学から逃げるな。(自分への戒め)

Loading...
Loading...
Masaki Nishi

Masaki Nishi

現在はAmazon Web Servicesで働きながら、オレゴン州立大学のコンピュータサイエンス学部にて社会人学生をしています。 昨今の急激な円安に伴う学費の高騰に嫌気が差しています。

詳細プロフィール