CMU INI MSIN 一年半的心得及課程簡介

8880
16
最近剛結束了在 CMU 的最後一個學期,趁著開始工作前的這段時間來分享一下這段時間的心得,以下的個人經驗或許不適用於每個人,但希望能給未來或現在正在 CMU INI MSIN 的學生們一點幫助。覺得有用的也可以幫我加個米!

在開始分享我的心得之前,我想先推一下這篇三年前的文: instant.1point3acres.cn,內容非常詳細值得一讀,本篇架構也是參考該篇文章撰寫。

課程介紹
MSIN 的選課是相對自由的(詳細的課程規定可參考: cmu.edu),當然由於其必修課中含有 24 學分的 Systems Core,如果你本身就是對偏底層的東西比較有興趣,這會是非常適合你的地方!但我認為就算你並非 Systems 或 Network 的強烈愛好者,你也會有一定的彈性去選擇其他的課程。當然如果你的興趣在別的地方,而你又剛好有錄取相關的 program,你可以再考慮一下要去哪個比較好。

值得一提的是在 INI 有一個稱為 Petition 的制度,其實就是一個讓你能夠稍微打破規則的管道。比如說,如果在目前的課程規範裡,你想選的課不會被 INI 計入學分,你可以透過這個 Petition 來申請將其計入學分。以我身邊朋友的經驗來說,只要你的申請理由夠充分,成功的機率還是蠻大的。這個制度有時甚至能讓你修原本不在規定裡的課來當作必修課。

我個人的修課藍圖
我自己當初會選擇來 CMU 就是因為這裡符合我興趣的課很多,然而事實是想在一年半內把自己有興趣的課都修完,並且同時保有足夠的時間找工作並非一件易事,特別是 CMU 的許多課又需要花不少時間。當時我是在入學之前就把一年半的課程排了個大概,盡量的讓每學期的工作量差不多,現在的我回頭看覺得這是個不錯的決定,成功地讓我每學期都維持在一個忙但不會太太太太累的狀態。或許不一定每個人都能在一開始就想好接下來的幾學期要上些什麼課,但稍微想一下我想肯定是會有所幫助的。在第一學期時,常常聽到有人因為作業繁重沒心思找工作,所以我覺得先預想一下每學期會長怎樣挺重要的。

以下會稍微對於我每個學期所修的一些課做個簡短介紹,可以根據興趣斟酌觀看

Intro to Computer Systems - Summer 2024 (15-513/14-513)

這門課就如同他的課名所說,內容包含 C programming, networking, parallelism 等等的基礎知識,可以幫助轉碼的同學們打好修習其他課的基礎,非轉碼的人也可以趁機複習一下。由於該堂課是很多其他 Systems 課的 prerequisite,也就是說要先修完這堂才能修那些課,很建議有空的話可以在入學前的暑假將其完成,雖說會因此需要多付一點學費,但能夠讓你之後的修課自由很多。

個人覺得這堂課的每個 Labs 都有經過精心設計,如果好好做能夠一定程度的極大化你的學習效果,很推薦給想要補強這方面知識的人。

Intro to Database Systems - Summer 2024 (15-645)

得先申明這堂課我並沒有真的上過,不過這堂課也是 CMU 很不錯的一堂課,所以我覺得我不該漏掉它。當初因為課程安排上我實在無法把這堂課放在任何一學期,所以我選擇在那個暑假自己看上課影片和做每個 projects。

首先這門課很不錯的一點是它秋季的版本是完全公開給任何人的(15445.courses.cs.cmu.edu),上課影片、手寫作業、projects 和 projects 的 online judge (Gradescope) 都是公開的,唯一沒公開的大概只有考試,甚至還有一個 Discord group 是有人會在上面討論的。現場上課還有另一個優勢是課堂上常常會邀請各種 Database 公司來演講順便 recruiting,Fall 2025 就邀請了 SpiralDB、ClickHouse 等公司,這些應該都是不錯的交流機會。

