pco2699’s blog

学んだものについて、メモしておく場所

ソフトウェア工学を学びにアメリカへ

はじめに

こんにちは、一昨年からアメリカの大学院への入学を目指し勉強してきました。 結果、アメリカのピッツバーグにあるカーネギーメロン大学のソフトウェア工学修士課程(Master of Software Engineering)から合格通知をいただき、今年の8月からアメリカに行くことになりました。

合格通知をいただいたのは昨年の3月なのですが、仕事や家庭の事情を鑑みて、一年の入学延期を申し出たところ、大学側から承諾をいただくことができました。結果的に1年遅れて入学することになります。

個人的な話で恐縮なのですが、ピッツバーグは自分が7歳まで育った場所です。25年後に戻ることになるということに不思議な縁を感じています。

本記事では、米国大学院を志望するにあたってお世話になった方への謝辞、参考にしたブログ、および作者への謝辞とともに、ブログという形で情報を恩返し、および将来、米国大学院(PhDではなくProfessional向けのMaster、特にCSやSoftware Engineering系)へ志す方への少しばかりの情報共有をしたいと思っています。

お世話になった方々への謝辞

今回、大学院に行くにあたって、以下の方々にお世話になりました。本当にありがとうございました。

  • 海外の大学院に行くのを応援してくださった私の妻
  • 推薦状を快く書いてくださった 私の上司、教授の方々
  • 勉強中に応援してくれた友人の方々
  • 退職の際に最大限の賛辞を下さり、最大限に考慮してくださった社長

参考にしたブログ・その作者の方への謝辞

米国大学院を志すにあたって参考にした方々のブログをまとめます。 この方々のブログがなければ私はアメリカに行くことは無かったでしょう。

www.slideshare.net

現在、シリコンバレーで働いている Tatsuya Nanjoさんのスライド。恐らく自分と同じプログラムに通われていたと思います。 このスライドに衝撃を覚え、このソフトウェア工学のプログラムを志すきっかけになりました。view数のうち1000回は自分だと思います。ありがとうございました。

katryo.hatenablog.com

南カリフォルニア大学のCS修士を卒業し、katryoさんのブログ。 TOEFLの勉強の仕方や準備の仕方を大いに参考にいたしました。ありがとうございました。

yutori-datascience.hatenablog.com

UC IrvineでPhDを取得しているtkm2261さんのブログ。 タイトルの通り、非常に詳細に大学院の応募プロセス、やったことが記載されておりめちゃくちゃ参考になりました。ありがとうございました。

note.com

社会人でペンシルバニア州立大学のPhDに合格したちゅうげんさんのブログ。こちらも米国大学院の出願プロセス、非常に丁寧かつわかりやすく纏まっています。 自分の出願書類準備時に何回も確認しました。ありがとうございました。

note.com

出願後でしたが、大学の出願周りの話や考察が非常に詳細に書かれていて、参考になりました。CS学士を通信課程で取得して、米国大学院を目指す胆力を尊敬します。

私のスペック

  • SIerで金融系エンジニア4年 -> スタートアップで4年ほどバックエンドエンジニア
  • TOEFL: 103
  • GRE: Verbal:148, Quantitative:163
  • 情報工学系 大学・院卒(GPA: 3.34)
  • International Workshopで主著論文一本、International ConferenceでSecond Author 二本

大学・大学院時代は研究が苦手でしたし、業績も全然ないので、PhDは無理だと判断しました。そのため、志望してません。

過去に本プログラムに受かった方の話を聞くと、必ずしも大学がCS系である必要はなさそうです。機械工学などの出身でもソフトウェアエンジニアとしてのインターン・業務経歴や、ちゃんとCSの勉強をしている証明があれば受かる、とのことです。

更に、ここ1, 2年でどこの大学院もGREは最近は軒並み必須応募要件から外れているので、一段と応募しやすくなりました。GREはむやみやたらに難しくて精神が削がれます。

なぜ米国大学院を志したのか

