Georgia Tech Spring 2024 振り返り
Georgia Tech OMSCSでの2学期目が終了した。Spring 2024は1月から4月の約4ヶ月間で開講され、以下2つのコースを履修した。
自分自身の備忘のため、それぞれのコースの内容と、受けてみた感想を振り返りたい。加えて、今期は定期テスト、グループワーク、複数履修と多くの新たな経験があったので、OMSCSに興味がある人がそういった雰囲気を知る一助になれば嬉しい。
CS6250: Computer Networks
このコースでは毎週レクチャーがあり、OSI参照モデルの復習から始まり、ルーティングアルゴリズム、SDN、セキュリティ、CDNなど様々なトピックをカバーする。受講した内容に対する毎週の小テストに加えて、2回の定期テスト、そして以下の5つのプロジェクトによって最終成績が決定される。
Spanning Tree Protocol
Spanning Tree Protocolはブリッジがネットワーク内でループを起こさないように制御するためのプロトコルで、論理的に冗長なリンクを遮断し、ループのないトポロジを構築するためのアルゴリズムを実装した。
Distance Vector Routing
Bellman–Ford algorithmによって算出されたそれぞれの経路のコストに基づいて、ルーターがパケットを転送する際の最適経路を算出するアルゴリズムを実装した。意図的に無限ループに入るトポロジが用意されており、そのようなコーナーケースを適切に対処する実装は難しかった。個人的に一番苦労したプロジェクトだったが、同時にアルゴリズムを理解するのにとても役立った一番お気に入りのプロジェクトであった。
SDN Firewall
このプロジェクトでは、特定のルールに基づいてネットワークトラフィックをプログラム的に制御する方法を学んだ。与えられた要件を満たすルールを設定ファイルに定義し、そのルールに基づいてMininetを用いて作成した仮想的なネットワーク構成のトラフィックを制御する。実装にはPythonベースのオープンソースOpenFlow SDNコントローラであるPOXを利用した。
BGP Hijacking
このプロジェクトでは、BGP(Border Gateway Protocol)の脆弱性を探るために、特定の自律システム(AS)が悪意を持って他のASからプレフィックスをハイジャックし、トラフィックを不正に取得する「BGP Hijacking」攻撃を再現した。Mininetを使用して、複数のASが含まれるネットワークトポロジーを構築し、実際にこの攻撃をシミュレートすることで、BGPのセキュリティの問題点を学んだ。
BGP Measurements
このプロジェクトでは、PyBGPStreamを使ったBGPデータの分析手法を学ぶ。具体的には、BGPルーティングテーブルの時間経過による変化から特に成長しているASを特定したり、不審な活動の検知に活用される、プレフィックスのアナウンスと撤回の持続期間を計測したりする。ネットワークの知識よりはプログラミング力が問われている気がした。5つのプロジェクトの中では一番得るものが少なかったように感じる。
レクチャーはあっさりした説明のみであまり有益とは感じなかったが、定期テストとプロジェクトは理解を深めるためにとても役立った。特にプロジェクトは、抽象的なコンセプトを具体的な実装に落とし込むことで理解を深められるよう、どれもよく設計されていた。ただし、ある程度お膳立てされたプログラムに実装を付け足すようなものが多く、ゼロから実装するような内容の方がより実りが多かった気がする。
最終成績は95.26%でAを取得した。
CS6300:Software Development Process
こちらのコースはタイトルの通り、UML、アーキテクチャ、デザインパターン、テスト手法、アジャイル開発などソフトウェア開発に関連する幅広いトピックを扱う。毎週のレクチャーとプロジェクト(うち1つがグループプロジェクト)によって構成され、テストはなし。
特筆する点があまりないのだが、グループプロジェクトは初めての経験だったので、ざっくり振り返ると以下のような感じだった。
課題内容: Androidアプリの共同開発
グループの決め方: タイムゾーン、調整のつきやすい時間帯などを確認する事前アンケートの内容に基づいて、運営側によってグループ分けが行われる。
メンバーのロケーション構成: アメリカ2人、香港1人、日本1人
コミュニケーション方法: Teamsで非同期のコミュニケーションを取りつつ、基本的に日本の土曜日の昼(アメリカの金曜日の夜)の時間帯でMTGを実施。
所感: 心配していた英語はあまり問題にはならなかった。事前アンケートのおかげもあり、同期コミュニケーションも日本からでも問題なかった。普段ほとんど交流することのない学生の雰囲気を知れて良かった。
コース全体としては、特にテストカバレッジの考え方など、一部理解が曖昧だった内容を復習することで今後より自信を持って運用できるようになったと感じる一方で、新しい発見はあまり多くなかった。あえて受ける必要はなかったかもしれない。
最終成績は96.63%でAを取得した。
最後に
新しいチャレンジの多いセメスターだったが、無事良い成績で修了できて自信に繋がった。2つのコースを同時に進めたことで、片方のコースの中間テストと他方のコースのグループプロジェクトの大詰めとが重なる大変な時期もあった。しかし、早めに取り掛かり見積もりを立てれば、今後もうまくやっていけそうな感覚も得られた。
これでプログラムの3/10が終わった。これまでプログラムに慣れるために比較的易しめのコースを選択していたが、今後はより発展的な内容にもチャレンジしていきたい。
Summer 2024ではSoftware Analysisという、ソフトウェアの分析とその限界を知るコースを履修する予定だ。現在勤務している会社では、このあたりに熱心な方が多く、特にStaff Engineer以上の主な関心ごとの1つのように自分には見えている。将来的に自分もこの分野に積極的に貢献していきたいと考えているため、コースを通して足がかりを作れたらと思う。
この記事が気に入ったらサポートをしてみませんか?