リモートでアメリカの大学院に通い始めた

今年春に出願、夏に合格して秋学期からオンラインのコンピュータサイエンス修士コースで勉強している。ちょうど秋学期が終わって成績が返ってきたので、どういう感じだったか書いておく。

どうして進学したのか

僕は学士で卒業するときどちらかというと大学院に進学をしたかったのだけど、当時お金があまりなかった*1ので、学費と東京での生活費を稼ぐためには単位が取り終わったころに一日8時間週3〜5回やっていたアルバイトを続ける必要があり、そんなに働いてたら勉強もろくにできないだろうなと思って進学しなかった*2

のだが、@rui314 さんが社会人のまま受けていたスタンフォードのコンピュータサイエンスの授業の話を読んで興味を持ち、実際同じコースで授業を受けてみたところ、面白いし働きながらでもいけるな*3という気持ちになった*4ので、進学することにした。

なぜリモートなのか

冒頭のツイートに書いてあるが、コロナだからではなく、社会人を続けながら授業を受けるためだ。オンラインで受講することにも当然ながらデメリットはあるし普通に社会人をやめて修士に行く人もいる*5のだが、コンピュータサイエンスだと一人でもくもくとプログラミングをしている時間が大切だと思っていてそこの体験は変わらないし、まあそもそも家族を養う必要があるとか、仮にそうじゃなくても社会人歴を伸ばし続けた方が短期的にはお得そう*6だなという感覚があった。

出願手続き

今年の春以下の2校に出願し、どちらにも合格した。

  • Georgia Tech: Georgia Institute of Technology
  • UIUC: University of Illinois Urbana-Champaign

U.S. News - Best Computer Sicence Schoolsではどちらも上位につけていて、世界大学ランキングで38位と48位*7なので結構いいところに合格させてもらえたなと思っている*8

どちらもオンラインのコースがあり、普通の学生と同じ学位が取れる。受けられる授業の内容*9を見比べて、Georgia Techの方が面白そうだなと思っていたのでそちらに決めた。低レイヤーや分散システムに関する授業を主に受け、残りの単位で機械学習ディープラーニングをやろうかなあという気持ちでいる。Georgia Techには、機械学習で自動投資プログラム書く授業や、Unityでゲームを作る授業など、いろいろある。

GPA

Georgia TechはGPA 3.0、UIUCはGPA 3.2を原則*10要求している。前授業受けてたスタンフォード行かないの? とは数回言われたし実際行きたい気持ちはあった*11のだが、スタンフォードではGPA 3.5が要求されており、そこに届いていなかった*12

私の出身の東工大では成績表にGPAが出ない*13ので、WESというところに成績表を送ったところGPA 3.36と計算された。在学当時は将来良い成績が必要になるとは思っておらず、文系科目で単位ギリギリの60点(GPA的には0)を取ったりしていたので、まあしょうがないかなという感じ。

TOEFL

Georgia Techは100点、UIUCはオンラインでは103点がTOEFL iBT(120点満点)の足切りになっている。両校ともGREを要求しないのでテストらしいものはこれしかない。ので、これの準備がダントツで大変で、問題集を9冊こなし、一回2万円する試験を8回も受け、102点*14を取るまでに半年以上かかった。

TOEFLの何が大変かというとまず静かにテストが受けられる試験会場の予約バトルが大変*15で、しかも採点対象に含まれない問題が挿入されランダムに問題数が変わり何問になるかで解きやすさが変わるし、そして僕の実力で合計100点取るには、全部一発勝負のスピーキングは一つミスると受験し直しみたいな感覚だった。

推薦状

どの学校も3つ推薦状が必要で、最低1つはアカデミアの人からもらう必要があり、主にその推薦文が重視される。学部の時に所属していた研究室の渡部先生からとてもありがたい内容の推薦文をいただけたため、この点に関しては安心することができた。残り2つは同僚の上司と元上司からいただいた。

Statement of Purpose

