見出し画像

Georgia Tech OMSCS 2年目総括

今年もまた1年生き延びることができた。昨年にならって振り返っておきたい。

この1年で履修した3科目と全体的な振り返りを書き残しておきたい。夏学期の授業を履修撤回したので、OMSCSの卒業に必要な授業のちょうど半分を終えたことになる。

科目毎の内容や学期毎の振り返りは、Xブログに都度書いている。この記事では、自身がこれからOMSCSで履修を進めていく上での教訓を中心にまとめる。授業の紹介を意図したものではない。

CS 6200 Introduction to Operating Systems

シラバス

前年はOMSCS初年度ということで入門的な授業を履修したのに対し、2023年はComputing Systems専攻に直接関係あるものを中心に履修した。OS「入門」とはいえ、OSに限らず後の授業につながるような分散システムトピック、提出課題で多く接することになるC/C++での実装、OSに限らずソフトウェアエンジニアリングのいたるところで見られるデータ競合を防ぐためのしくみとパフォーマンスのトレードオフ、Kubernetesなど他のシステムの抽象化設計に見られるようなスケジューラの機構など多くのトピックを学ぶことができた。

まなび、教訓、よかったこと

  • 4プロジェクトあったうち最初のプロジェクトが一番難しく感じ、提出締め切りが延長された上で締め切り2時間前に実装を終えた。この授業の理解の上に自分の履修計画が成り立つためかなり焦ったが、最終的に平和な成績で終えられてよかった。プロジェクトが簡単な順番に並んでいるわけではないようなので、最初から悲観的にならず、線形に難易度が上がっていく想定ももたず、授業レビューで課題が厳しいタイミングを見極めながらがんばるべし。

  • どうしようもないことだが、転職活動時期、コロナ罹患、ほぼ初心者であったC言語での実装も重なってしまい、かなりきつかった。授業を含め、なんとか生活を維持できる大きめのイベントは2つまでなので、3つ目以降は諦めるべし。

  • 課題でつまずくのは、課題のメインテーマではなく、変数の初期化など通常の注意や普段の業務では適切なツール使用で回避できるものばかりだった。不慣れな環境でこそ、意図した場所で意図した値になっているか確認しながれ進めるべし。

  • 学業に費やした時間は、1月が21時間、2月が135時間、3月が98時間だった。コースのレビューサイト通り、3ヶ月でならせば週平均負荷20時間だったが、仕事と両立する上では平均負荷よりもMaxを気にする必要がある。学期開始前に時間がとれる場合は、最も厳しそうな課題に関連する概念の理解やツールの習熟などの予習を通じてリスクを低減すべし。

  • ChatGPT、ChatPDF、Notion AIなどを課題の設計の壁打ち、バグ探し、テスト勉強中の概念理解、深掘り質問、授業内容要約に活用できてよかった。

  • ある程度コアな部分は終えた上で、旅をしながら課題を仕上げる経験ができてよかった。旅するときは旅に集中するに越したことはないが、旅のお供になる程度に自然な行為になればいいなとは思う。

  • つぎの書籍を利用し、C言語や関連トピックの学習を並行できてよかった。

もっとCPUの気持ちが知りたいですか?

授業内容の詳細は提出課題を中心に以下のツイートにぶらさげている。

CS 6290 High Performance Computer Architecture

シラバス

OSをよりハードウェア視点で学べるということで履修した。事前にCS6200でも参照した『プログラマーのためのCPU 入門 CPU は如何にしてソフトウェアを高速に実行するか』を活用して予習も行った。最終的には履修撤回することになってしまった。

まなび、教訓、よかったこと

  • 仕事と折り合いをつけることができず、履修撤回することになってしまった。夏学期ということで、授業スケジュールがタイトな中課題をこなす以上の時間を確保できなかった。テスト前に授業を一気見するも中間試験でふるわず、挽回が難しい状態で心も折れたので見送ることにした。しばらく週3くらいで働く業務委託で仕事を探すことも考えたが、現職で勤怠面の配慮をいただけることになり、残りの履修計画に希望を見いだせるようになった。

  • OSやCPUに関連するハードウェアの話は自分にとって(少なくとも課題に正確に答えられる形で)すんなり理解できる話ではなく、おそらくコンパイラの授業でもつまずきそうだ。よい登り方は見いだせていないので、出直す。

