Courseraのオンライン修士2年目が終わった

--

以前にこちらのブログを書いて、その後も継続して読まれているようなので、近況をアップデートしておきます。

私は誰?

高山です。2020年からNewsPicksでCTOをしています。上の記事を書いたときはピクシブでCTOをしていました。

2017年頃からぼんやりと大学院入学を考えはじめたのですが、そしたらたまたまイリノイ大学のことを知って書いたのが上の記事です。それから1年ほどかけて準備して出願して、ちょうど転職した月とまったく同じ2020年の2月に入学して社会人大学院生をしています。

コースについて

まず、University of Illinoisと名の付く大学にはUrbana-Champaign (UIUC)とChicago (UIC)とSpringfield (UIS)の3つの大学があります。これらは別々の大学です。早稲田と慶應ぐらい別物だと思います。

Courseraで入学できるのはUIUCです。UIUCのコンピューターサイエンスはものすごく由緒正しく、Marc AndreessenがMosaicブラウザを作ったりChris LattnerがLLVMを作ったのもここだそうです。厚切りジェイソンさんも先輩です。

Courseraで履修できるのはMaster of Computer Science (MCS)Master of Computer Science in Data Science (MCS-DS)の2つです。MCSではコンパイラーとか画像処理とかクラウドコンピューティングなど幅広い単位が提供されていて、MCS-DSはほぼ同じ内容ですが幅ではなく深さを求めるので統計などの単位を多く取る必要があります。僕自身はMCSに入学しましたが、これまで受けたクラスはMCS-DSとしても使える単位ばかりなので、今からMCS-DSに切り替えることも可能のはずです。(確かそう聞いた記憶)

修了までに取得しないといけないクラスは8つで、1年に3学期なので、1学期に1クラスのペースでやっていけば2年半で終わります。これまでに受けたクラスは次のとおりです。

  • Database Systems : RDBのリレーショナルモデルとかグラフDBとかをやりました。正直知っている内容ばかりでしたが、最初なので敢えてそういうのを選びました。
  • Statistical Modeling in R : 線形回帰について3ヶ月かけてみっちり勉強しました。帰無仮説とかt検定とかR²とかLOO-CVとかAICとかBICとか。授業だけではわからなかったので一番教科書を読みました。教科書はこちらのオリジナル教材です。
  • Distributed Systems : リーダー選出とかQuorumとかGossipとか分散KVSについて勉強しました。かなりハードなクラスでしたが、入学前にCourseraでこの講義に潜っていたので(それが推奨されている)、勉強するのが2度目だったのでなんとか通過できました。
  • Computational Photography : 写真を加工する古典的アルゴリズムについて学びました。人物を消したり別の画像の一部を挿入したり、HDRやガンマ補正の仕組みなど。最後は3Dモデルを写真に挿入するプロジェクトでした。プログラミングが激ムズでした。
  • Data Visualization : データの可視化の手法について学びました。特にインタラクティブなグラフをTableauやD3.jsで作る方法を学びました。一番簡単なクラスでした。
  • Practical Statistical Learning : Ridge, Lasso, ランダムフォレスト, GBM, EMアルゴリズム, SVMなどなどを学びました。プログラミング課題はKaggleの練習問題のような内容でした。

授業はCourseraで動画が毎週2時間ぶんぐらいですが、理解しようとしながら見ると半日〜1日がかりになることが多かったです。その後1時間ぐらいのクイズと呼ばれる小テストが毎週あります。中間試験と期末試験もあります。

それ以外にもプログラミング課題が2週間に1回ぐらいあります。これはほとんど自動採点で、こちらも半日〜1日ぐらいかけて解いています。プロジェクトのレポート課題があるクラスもあります。プロジェクトは数週間かけてちょっとずつやります。

全部を真面目にやっていると、週末だけで終わらせるのはかなり大変です。ありがたいことに日本には祝日がありますし、たまに休みも取りながらなんとか期日通りに課題を仕上げてきました。

所感

2年目が終わった時点で考えていることを書き残しておきます。

時間について

まず一番の感想は、想像以上にストイックでしんどいです。休日はほぼすべて使ってようやくこなせるぐらいですし、常に締め切りに追われている気苦労があります。仕事の締め切りと重なったときは恐怖です。

最初は意気込んでAを狙いに行っていましたが、途中から気持ちを切り替えて、仕事との両立を目指すことにしました。クイズと課題の状況から学期の途中で今の成績がわかるので、酷い状況じゃなければ5%ぐらいの点数は捨てに行っても良いと思うようにしています。一応ここまではB+以上でやってきています。ちなみに400レベルのクラスで一つでもB-未満が付くと強制退学だそうです。(500レベルだとC未満で強制退学)