上課內容大致上是在教你如何實作一個 Relational Database Systems Management Systems (RDBMS),從比較底層的 Buffer Pool Manager 到 Hash/Tree Index, Query Execution 再到 MVCC,過程中你會學到各種實作一個 RDBMS 需要的知識。大部分的 projects 都是在他們特別為這堂課所設計的 github.com 上去實作課上學到的內容,比如前述提到的 Buffer Pool Manager、Hash Index、MVCC 等等,語言上是使用 C++。

這堂課 Fall 和 Spring 都有開,個人蠻喜歡 Fall 的 Andy Pavlo 的上課風格,不過朋友上過 Spring 的版本也覺得很不錯,兩個版本內容並沒有差太多。推薦給對實作 Database Systems 有興趣的人來修。另外從上一屆開始,這門課也被加到了 MSIN 的 Systems Core 裡,算是提供了一個很不錯的額外選擇。

Storage Systems - Fall 2024 (15-746/18-746)

這門課是 MSIN 的 Systems Core 之一,CMU 應該是少數有開相關課程的學校之一,是我在這一年半裡前幾喜歡的課。這門課剛開始的時候會問你要不要被加到 PDL Lab 的 resume book 裡面,可能對找工作會有一點點幫助,我自己不算是真的感受到就是了。

不過說實話課程內容比較偏門一點,可能並不是每個人在未來工作上都會需要用到,其中包含如何實作 Flash Translation Layer (FTL) 來有效地存取 SSD、基本 File System 概念、一些常見資料結構如 BigTable、Google File Systems 架構等等,對於入門 Storage Systems 非常不錯。

在上課時可以感受到兩位教授 Greg Ganger 和 George Amvrosiadis 都很真心地希望學生能從這堂課學到東西,我也特別喜歡這門課的考試方式,一次考試大約會有十題的簡答題,且並不是每道題都會有唯一標準答案,只要你的答案是合理的就能拿到分數。課堂上也同樣會邀請業界大佬來演講,比如現在在 Microsoft 的 Jai Menon(前 IBM, Dell CTO)也有來 Fall 2025 的 guest lecture。

另外,也有一些 MSIN 的人會說這門課相對於 Intro to Embedded Systems 和 Operating System Design and Implementation 來說不用花那麼多時間,因此選擇了這門課作為 Systems Core。Operating Systems 的話我可以肯定確實會花比較多時間,但 Embedded Systems 因為我沒有上過我就不確定了。

Distributed Systems - Fall 2024 (15-640)

MSIN 的學生都需要選一堂 Distributed Systems 課作為與 Storage, Embedded, OS 等等並行的另一個 Systems Core,詳請可見 INI 網站。在面試的 System Design 環節,我相信了解 Distributed Systems 能夠讓你回答得更順利。當然你也可以只針對面試比較容易考的部分上網自學,這應該也是可行的。不過我自己覺得把這門課好好完整學完,可以在回答面試問題時更有底氣。

Distributed Systems 有一些不同的版本,我自己修的是 SCS 的 Fall 版本。SCS Fall 的 project 比較著重在 high-level 的概念,作業使用 Go 來實作。而 SCS Spring 的 project 則是偏底層一些,使用的程式語言是 Java。Fall 的其中一個教授我覺得沒有很會教課,常常講到一半忘記自己在說什麼,但 project 本身還是可以的。另外 INI 也有自己開一個 Distributed Systems,我沒有很了解但印象中評價也還不錯。這門課會帶你了解實作或使用一個 Distributed Systems 所需要的基本必要知識,比如 consensus algorithm, two-phase commit, distributed file systems, transactions 等等。內容會跟 Database Systems 和 Storage Systems 有些許重疊,但我覺得 System 的課就是這樣,互相雖有一些重疊,但有時切入的角度並不相同,也正好能夠更全面性地了解一個主題。

Fundamentals of Telecommunications Networks - Fall 2024 (14-740)

MSIN 的 Network Core 的其中一個選擇,內容就是中規中矩的介紹 Network 的基本知識,大部分的 Lab 是在他們所建立的機器上利用 Wireshark 擷取封包並分析,如果是對於 Network 不太熟的人,應該可以透過這種方式學到不少。如果本身就熟悉 Network 的基礎知識,這門課應該不會花費太多時間,適合用來平衡一下工作量。另外我修課時有些人會覺得 Lab report 要寫蠻久的有一點煩,不過除此之外 Lab 內容本身我覺得是很幫助學習的。

