pco2699’s blog

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

CMUに来て二カ月が経ちました

こんにちは。CMUおよびアメリカに来て二か月が過ぎたのでざっくりと感想などをまとめていこうかと思います。

受けた授業のまとめ

現在 mini-semesterというsemester1をさらに半分に分けた学期が終わりました。 今期のmini-semesterでは以下の授業を取りました。

No 科目名 選択/必修 mini/whole
1 Introduction to Computer Systems 選択 whole
2 Formal Methods 必修 mini
3 Business And Market Strategy 必修 mini
4 Statistics For Decision Making 必修 mini
5 Communications For Software Leaders 必修 whole
6 Distributed Systems 選択 whole

受けた授業の内容・感想をまとめます。

Introduction to Computer Systems

システムプログラミングの入門として主に以下を学びます。

  • バイトでのデータ表現(2の補数、浮動小数点など)
  • x86_64 アセンブリ
  • バッファオーバーフロー
  • CPUキャッシュ
  • メモリアロケータ(Malloc)
  • プロセス・シグナリング
  • ネットワークプログラミング
  • 非同期処理・スレッディング

正確に言うと今期ではなく、夏にオンラインで取りました。(あとで説明するDistributed Systemsの必須単位のため)

CMUのコンピューターサイエンス系の授業で最も有名とのことです。 噂通り非常に骨太な授業でした。非常に面白かったので、別途、記事を書きました。

blog.pco2699.net

授業のスライドなども以下で公開されているので興味がある方はぜひ。

www.cs.cmu.edu

Formal Methods

形式手法の授業です。 形式手法とは、数学を用いてシステムの正しさを証明する手法のことです。

幾何数学や帰納法などの数学の復習をしつつ、形式手法を学び、AlloyやFTSAというモデリングツールでモデルの正しさを確認する手法を学びます。 最終的にプロジェクトで NiceBook というFacebookのパクリシステムを形式手法で正しく動くことを証明します。

https://alloytools.org/

Alloyはこんな感じ

今期の授業では一番、面白い授業でした。

Business And Marketing Strategy

プロダクトのビジネスやマーケティング戦略を学ぶ授業です。

なぜソフトウェアエンジニアがビジネス戦略を学ぶのか、と思うかもしれません。 ソフトウェアエンジニアはコードを書くだけでなくビジネスの意図を正しく汲み取って動く必要がある、という意図があります。

課題は、自分の好きな会社のプロダクトを選定し、その会社のプロダクトマネージャーとして、新規のプロダクトのビジネス戦略を考える、というものでした。 自分はSpotifyを想定してビジネス戦略を考えたのですが、課題の内容が非常に重く、土日はこれで終わってました。

Statistics For Decision Making

統計学の授業です。

ソフトウェアエンジニアとしてゴール設定に沿った正しいメトリクスを設定できるようになる、というのが授業の目標です。 統計学は一度学びたかったのでここで学べてよかったです。

Communications For Software Leaders

ソフトウェアエンジニアとして円滑なコミュニケーションができるようになるためのスキルを学びます。

プレゼンの練習や発表の構成方法、発表中の文章の組み立て方をこれまで学びました。 英語でのプレゼンはこれまでしたことがなかったので、緊張しましたが非常に勉強になりました。

Distributed Systems

分散システムの授業です。

この授業を取るとおおよそ以下のスライドの内容は理解できるようになると思います。

www.slideshare.net

授業の内容はネットワークの復習に始まり、2層コミットや分散ファイルシステム、ARIESやPaxosなどをこれまで学びました。

授業とは別に、プログラミング課題が出題されます。それが、超絶難しくて勉強になりました。

課題は、Goで分散ビットコインマイナーをつくる、というものです。

ただ、アプリケーションだけでなく、LSPというTCPもどきのネットワークプロトコルを実装するところから始まり その上でアプリケーションであるビットコインマイナーをつくる、という大層な課題でした。この課題で睡眠時間をだいぶ削られました。