常にペースメイキングしてくれるのは僕の勉強のスタイルにはとても有効に機能しています。「ソフトウェアエンジニアたるもの常に勉強」と言われますが、僕はOSS活動も個人プロジェクトも続かない人間です。時間があるとだいたい仕事のコードを書いてるかYouTubeなどで技術解説やカンファレンス発表を見ていました。今は仕事のコードからプログラミング課題に、YouTubeからCourseraにそれぞれ変わって、毎週ノルマが課されるというぐらいです。やってることはあまり変わらないのに学位まで取れてお得な気がします。

時間を捻出するためにはかなり頑張りました。家事を極力自動化するのはもちろん、料理は2週間分まとめて作って冷凍したり。家の居心地に投資して週末は家から出くても苦にならないようにしたり。コロナでステイホームな風潮になったりリモートワークになった時期に入学できたのは本当にラッキーでした。

価値について

次に大きな感想は、修士に必要な単位を取ったからといってコンピューターサイエンスのすべての分野に精通するなんてことは無いということです。(当然ですけど)

https://twitter.com/dominicwalliman/status/1154034153349738498

勉強した分野についてはある程度網羅的にカバーされて自信になりますが、それでも全体のうちごく一部を少し囓ったぐらいなんだと思うと、無知の知が深まったに過ぎません。

そもそもアメリカのコンピューターサイエンスの学位自体、シリコンバレーなどで優遇されるのでそのための「就職予備校」として進化してきた側面がかなり大きいはずです。修士をやったらコンピューターサイエンスのすべての分野に精通できるんだろうかという過度な期待は無くなりました。

人脈もできずアメリカの就労ビザがもらえるわけでもなく、修論も無いため研究する力も身に付かないこのオンライン修士には何の価値があるんだろうかと思うこともあります。(お得な気がすると書いたばかりですが)

そんなことも入学してみなければ知れなかったことですし、知らなかったことを体験を通じて知れたことに価値があると思います。歴史的に見ても、教育に幅広い人がアクセスできるようになったことで、教育の価値が減って見向きもされなくなるということは無く、逆に必須と見なされるようになってきたので(高卒や大卒のように)、同じようなことが起きると思っています。

効果について

ソフトウェアエンジニアリングにまつわる仕事をしていると、コンピューターサイエンスの知識は役立っている感覚が多々あります。また、仕事で比較的すぐ必要そうだと思って取った単位もかなりあります。ここは社会人学生の醍醐味です。

もちろん、仕事でQuorumを実装することは無かったとしても、DynamoDBのバックアップに関するドキュメントを読んでいてChandy-Lamport Snapshotアルゴリズムが想像できるのはDistributed Systemsを取ったおかげです。機械学習のクラスはもっと直接的に役立っています。

給料が上がるとか転職につながるかというと、まだそこまでは無いですが、長いキャリアの中でいつかは武器にするつもりです。

僕自身ソフトウェアエンジニアの採用に関わる仕事をしていますが、「Courseraで修士をやってます」という人が来ても参考程度にするぐらいでしょう。しかし、「Coursearで修士を取ってその専門を活かして数年仕事をしていました」という人であればけっこう優遇すると思います。そんなふうに使う予定です。

副次的な効果として、入学する前にTOEFL対策を頑張ったおかげで英文を日本語の半分ぐらいのスピードで苦なく読めるようになり、入学してから教科書をけっこう読んだことで英語の専門書を読むことに抵抗がなくなりました。また、英文を読む量が増えたことでレポートを書くときに文章がすらすら浮かんでくることを実感しています。

最後に、修論が無いことについて思うところを書いておきます。

修論が無いため、研究する力はこのコースでは得られないと思います。日本の博士後期課程に入学しようと思うと修論相当の提出が求められると思いますので、そこは別で頑張る必要があります。(いつか頑張りたい)

アメリカでは大学院というと前期・後期の概念が無くDoctorの取得を目指すのが主流で、途中で退学するときにお情けでMasterをもらうことをMaster Outと言ったりします。そんな文化ですが、コンピューターサイエンスはMaster Outであっても重宝されるため、「就職予備校」としてMasterコースが作られるようになったのだと想像しています。詳しい人がいれば教えてほしいです。

これから

順当にいけば来年の夏頃に修了のはずなので、強制退学にならないように頑張ります。

その後については、やはり論文を書けるようになりたいですね。そのためには、来年中には落合陽一メソッドの「鬼コース」(下のスライドを参照)をやってみようと思います。

人生100年と思ってじっくり気長にやっていきます。

--

--

Atsushi Takayama

NewsPicksで2020年からCTOを、2022年からはFellowをしています。その前はピクシブでCTOをしていました。Courseraでイリノイ大学の大学院をやっています。