エッセイ。何が目的で入学し、何故大学でやっていけそうかを書く。普段やってるJITコンパイラの開発や仕事の分散システム開発をする上で役に立ちそうだし、実際に修士の授業受けたらAだったからいけるのでは、みたいなことを書いた*16

授業はどうだったか

OMSCS

Georgia TechのOnline Master Computer Scienceコースのことを略してOMSCSという。僕の知っている範囲でも同僚の@Lewuatheさん、Railsコミッターの@schneems、他にも@takpさんや@_rdtrさんが参加しているのを見て雰囲気は知っていた。日本に住んでても普通に受けられる。

スタンフォードのSCPDは実際に通学している生徒が受ける講義の録画を見るのだが、OMSCSではあらかじめ作られた講義動画、それもオンラインはキャンパスが違う扱いでオンライン用に作られたものが基本的には使われ続け、たまにアップデートされたりされなかったりするらしい感じになっている。

これは善し悪しで、普通に通う生徒と同じ授業をリアルタイムに受けたくても受けられないのは残念だが、スタンフォードの講義動画を眺めてると近い生徒と相談してみてくれみたいな感じの時間が数分続きオンラインの生徒は置き去りになったりするのに対し、OMSCSだと最初からオンライン用に作られたクイズが途中で出てきて自分のペースで解いたりといったことができる。オンライン受講に最適化された体験という感じである。

試験監督

以前の記事で書いた通り、スタンフォードのSCPDでは現地で受験できない場合は職場の上司などに対面で試験監督を依頼する必要があり、これが面倒だった。まあ当時と違いベイエリア在住になった (むしろGeorgia Techには飛行機じゃないと行けない) ので別にこれは気にする必要はなくなるはずだったが、コロナ中のShelter in Placeで対面試験監督が無理だった間どうなったのか気になる。

ここに関しては、OMSCS生の同僚が一人で試験の様子を録画して提出する感じなので楽と言っていたのを事前に聞いて安心していた。僕が受けた授業ではHonorlockというのが使われていて、パソコンの画面全体と自分の様子を一人で録画し、画面や顔や音の変化を察知して怪しそうな場面が検知される感じになっていた。これ生徒の間では不評っぽいけど、上司の業務時間を毎セメスター消費するよりはよっぽど精神的に楽だと思う。

CS 6291: Embedded Systems Optimization

タイトルの通り組み込みシステム向けの最適化について。僕は組み込みシステムにはあまり興味がないのだけど、OMSCSのコンパイラの授業を持っている先生がこの授業をやっていて、かつこの授業では組込みシステム向けのコンパイラは題材としつつも、レジスタ割り付けや命令スケジューリングといったコンパイラバックエンドに関する内容がメインとの評判で、日々RubyJITコンパイラを実装している関係でそこに興味があったので受けることにした*17

先生が書いたコンパイラ最適化に関する論文やドラゴンブックが教科書として使われ、課題で提供されたIRに対しレジスタ割り当てを行なうアルゴリズムPythonで一から実装したり、組み込みシステム向けの命令スケジューラ*18C++で書いたりする。講義で出てくるコンパイラ最適化問題は大体がNP完全なのでヒューリスティックを使う必要があるのだが、普段コンパイラのインライン化判定を実装する時にも使うような考え方なので大変参考になる。あと、コードを最適化するときにレジスタ割り当ての気持ちをなんとなく考えることができるようになる。

宿題とプロジェクトと期末試験がほぼ均等に考慮されて成績がつけられ、85点以上だとAになるぽい。僕はトータルで95点でのAだった。

これから

学部の時のGPAに対して割と残念な体験をしたので、(今のところそういう予定はないけど) 将来Ph.D.に進学したくなった時とかのことを考え、GPA 3.8~4.0あたりでの卒業を目指している。次のセメスターではHadoopやSparkを使ってBig Dataする授業を受けようと思っている。

*1:別に苦学生というほど貧乏でもなかったが、授業料半額免除が通るくらいの水準。

