BlueVancouver- アラサー エンジニア転職@カナダ

現在アラサーの駆け出しエンジニア。[文系学部卒]にも関わらず26歳の時にSoftware Engineerになる事を決意。東京の外資系コンサル会社を26歳で退職し、カナダでのコンピュータサイエンスの大学に理転しました。(業務未経験) & (アラサーからの理転) & (いきなりカナダ) ですが、日本人としてもっと多様なキャリアがあってもいいと思い、情報共有しております。Youtube: https://www.youtube.com/channel/UCpa0EIrdETaR2gunXDEz-7A

2021 Fall semesterの学業での学び

2021年9月からは学業に戻り、以下のコースを受講しました。

1.Computer Network

2.Artificial Intelligence

3.Numerical Analysis

4.Intermediate Ordinary Differential Equation

5.Mathematical Modelling

 

この頃から、学ぶ内容も難しくなってきて、5つ取るのが結構きつく感じました。

それぞれの学びを自分用に残しておこうと思います。

1.Computer Network

ネットワークの基礎を学ぶコースで、ネットワークが構成する5つのレイヤー(application, transportation, network, link, physical)をトップダウンでapplicationレイヤーから学んでいくスタイルでした。コーディング課題が他のコースと比べて重く、pythonを使って、既存のlibraryを使わずに、一からTCPのようなreliableなデータのtransferをclientとserver両方実装するような内容でした。そのreliable data transferの際に、serverが複数のclientからのrequestに対応できるように、concurrentに対応することがまた難しかったです。

ピーク時は夜12時くらいまで実装とテストを繰り返しました。一つ学んだこととしては、実装して初めて気づくことや、考えさせられることが多かったです。

教科書からコンセプトを学んでも実際にコードを書くと、ここはどうなんだろう、ということがあって、深く理解するには、自分はコードで作ってみるのが一番だと感じました。

ただ、学んでいる内容自体は筋が通っていて、数学もそこまで複雑なものは出てこなかったので、コンセプトはすっと頭に入ってきました。

 

2.Artificial Intelligence

AIのイントロなので、マスターでやるような深い内容ではなかったですが、こんなことを学びました。hidden markov modelというモデルでは、目に見えるobserved dataと、目に見えない、hidden variableがあります。例えば、ある人の機嫌や顔が見えて(observed data)、天気が見えていない場合(hidden variables)などはobserveされたdataから、最も近い、今日や昨日の天気はなんだったのかなどと予測します。

Machine learningでは例えば、naive bayes classifierや、bayesian networkという手法を使って、Twitterなど大量のテキストデータから、特定の単語をカウントし、そのテキストの集合が例えばpositiveな発言か、negativeな発言か、あらかじめ正解(=ground truth)がある中で、次に誰かが発言したTweetがpositiveなものなのか、negativeなものなのかを識別するようなmodelを組んだりしました。

自分はAIだけをキャリアの専門としていく気はありませんが、ある程度自分でAIを理解して、実装されたcodeが読めないと仕事でモデルを組むサイエンティストの話についていけなくなると思ったので受講しました。内容自体は本当に楽しかったので、将来的にAI/ML & System・Infra のような仕事も見据えて学んでいこうと思います。

 

3.Numerical Analysis

ここからは数学のお話。自分は数学とCSのダブルで専攻しているため、数学も専門として学ぶ必要があります。Numerical Analysis/Methodsはのっぺりしていて、様々な手法で、computerが使えない時に、複雑なfunctionを含む微分方程式や、積分をどう手で近しい値を出すかというのがゴールです。

逆に言えば、ほとんどの人がこのクラスで学ぶmethod達は初見のため、そこまで数学のbackgroundがなくても、頑張ればある程度のレベルまでは理解することができました。ただ、この分野はこの分野で深いので、極めるのは大変だなと思いました。

 

4.Intermediate Ordinary Differential Equation

微分方程式の2つ目のコースです。既にイントロの微分方程式は終えていて、数学/物理学メジャーの学生だけが取るコースでした。この分野の個人的に好きなところは、解があることで、微分方程式の問題に対して、自分のアプローチが正しかったのか間違いなのかTrue/Falseで確認することができて、エンジニアにとっては戦いやすい分野だと感じました。また、次に紹介する、モデリングのクラスも微分方程式を使って、物事の増減を式にするので、他の分野で使われる幅の広さから、受講して良かったと思いました。

内容としては、前半はSeries(数列)を使って、微分方程式を解いたり、

後半では例えば、Predator Preyというモデル(肉食動物と草食動物の人口推移)について、人口ピラミッドが崩れないのはなぜかというのを数学的に分析したりしました。

あとは、そのようなsustainable/stableな解が存在するかどうかを証明するのにポアンカレ・ベンディクソンという定理をつかって証明したり。

最終的にはカオスシステムにおけるbifurcationという分野を学びました。Predator Preyとは異なり、少し初動が違うだけでstableになったり、ならなかったりするような状態をカオスといい、その分岐点はどこにあるのかを学ぶのがbifurcationという概念です。

これはこれで生物学やエネルギーの分野でかなり使われるので、bio-informaticに興味が出るかはわかりませんが、学んで良かったと思います。

 

5.Mathematical Modelling

最後がモデリングのクラスで、微分方程式との違いは、微分方程式は既に問題となるモデルと式が与えられた上で、どういうテクニックを使って、その解を解くか(解けるか)に重点を置いているのに対し、モデリングのクラスは、そのような事象をどう式に落とし込むかを学びます。よって、モデリングで問題を作り、微分方程式で解を求めるような流れになります(大まかですが)。

面白かった内容としては、昨今のコロナの感染数がどう増えていくのか、なぜ指数関数的に増えるのか、をモデルして初めて理解しました。最も有名な基本的なモデルとしてはSIRモデルという、Susceptible(感染する可能性のある人)、Infected(感染した人)、Recovered(感染して、元に戻った人)に分け、そうするとSusceptibleとInfectedが触れることでInfectedが増えて、その微分方程式の解が指数関数で表現できるため、とても早く、感染者が増えることが理解できました。

 

まとめ

CSと並行して数学を専攻することがどこまで自分のソフトウェアエンジニア力に貢献しているかはわかりませんが、将来的に数学を必要とする分野(AI/Securityなど)で働く時に学んでいて良かったなと思えれば嬉しいです。気持ちとしては本業のソフトウェアエンジニアリングをもっと極めていきたいので、頑張っていこうと思います。