CS 6210 Advanced Operating Systems

シラバス

春学期よりも応用的なOS関連の内容を扱った。関連トピックの多くの論文を解説するような内容を扱う講義が多かった。2024年か2025年に受ける予定の分散システムの基礎にも触れている。2024年春学期に受けるCS 6211 System Design for Cloud Computingは、CS 6210と同じ教授が担当しており、CS 6210のA gradeが推奨(ハードリミットではなく、授業についていける目安)されているということで、試金石となる授業だった。

まなび、教訓、よかったこと

  • 論文を読み、実装する課題が2つあったのがよかった。バリア同期のアルゴリズムを複数実装して比較する課題では、どう実装しても動くようにはなるものの理論に基づくパフォーマンスの差異が見出だせるかどうかはなかなか確信が持てなかった。自分の実装のパフォーマンスのグラフと、論文が示すグラフの形状が一致してようやくこれで大丈夫かなと思える。自分たちでインプット・アウトプットの正しさを定義する普段のビジネスロジックの実装とは異なる難しさがあり、新鮮だった。MapReduceの課題では、論文を読んで理解したつもりになっても、いざ実装してみるとあやふやな部分が多かった。その分意図通りの挙動を示したときの感動が大きかった。いずれも検証のための枠組み(簡単なテンプレート、ローカル用のテスト、自動テスト、フォーラムやSlackで助けを求めるしくみ)が準備された上での挑戦ではあるが、自力で一連の検証ができるようになると一層世界が広がりそうだ。

  • 春学期の苦しみを踏まえ、事前に全課題の大体のスケジュール、難しい課題、課題に関連する論文などの把握や、難しそうなポイントの予習を行えたのはとてもよかった。平均週20時間、最大週46時間を費やしたので、準備がなければ扱いきれなかったかもしれない。一方で、2つの試験を1週間勘違いしてしまったのは、全スケジュールをGoogleカレンダーに同期しているはずという慢心だったので次学期は気をつける。2つ論文を要約する課題も、プロジェクトで必ず読むものに絞ってしまい、他の論文を読む時間を作る努力ができなかったので改善ポイントである。

  • 上の論文の話とも関連するが、大量の論文が参照される授業だったにもかからわず、全体を読んだのは2つにとどまった。一言一句読まないにしても、生成AI系ツールを使ってざっと内容把握する手段・習慣を確立したい。

  • 3回の試験があったが、いずれも再採点リクエストを合理的な範囲で行った。TAの採点に対して根拠を示して異議を唱えるというものである。全て記述式の試験で採点自体が寛大だったが、採点のぶれも大きいということでほとんどの再採点リクエストは受け入れられた。素点にして10点弱に相当する。通った再採点リクエストが1つでも通っていなければ1つ下の成績だった。たとえ成績へのこだわりが本質的なものではないにしても、卒業要件に一定以上の成績が含まれること、前半でよい成績をキープできれば後半の授業で本当に興味がある難しい授業を成績気にせず履修できること、つぎに履修する授業で明確に成績について触れられていることを考えると半ば義務であるし、正しい回答を減点されるいわれはない。

  • 何よりも気になるのは、説明できる深さで授業の内容を理解していないこと、期末試験を終えて1ヶ月程度経った今では頭にほとんど残っていないということだ。別角度で同じものを何度も追っていればそのうち理解も進むかもしれない。あまり実利は求めず在籍しているが、だからこそあまりにも理解度が低すぎると何のために苦しんでいるのかわからなくなる。ブログでも触れたように、学びのフォーム改善もプライベートOKRに据えて取り組んでいきたい。知らないものに触れ、わかる喜びを感じられる後半戦を目指す。

授業内容の詳細は提出課題を中心に以下のツイートにぶらさげている。

3年目に向けて

2024年はつぎの授業を履修する予定だ。

最近追加されたCS 7650: Natural Language Processingもよさそうなので、分散システム、セキュリティ、ネットワーク以外に振ってみるのも楽しいかもしれない。

いいなと思ったら応援しよう!