この課題が終わると、俺はGoマスターだ、という自信が得られます。

以下にリポジトリが公開されているので興味がある方は実装してみてください。

github.com

形式手法につづき2番目に面白い授業でした。(授業が面白ければ1位だったかも)

授業のスライドも公開されているので、気になる方は読んでみてください。

www.composablesystems.org

大学やクラスの雰囲気

クラスの雰囲気

クラスメイトの国籍はざっくり以下の感じです。

  • 60% インド
  • 30% 中国
  • 3% 台湾
  • 2% アメリカ
  • 5% その他(サウジアラビア、日本、オーストラリアなど)

クラスメイトの集合写真がネットにさらされていたので以下を見るとなんとなく雰囲気がわかるでしょう。(自分はどこにいるでしょうか...???)

みんな3~4年ほどソフトウェアエンジニアを経験して、このプログラムに入ってきているという点は一緒です。そのため年齢層(主に20代)は比較的似ていますが、バックグランドは様々です。 コンピュータサイエンスを専攻した方はもちろん、物理専攻やサッカーアスリート出身の方もいました。

授業のプロジェクトでディスカッションをする機会がありましたが、皆 頭脳明晰で頭の回転が速く、これがCMUか...と実感しました。

大学の雰囲気

CMUというとオタク大学というイメージがありますが、あながち間違ってはないのでしょうか。

sow.blog.jp

クラスメイトにもアニメが好きな人は多く、アニメやゲームの話は共通の話題でした。 「日本から来たのか!俺はアニメで日本語を学んだんだ」とよく言われました。かくいう自分はアニメをあまり見てこなかったので、アニメみておけばよかった、、、と思いました。

クラス外で研究している方の話を聞くと、超有名な学会に論文を通していたり、面白そうな研究をしている方が多く、研究が非常に強い学校なのだと改めて認識しました。

英語

クラスメイトはさきほど述べた通りの国籍なのですが、英語は皆さん流暢です。話を聞いてみると中国の方でも米国大出身だったりとか、インターナショナルスクール出身で英語の素地が完成されている方が多いです。

自分の英語は、というと、雑談であればブロークンイングリッシュでなんとかやれますが、難しい問題のディスカッションになると説明に苦労することが多かったです。 特に3人以上のディスカッションだと、スピード感についていけないことがあり、何も発言できず。。。ということが最初は多かったです。 でも、途中から意味が伝わらなくてもいいからとりあえず何かしらは発言するように心がけていました。

授業については、基本スライドに沿うので問題はないのですが、質問が突如でてくると聞き取れないことが多く、??となることが多かったです。(たまに質問を言い直してくれる教授もおり、それだと理解できてたりする。)

課題などはリーディングやライティングが中心なので、特に困りませんでした。日本人はこの2分野は義務教育で強化されていて得意だと思うので、皆さん課題をやるのには苦労しないと思います。

アメリカでの生活

ピッツバーグとは

ピッツバーグとは、ニューヨークから東に飛行機で1時間ほど飛んだところにあります。ここです。2

https://www.travel-zentech.jp/world/map/usa/Pennsylvania/image/Map_of_Pittsburgh_in_USA_480x360.png

おそらく日本人でピッツバーグと聞いてすぐに、場所がわかる方は少ないのではないかと思います。 以下が特徴です。

  • 昔は鉄鋼業で有名な都市
  • 北海道と同じ緯度のため冬は寒い

特に冬は-10度ぐらいまで寒くなります。ピッツバーグに来てる方でも「マジで寒いから気を付けたほうがいい」と言われるぐらい冬は厳しいそうです。自分はまだ未経験ですがしっかり冬に備えようと思います。

観光名所 Mt.Washingtonから見たピッツバーグ

物価と円安

円安がものすごく進んでいるので、日本円換算だと鼻血が出るほど物価が高いですが、1ドル=100円ぐらいで換算すると、そこまで日本と変わらないと思います。

以下、例です。