以下の3つです。

  1. まとまった時間でCS、エンジニアリングの勉強をしたかった
  2. 英語で学ぶという経験をしたかった
  3. アメリカで一度働いてみたかった

まとまった時間でCS、エンジニアリングの勉強をしたかった

自分は情報工学科卒ではあるのですが、学生時代は非常にもったいないことにバンドにかまけており、全く勉強をしてませんでした。 そのため、アルゴリズムやオペレーティングシステムやコンパイラの知識が無く「今一度、勉強しなおしたい」と気持ちがあります。

そのため、土日や平日業務後にCouseraで勉強したり、アルゴリズムに関する本を技術書展で書いたりしました。

booth.pm

blog.pco2699.net

また、それだけでなくエンジニアリングの知識も同様に勉強したいと思っており、さまざまな本を読み漁ったりしています。

一方で、平日 仕事後、土日だとまとまった時間が取れなくどうしてもペースが遅いので、どこかでまとめて時間をとって=大学院に入りなおして勉強したいな、と思うようになりました。

英語で学ぶという経験をしたかった

身近の優秀なエンジニアを見ていると必ず、「英語を一次ソースにしている」という共通点があることに気づきました。 実際に、英語で技術本を探してみると、優良な技術のリソースが無料で手に入ることがわかります。

近年のコンパイラ・インタプリターのハンズオン本として名高い「Crafting Interpreters」は日本語版は現在ありませんが、 英語だと無料で公開されています。

同様に「Operating Systems: Three Easy Pieces」も無料で公開されています。

そのほか様々な名著が英語だと無料で手に入ります。

つまり、英語で学ぶ=より学習効率よく技術を学ぶことができる、と考えています。

アメリカで働いてみたかった

私が愛聴しているPodcastにRebuild.fmがあります。

rebuild.fm

このPodcastはアメリカで働いているエンジニアの方が、面白おかしく最近のアメリカの出来事やテック系のニュース、ゲーム、漫画、アニメを話しています。

インターネットで、国との間の情報の距離が縮まったとはいえ、やはり今でもシリコンバレーやアメリカで働いてる人の感覚を日本で感じるのは難しいと思っています。

そんな中、このPodcastは今のアメリカのシリコンバレーやテック業界の空気感を伝えてくれるメディアとしてすごい力を発揮していると思っています。

Rebuild.fmを聞いていると、「ああ、一度はアメリカで働いてみたいなあ」と誰しもが思うのでは無いでしょうか。自分もその中の一人でした。

実際に、アメリカで働くには、ビザが一番の問題になります。 アメリカの工学系の大学院を卒業するとSTEM OPTという制度で3年働くことができるため、自分の夢を実現できます。

アメリカの就労ビザの問題については、以下の記事が詳しいので参照ください。

fushiroyama.hatenablog.com

ソフトウェア工学修士とは何か

自分が行く予定のソフトウェア工学修士は、すでに2年以上のキャリアがあるソフトウェアエンジニアの方に向けて、よりキャリアアップを目指すべく以下のカリキュラムを提供するプログラムです。 私はソフトウェアエンジニア版のMBA的なイメージを持っています。

  • テックリードのためのコミュニケーション手法
  • プロジェクトマネジメント
  • アーキテクチャやアジャイル手法

特徴としては、以下があります。

  • Semester(上半期・下半期)を更に半分(Semi-Semester)にし、1年半ながらも多彩な授業を受けられる。
  • 夏休みも授業が行われる(=インターンシップはできない)
  • カリキュラムの後半は「Studio Project」 として、いろんな企業とのタイアップまたは大学の他学部のソフトウェア開発プロジェクトに実際に開発する
  • Advisorの承認さえもらえれば、選択科目としてのどの専攻の授業でも受講できる

ソフトウェア工学を学びつつ、選択科目としてOSやコンパイラなどのCS科目を学べるプログラムとして、今の自分に最適なプログラムだと考えています。

計算機科学修士とソフトウェア工学修士の違い