Cloud Computing - Spring 2025 (15-619)

在一系列的個人作業中你會學到如何利用 Terraform, Helm Chart 等等自動化部署及 scaling,你也會學到 Spark 是怎麼運作的以及該怎麼使用它,還有各種與 cloud computing 相關的知識。不過這門課最大的賣點應該在於它的 team project,你需要和你的隊友一起實作並部署 web server,並且在限制地預算內極大化你的 throughput。Team project 可以說是展現從個人作業所學的集大成,在過程中你會了解在各種不同的 workload 之下你應該去使用什麼工具才能用最少的資金產生最大的效果。由於 team project 的評分方式是在一個給定時間內去對你的服務不斷送出請求來測試 throughput,你或許也能體驗到服務被玩壞而下線的絕望感,總之是一個要花蠻多時間但刺激有趣的課。

Parallel Computer Architecture and Programming - Spring 2025 (15-618)

這門課讓你對於 multithreading 的了解不再只是一堆 threads 在那邊輪流或者同時跑,而是能夠更深入地去分析任何 multi-thread program 為什麼慢?Bottleneck 在哪?如何證明 bottleneck 在哪?其內容包括 CUDA programming、GPU 基本架構、cache coherency、lock 實作等等,我覺得上完之後看待 threads 的眼光已經變得不太一樣了。另外在某些作業中,這門課會提供給你 Pittsburgh Supercomputing Center (PSC) 的機器權限,也是蠻新鮮的。這堂課同樣分成了 Fall 和 Spring 兩種版本,我修的那學期只有聽說 Spring 的作業把標準調得稍微高了一些,其餘內容應該沒有差到太多。

AI Applications in Information Security - Spring 2025 (14-795)

這門課因為不需要花費太多時間,所以我用來平衡那一學期的工作量,印象中上課的知識密度沒有很高,是適合聽聽放個鬆拿學分的課,David 也是個很不錯的老師。內容就不在此多作介紹了。

Operating System Design and Implementation - Fall 2025 (15-605)

這門課是我在 CMU 最喜歡的其中一門課,也是 MSIN 可選的 Systems Core 之一,因為需要投入相當大量的時間,通常對 OS 沒有太大興趣不太會修,我自己這學期也大概 90% 的時間都花在這了。

如果對於這門課有興趣,在選課的時候就需要多下一些功夫,由於課程難度比較大及需要的時間較多,教授會對於修課學生進行一些篩選,選課時會填一個表單問你有修過哪些 Systems 相關的課程,不過我推薦可以找一個教授或是你的 academic advisor 幫你寫推薦信,我認識的人和我自己都是通過這種方式選上的。

上課內容前半段包含一些基本的 OS 知識以及一些開發 OS 上需要注意的小細節,後半段則是比較 high level 的帶過各種主題,像是 security、file systems 等等,用意應該是讓你知道這些東西的存在,然後想了解再自己深入了解。

而這門課更重要的一部分是他的 project,這裡可以講講其中的兩個 project。Project 2 要求在他們所寫的 kernel 之上實作一個 user-level thread library,有點類似於自己實作一個 pthread,而 project 3 則是換你去實作底下的那個 kernel。Project 3 有大約六個禮拜的時間進行實作,期間大概率會不斷地進行 design/redesign、implement、debug 的循環,也會在這個循環的過程中更加理解一些原本以為相當直覺的觀念。若順利完成 project 3,還會有 project 4 為原本的 project 3 kernel 增添新功能,而實際內容是什麼就等著你自己來挖掘了。

值得一提的是,教授和助教在批改 project 時是相當仔細認真的,他們會逐行看過上傳的 project ,並對於整體設計、coding style、error handling 等等進行評比,我自己覺得光是看完教授的評比也能讓我學到不少。

總之,很推薦這門課給對 OS 有興趣又有大把時間可以揮霍的人。

Secure Coding - Fall 2025 (14-735)