内容 価格(ドル) 価格(円)
昼食 10~12 1500~1800
コーヒー 5 750
バス 2 300
お菓子 3~5 450~750

ただ、ピッツバーグは地方都市?のため、物価は安い方だと思います。サンフランシスコやニューヨークの物価がもっと高いかもしれません。

勉強

アメリカの大学生・大学院生は死ぬほど勉強している というのはよく聞く話ですが、実際のところ二か月体感してみた感想をまとめます。

実際のところ、自分は遊ぶ余裕はそこまでなく、平日・土日も机に向かっていることが多かったです。 理由としては、アメリカに来たばかりで英語に不慣れな部分がありリーディングやライティングが必要な課題でどうしても時間がかかってしまうためです。

実際に課題量もとても多く、一週間に以下の分量で課題が出ていました。

内容 時間
リーディング 200ページ 10時間
ライティング 20ページ 20時間
コーディング 200行ほどの課題 10時間
そのほか(クイズ・ディスカッションなど) 5問 10時間

ざっくり週に50時間~60時間は勉強している、という感じでした。 この2か月ずっとディスプレイを見続けていたので目がぐんと悪くなった気がします。。。

他のクラスメイトは、平日は勉強しつつ、金曜の夜はパーティーに出かけたり、土日はBBQしたりと、バランス感を保ちつつ、学生生活をエンジョイしてる人が多い印象でした。

食事

アメリカの食事は、日本と比べると選択肢がかなり限られます。 自分の現在の家の周りにもレストランが複数ありますが、だいたい以下でまとめることができます。

  • ピザ屋(60%)
  • アメリカン中華(20%)
  • その他(サンドウィッチなど)(20%)

また、品質、味も日本と比べるとそこまで美味しくないです。 「アメリカと比べると日本は食事がうまい」とはよく聞きますが、本当にこれは合っています。 これは日本人だけでなく中国やインドの方もおっしゃっていたので間違いないかと思います。

自分は毎日適当なピザや中華を日替わりで食べていました。

自分は食にこだわりがないので大丈夫ですが、きつい人はきついかもしれません。 自分もたまにラーメンは食べたくなります。

ピッツバーグ名物のPrimati BrosのPitt Burger

キャンパス内のアメリカンな中華

Ritter's dinerのホットサンド

コロナ

コロナはアメリカでほとんど終わった雰囲気が出ています。室内でもマスクをしてる方は1割ぐらいですし、大学内の教室でもマスクを着けている方は少数派です。 そんな雰囲気に呑まれて、マスクをせずに出歩いていたら、アメリカに到着して2週間後にコロナに感染しました

幸いにして3日ほどで回復して、後遺症もありませんでした。しかし、気を付けないと普通に感染するので要注意です。

そのほか

アメリカに来て以下のような出来事がありました。

  1. 日本からの別送品がほかの人の荷物にすりかわって届いた
  2. 加湿器を1個注文したらなぜか8個届いた

総じてアメリカはロジスティクスに問題があるんじゃないかと思いました。ロジスティクスは明らかにアメリカより日本の方が優れていると思います。

最後に

いろいろ大変ですが、CMUのMaster Of Software Engieering楽しいので、ぜひ来てください。ソフトウェアエンジニアの方でステップアップしたい方はおすすめです。 現在、このプログラムにいる日本人は私一人なので、非常に寂しい気持ちです。。。

来年の応募は今年12月までなのでまだ間に合いますよ。

Master Of Software Engieeringの概要はこちら。こちらはソフトウェアエンジニアの経験が3年必要です。 mse.s3d.cmu.edu

ソフトウェアエンジニアの経験がない学部生でも行けるMaster Of Software Engieeringもあるのでぜひご検討を。 mse.s3d.cmu.edu

来年お会いできるのを楽しみにしています。


  1. semesterは1年を半分にしたもので、spring/fallの2回に分かれている。

  2. 画像はhttps://www.travel-zentech.jp/world/map/usa/pittsburgh.htm よりお借りしました。