日本のいわゆるWeb系のソフトウェアエンジニアの方が、更にソフトウェアエンジニアとしてキャリアを深めたいと考えた場合、進学する専攻として「CS系」を上げるのではないでしょうか?

「CS系」や「CS」でざっくりよく括られますが、ひとえにCS系と言っても実はいろんな専攻があります。

カーネギーメロン大学のコンピューターサイエンス学部のページを見ても、ざっと以下の修士があります。

  • Master of Science in Computational Biology: 計算生物学科学修士
  • Master of Science in Computer Science: 計算機科学修士
  • Master of Science in Machine Learning: 機械学習科学修士
  • Master of Software Engineering: ソフトウェア工学修士
  • Master of Human-Computer Interaction: ヒューマンコンピューターインタラクション修士

「ソフトウェアエンジニアがキャリアアップのために受ける修士課程」だと、以下の2つになるかと思います。

  • 計算機科学修士 Master of Computer Science(以降 MCSと呼称)
  • ソフトウェア工学修士 Master of Software Engineering(以降 MSEと呼称)

この2つはよく混同されがちでYoutubeでもその違いを説明する動画をよく見かけます。

www.youtube.com

www.youtube.com

上記は何が違うんでしょうか?

ざっくりいうと「Googleのソフトウェアエンジニアリング」の冒頭に出てくる以下の言葉がわかりよいと思います。

Google社内でときに言われるのは、「ソフトウェアエンジニアリングとは時間で積分したプログラミングである」ということだ。

出典: Googleのソフトウェアエンジニアリング P.3

具体的にカリキュラムについては、以下のような違いがあります。

MCS MSE
主に学ぶ内容 - プログラミング
- コンピュータの構成要素であるデータ構造、OSなど
- 機械学習
- コンピュータグラフィックス
- プログラミング
- 設計手法
- ソフトウェアアーキテクチャ
- プロジェクトマネジメント
代表的な授業 - アルゴリズム
- オペレーティングシステム
- 分散システム
- オブジェクト指向設計
- デザインパターン
- アジャイル手法

「エンジニアとしてステップアップするためにマネジメントやアジャイルの考え方=ソフトウェア工学を学びたい」という方や、究極的には「なにがなんでもSoftware Engineerとしてアメリカで働きたいんじゃ!」という人はMSEも候補として検討していいのではないかと思います。

どこの大学でもMCSやそのPhDは熾烈な低さの合格率ですが、MSEは比較的受かりやすいと思っています。 実際に、カーネギーメロン大学のデータだとMCSは6%、MSEは21%の合格率とのことです。1

なお、上記の違いはあくまで一般的なもので、各大学によって定義は厳密には異なることが多いので気を付けてください。2

大学院の選び方

本章では、自分が出願する大学院の際に気を付けた点や、逆に気を付けるべきだった点をまとめます。

専攻

何を専攻するか

「計算機科学修士とソフトウェア工学修士の違い」でも説明した通り、「米国大学院のコンピューターサイエンスの修士課程」と言っても、さまざまな分野があります。たとえば、カーネギーメロン大学だとSchool of Computer Science(コンピュータサイエンス学部)以外にも、College of Engineeringもあり、そこでもコンピュータエンジニアリング専攻があります。

www.ece.cmu.edu

そのほか公共政策などを扱うHeinz Collegeにも「情報システムマネジメント専攻」があります。

www.heinz.cmu.edu

つまり、ひとえに「コンピュータサイエンスの修士課程」と言っても、細分化されています。

そのため、進学を検討する際は「何が理由で何を勉強したいのか、なぜその専攻なのか」を考えるとよいかと思います。3

アメリカの大学・大学院入試では上記の理由を問う「Statement of Purpose」というエッセイを書いて提出します。どんなに優秀でも、エッセイが短かったり、理由が不明瞭だと入学は難しいのではないかと思います。

