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

私は誰?

高山です。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週間分まとめて作って冷凍したり。家の居心地に投資して週末は家から出くても苦にならないようにしたり。コロナでステイホームな風潮になったりリモートワークになった時期に入学できたのは本当にラッキーでした。

価値について

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

--

--

Atsushi Takayama

Atsushi Takayama

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