這門課屬於 Security Core 之一。在這堂課裡,你大部分時間可能會花在解 CTF 和寫 CTF writeup。如果你熟悉 CTF 題目的經典分類的話,這門課大多著重在 Pwn,包含 stack, heap, format string 等等,也會稍微提到一點點的 smart contract。然而其他領域如 cryptography, web, reverse engineering 就不在這門課的範圍內了。過程中你可能可以學到入門 CTF pwn 的常用工具,以及如何像一個駭客一樣思考。我自己覺得就算以後沒有要從事 security 相關的工作,CTF 也能幫助你從不同角度去看待自己寫的程式。但可能也不是每個人都喜歡解 CTF 或是覺得自己需要這個不同的角度,所以這部份就見仁見智了。

Fundamentals of Business and Management - Fall 2025 (14-776)

這是 MSIN 的必修,不需要花太多時間,在這一學期內,你會和你的其他組員們模擬經營一家公司,通過在課程網站上調整各式參數來進行公司決策並和其他組的公司競爭,其實應該是蠻有趣的,不過我自己對這部分沒有太大的興趣,所以也沒有太多印象上課上了什麼。

Intro to Rust Lang - Fall 2025 (98-008)

這是由學生所授的課程,也因此是不計入學分的。當初這門課的創立初衷是為了讓大家能夠更容易進入 Rust 的世界,作業通常一個禮拜也只需要花一小時左右,我自己覺得如果對 Rust 有興趣但沒有經驗的人,這會是一個不錯的課。

找工作
Intern 上岸狀況
以今年的情況來說,我覺得還是沒有那麼好找的。以我自己統計身邊的朋友及我的 LinkedIn connections 的狀況,MSIN 和 INI 整體的上岸率都約為 75% 左右,實際數字分別為 28 / 3647 / 63。當然因為是從我的 connections 所統計出來的結果,可能不夠全面也有偏差的可能。cmu.edu上也有提供統計數據,但據我所知有一些人可能沒有填那份回報表單,比如我就忘記填了,所以那個資料也可能不是完全準確的。

時間上的話,我自己的狀況是在上學期上了一間大廠 SWE intern,Meta, Microsoft, Apple, TikTok 等等大廠應該都在上學期就有開始動作。下學期則有很大一部分人被 Amazon 撈上岸的,上述 INI 的 47 人中就有 17 人最後是在 Amazon 實習。除了 Amazon 之外,有人錄取的公司還有:Apple, Meta, Microsoft, TikTok, Databricks, Snowflake, Arista Networks, Palo Alto Networks, Lucid Motors, Confluent, DoorDash, Belvedere Trading 等等。

Full Time 上岸狀況
我自己的狀況是有拿了 return,但後來選擇了另一間中廠,其他應該也有不少人是拿著 return 回到了原本實習的公司。Full Time 因為還有些人還在找,所以我也不太清楚整體的情況。我自己是覺得我有面試的不是單純考投履歷得來的,所以我想內推和 networking 應該在現在這個情況下更顯重要,當然也不能排除可能是我的履歷寫得不好啦。

Career Fair
CMU 每年秋季都會有一場為期三天的 career fair,軟體大廠通常不太會出現在這場 career fair,不過中等規模的公司倒是有一些,像是 Snowflake, Databricks 都會來,另外 quant 的大廠如 Jane Street, HRT 印象中也都有來。我自己覺得這場 career fair 對於沒有美國公民身分的人來說幫助有限,但還是有聽說有人藉此拿到面試機會。

除了這個 career fair 之外,CMU 還有一些 virtual career fair,我自己完全沒有去看過所以不清楚狀況怎麼樣。

我個人覺得會比較有幫助的是各大廠自己在 CMU 辦的 recruiting event 等等,例如 Apple, Nvidia 等公司都有自己獨立辦一個,這些有時甚至會有現場面試機會,非常值得去看看。不過由於通常都會非常多人,真的非常想去的話可以提早一點去排隊。除了這種比較大規模一點的,有些公司會來 CMU 辦一些 tech talk,而這些 tech talk 常常在開始或結束時會有個 QRCode 給你上傳 resume,我不會說每一次都非常有用,但我想肯定是會比自己在網站上投有用一點點的。