*2:この辺の気持ちは当時も https://k0kubun.hatenablog.com/entry/2015/02/19/012927 に書いた

*3:当時と何が違うかというと、大学も仕事も日中に行かないといけないという状態ならやはり大変だと思うが、大学の授業の受講が夜だけでできるというのが大きかった。

*4:そういう気持ちだっただけで、実際には夏に子供が生まれたので、今年はあまりいけるなという感じではなかった。

*5:katryoさん https://katryo.hatenablog.com/entry/2017/12/22/131447 やserihiroさん https://serihiro.hatenablog.com/entry/2019/12/07/210355 など

*6:当たり前だが大学院にかかる年数人間がフルタイムで働くとめっちゃ金がもらえる。それから、例えばジョブタイトルの説明には経験年数の目安が書いてあったりとか、最終学歴が学士でも社会人歴が長いのでグリーンカードの申請がEB-3ではなくEB-2になった人を見たりした。

*7:東大は36位、京大は65位という感じ

*8:ちなみにGeorgia Techはコースごとに出願者数と合格者数を公開しているのだけど、通常のコースに比べオンラインのコースは合格者数と合格率が共に圧倒的に高い。単純に学生の数をスケールしやすい仕組みだから枠が増やせるという話だと思うが、枠の制限が緩い以上は合格のハードルは少し低いと思う。

*9:ふつうコンパイラ書く授業では低レイヤーの言語が使われやすい気がするけど、UIUCのコンパイラの授業ではHaskellが使われる https://pages.github-dev.cs.illinois.edu/cs421-fa20/web/ というような個性があったりする

*10:多少低い程度なら他の要素でカバーできることもあるらしい

*11:僕が最初に面白そうと思った授業もそこだし、以前スタンフォード卒の同僚から、シリコンバレーでは履歴書にスタンフォードとあるとその話で盛り上がったりする、みたいなことを聞いたりもした

*12:まあそれは最初から察していたけど、実際内部でいい成績を取ってそこの先生からの推薦を貰えれば受かりそうだなと当時は考えていた。一方でそもそもGPAで足切りされるかもわからないのに最大70万円かかる授業をそれを目的に何個も取るのは正直辛いし、いくら点数が良くても先生に記憶してもらうまでにはかなりハードルがあることもわかった。あとTOEFLの対策だけでも半年以上かかっていたのに、受けた2校では不要だったGREの試験対策をするのも大変だなあと思っていた。

*13:在学当時試行GPAというやつはあったのだが、ふつう4.0スケールのはずが最大GPA 5.0になる感じだった記憶がある。どの道正式な成績表には出てこないので意味はない。

*14:UIUCに実は1点足りていない。が、第一志望はGeorgia Techだったのと、どの道もう一回受ける余裕がないところまで締切が迫っていたので諦めた。まあなんか他の要素でカバーされたのかもしれない。

*15:takutiさんの記事が参考になる http://takuti.hatenablog.com/entry/2014/10/29/121513

*16:ちなみに過去に受講したことがある大学全ての成績証明書が要求されるので、スタンフォードでの成績証明書も提出していた

*17:あと、ラズパイ上でArmの命令エンコーディングを最適化してベンチを取るみたいな課題があって、始まったころまだ論理Arm社員だった https://blog.treasuredata.com/blog/2020/07/07/arm-proposes-to-transfer-ownership-of-treasure-data-to-softbank-group/ のもあり、なんとなく自分の中で今が旬な授業みたいな感もあった

*18:これは組み込みシステムの面白いポイントだと思うのだけど、エネルギー消費を抑えるためになるべくコンパイル時に計算を済ませたいという事情があり、組み込みシステム向けの命令セットではどのサイクルでどの命令を並列実行するかを正確に指定できたりする。そのため、どのリソースはどういうレイテンシがあるかを考慮しつつ、コンパイル時に命令のスケジューリングをやるなど、コンパイラでできる最適化の幅が広く、面白い。