私は大まかに以下の流れでソフトウェア工学専攻を志望するエッセイを書きました。

  1. 現職は、急成長中のスタートアップであり技術的負債が貯まっていたり、エンジニアの組織問題、コミュニケーション問題が発生していた
  2. 技術的負債の返却や負債を抱えたプロダクトのリファクタ・リアーキテクティングを通して、「ソフトウェアを綺麗に作る方法」に関心があった
  3. 「ソフトウェアを綺麗に作る方法」=「ソフトウェア工学」での解決分野、と考えたため、ソフトウェア工学を専攻したい
研究するか?しないか?

アメリカの大学だと、「Master of Science in ~」だと研究室に入り、論文を書きます。 「Master of ~」でScienceがつかない場合は、Capstone Projectと呼ばれる卒業制作や、レポート、授業の単位だけで卒業することができます。4

研究したい人が「Master of Science in ~」でない専攻に行くと、研究ができないまま卒業することになるので注意してください。そもそも、まず研究をしたい場合は、PhDを検討すべきです。逆に言うと、「あくまでアメリカでの就職予備校のつもりで大学院へ行こうと思っている」や「大学院時代に研究が苦手だったから研究はもうしたくない」という方は「Master of ~」がよいと思います。

私が行くところは論文は書かず、Projectで卒業が認められるため学位は「Master of Software Engieering」となります。

授業料

アメリカの大学院に進学を希望する際の注意点として 授業料が非常に高いという点があります。

給与が支給されるPhDならまだしもMasterの場合には、授業料だけで総額1000万 ~ 1500万かかる想定をしておいたほうが良いです。今は円安ですし、しかも毎年授業料は10%上がります。また、州立(public school)か私立(private school)に行くかでも授業料は異なります。

もし志望される方は真剣に貯金するか、奨学金取得をお勧めします。 なお、学生ビザ発給時に銀行の残高証明書を求められ、生活費 + 授業料を払えない場合はビザが発給されません。

米国大学の授業料周りの話は以下の書籍でも取り扱っているので、志望される方はぜひ、一読してみてください。

おわりに

ぜひ、アメリカのCS, SEの大学院に行きたいと思っている方は、本記事が少しでも参考になれば幸いです。

アメリカの大学院に行きたい、と少しでも思っている方はぜひ挑戦してみてほしいです。全落ちしてもお金が少し無くなるだけで、面白い経験になるのではないでしょうか。個人的にはお得だと思います。

TOEFLの勉強法は以下でまとめたので見てみてください。

blog.pco2699.net

まだ、合格したばかりなので、むしろ大変なのはこれからです。入学する先はブラックと聞いたので血反吐を吐くまで勉強しようと思ってます。楽しみです。ではでは。

Appendix: そのほか参考になる記事

そのほか、本文中に言及できなかったものの、出願などの情報収集で役に立ったブログやページなどを紹介します。

xplane.jp

海外の大学院の出願の情報が非常によくまとまっています。推薦状作成の際に参考にしました。

fukabori.fm

前述のTatsuya Nanjoさんがゲストとして出ているPodcast。カーネギーメロン大学のMaster of Software Engineeringで学んだ内容が語られており、参考になりました。

ハーバード大学のコンピューターサイエンス学部からAsanaのソフトウェアエンジニアになった山田さんの著書。ソフトウェアエンジニアとしてハーバード大学の授業で役に立った授業の記載があります。とても参考になりました。

evanp.me

最近見かけた記事で英語ですが、「ソフトウェアエンジニアのキャリアアップのための米国大学院CS」をまとめている記事です。この人はオンラインを中心に見てますが、非常によく纏まっています。


  1. https://www.cs.cmu.edu/academics/resources/masters-overview-comp-data-2020-09-15.pdf

  2. ほとんどカリキュラムが同じ大学もあるようです

  3. といいつつCollege of EngieeringとSchool of computer science の違いがいまだによくわからなかったりする

  4. Master of Science ~ でも一部、論文を書かなくても卒業できるところはあるそうなので、卒業要件は確認しましょう