INI Support
和我在開頭推薦的文章不同,INI 現在的 career advisor 是 Daniel Carr,我個人沒有和他約過 1:1 的 meeting,身邊約過的朋友則是有人覺得有幫助,有人則覺得效果不大。Daniel 在第一學期辦了不少的 workshop 來告訴我們找工作時的心態、技巧、簽證的事項等等,我覺得在第一學期事務繁忙的狀態下,這些 workshop 還算是幫我省了一些自己找資料的時間。Daniel 偶爾也會在 INI 的 Slack 群組中分享一些職缺資訊,不過大部分應該都是能自己在網路上找到的。

我想 INI 更有用的資源或許是 INI 的學長姐們,在 LinkedIn 上禮貌地詢問職缺及內推相關資訊,可能能讓拿到面試的機會增加一些。Slack 上有時也會有學長姊分享的職缺資訊,並且有時會說可以直接和該學長姐聯絡。而 Handshake 的部分我自己雖然有在上面投遞一些履歷,但基本上沒有聽到任何回覆。不過也的確是有人從 handshake 獲得一些機會的,所以我覺得有時間看一下不虧。

找工作氛圍
我想整個 CMU 的找工作氛圍都是非常的強烈,大家大多也都是會互相幫忙的,這裡不怕你因為環境而怠惰,只怕因為太過高張力而倦怠。有時當自己找工作不太順利時,大家見面又會常常問起找工作的情況,難免產生一些無力或挫折。我想怎麼處理這份無力和挫折,讓自己能稍微地享受著 CMU 的生活,並同時持續穩定地找工作,會是這一路上相當重要的課題。

生活
環境
相對於 New York, Seattle 等地方來說,Pittsburgh 肯定是比較沒那麼熱鬧,娛樂也會比較少一些。不過一般生活機能都還是有的,多數人也不太需要買車即可生活。也多少因為這些原因,Pittsburgh 的治安在美國來說可以說是非常好,特別是在 CMU 附近走在路上還是蠻讓人放心的。當然不管在什麼樣的地方還是得隨時保持一些警惕,雖說這學期幾乎沒什麼收到,學生們偶爾還是會在 CMU 發來的 alert 上看到一些事情發生。

花費
我想這跟個人生活習慣關聯很大,一般價位的 apartment 可能大約落在 800 USD 到 1200 USD 之間,吃的部分如果是自己煮,一個月我最低聽到只花了大約 300 USD,一般人可能估計 500 USD 左右。在外用餐的話一餐則是大約 12 ~ 25 USD 不等。我自己第一學期算是一半自己煮一半外面吃,吃的部分大概花了 700 USD 吧。交通方面,CMU 的學生證是可以免費搭公車的,學校也有提供一些校車路線,排除掉自己開車或是搭 Uber 去一些比較難抵達的地方,基本上是不太需要花什麼錢的。

學費的話大家可以根據cmu.edu和自己的情況算一算,每學期大概 30000 USD,保險的話每學期大約 3000 USD。而一般人獎學金通常不會太多,我沒有真的去問過每個人都拿了多少,但印象中大概也就是三學期總共 5000 USD ~ 15000 USD。

一點點收入
一般畢業前的收入來源應該就兩個,TA 和暑期實習。TA 根據 cmu.edu上的資料收入大約是每小時 13-17 USD。如果是國際學生身分的話,由於一個禮拜最多只能工作 20 小時,一個月最多收入也就是大概 1000 USD 左右。其實在有其他課的狀況下,應該也很難花更多時間在 TA 上了。暑期實習收入因為根據去的公司和地區會差異很大,也是一個比較難自己操控的變因,就不在此多說了。如果好奇的話可以自行大概查一下 levels.fyi 等網站抓個感覺。

結語
對於我自己來說,這一年半我很慶幸自己選擇了這裡。當初的我嚷嚷著要在 CMU 把那些 systems 課都上一遍,成為 systems 大師,那是我對自己這趟旅程的期許。而找工作因為有點運氣成分,我告訴自己努力就好了不用太在意。一年半過去了,雖然離成為大師可能還差一大截,但我確實感覺自己學到了不少,也很滿意一路上的成長。

最後如果有問題的話也歡迎詢問,覺得有幫助的話也可以順手加個米,希望大家也都能夠在自己選擇的道路上獲得想要的體驗!