愛鋒貝

標(biāo)題: 盤點CMU SCS計算機(jī)學(xué)院的硬核系統(tǒng)課 [打印本頁]

作者: 希慕阿巴阿巴    時間: 2023-4-10 22:31
標(biāo)題: 盤點CMU SCS計算機(jī)學(xué)院的硬核系統(tǒng)課
開篇

時光如梭, 白馬過隙. 在北美知名技校的兩年讀研時光很快就要過去. 臨畢業(yè)前夕, 想要來記錄盤點一下自己上的SCS計算機(jī)學(xué)院下的15-XXX開頭的硬核系統(tǒng)課, 為后來者提供一些介紹和見解. 兩年下來, 雖然自己也勉強(qiáng)算是本科CS科班出身, 但是本科的課程和在CMU這里感覺難度上天壤之別, 也算是回爐重造"轉(zhuǎn)碼"了.
其實項目一開始的時候我選的是Analytics機(jī)器學(xué)習(xí)方向, 但學(xué)了一學(xué)期后果斷決定半路跳車去學(xué)System系統(tǒng)方向. 原本三學(xué)期就可以畢業(yè)了, 愣是為了把System Track想上的課上完多在匹村帶了一學(xué)期. 做決定的時候其實內(nèi)心也有過掙扎: 真的有必要學(xué)這些課嗎? 畢竟現(xiàn)在的北美市場找工作只要會做Leetcode就行, 剩下就是看命和運氣.
但或許是因為年輕, 我的觀點或許是錯的. 我總還是覺得有些東西只有在學(xué)校里才能靜下心來學(xué)扎實了, 未來才能在技術(shù)的道路上走得順利走得長遠(yuǎn). 未來要工作20年, 30年, 在此之前多花一學(xué)期的時間扎實基礎(chǔ)應(yīng)該還是不虧的. 但愿如此吧!
15-513 Introduction to Computer Systems

版本: Spring 2022
傳送門: Introduction to Computer Systems
性質(zhì): 公開課
編程語言: C
個人評分: ★★★★★
課業(yè)壓力: ★★★★☆

這門課便是網(wǎng)上無人不知無人不曉的計算機(jī)系統(tǒng)入門神課, CSAPP這本書的配套課程. 在知乎上我看到過好多同學(xué)自學(xué)CSAPP并做這門課配套的lab, 以及對一些lab的詳解, 學(xué)習(xí)氣氛非常濃厚.
課程的內(nèi)容主要是針對現(xiàn)在計算機(jī)系統(tǒng)的一個比較廣泛, 但點到為止的介紹. 其中的一些核心概念包括:
Labs主要是以C語言為主, 都是單人project, 其中attack labbomb lab是人眼分析解讀匯編并寫輸出.
總體而言, 個人覺得這是來CMU但凡學(xué)計算機(jī)相關(guān)的專業(yè), 絕對值得一上的神級基礎(chǔ)課. 很多時間感覺, 上和沒上過這個課是一個"有無基本系統(tǒng)知識素養(yǎng)"的分水嶺.
15-619 Cloud Computing

版本: Spring 2022
傳送門: CMU 15-619 Spring 2020 Home Page
性質(zhì): 封閉課
編程語言: Java & Python
個人評分: ★★☆☆☆
課業(yè)壓力: ★★★★★

這門課是15學(xué)分的云計算導(dǎo)論, 其實對他的評價是比較矛盾的. 一方面來說, 這課給我?guī)砹嗽贑MU最狠的熬夜的一學(xué)期, 做team project的時候常常是一周和隊友一起熬大夜: 中午12點在自習(xí)室集合, 坐牢坐到第二天早上4、5點太陽出來了再離開回家睡覺. 這樣的日子一周能有兩三天 (要夸一下我的兩個隊友都是神仙隊友, 一起干活毫不馬虎都全力以赴). 另一方面來說, 這門課的team project真的是非常扎實, 是那種可以寫在簡歷上和面試官好好吹噓一番的有深度的感覺. 但其實現(xiàn)在感覺, 課上很多搞配置的那些知識又遺忘的差不多了, 可能以后重新需要的時候可以快一點的pick up.
先說一下每兩周一個的單人individual project:
再來說說噩夢般team project:
三人組隊. 這個project一共分三個階段, 會先讓你寫出3個microservices然后優(yōu)化他們的表現(xiàn), 部署在AWS上用不同的配置和容器. 在階段二和階段三的時候分別有一小時的live test來橫向比較所有team的表現(xiàn)來排名, 排名高的有extra bonus points. 這個team project大部分時間都在試錯, 因為從零開始部署一個Service會需要經(jīng)歷各種各樣奇怪的問題: Docker build不起來, build了但跑不了, load balancer連不上網(wǎng), load balancer特別慢, database連不上, database disk I/O太高被AWS卡住了, etc. 每一步都是血與淚與熬大夜的經(jīng)驗教訓(xùn)所得. 很多時候非常氣人的是, 在piazza上如果你去提問問助教問題, 助教要么是不回復(fù)你, 要么是回復(fù)得牛頭不對馬嘴, 或者索性謎語人說不能告訴你要自己去解決. 很多時候真的是看了piazza感覺生氣得當(dāng)場要腦淤血昏過去了.
好在在三人一起熬了一學(xué)期努力下, 最后我們的team project還算是成功, 在二階段和三階段都分別拿下了全班前三的成績 (其實發(fā)現(xiàn)前幾名基本上全是同屆的MCDS的同學(xué), 因為這是必修課).
總體來說, 我覺得這個課其實是比較綜合的, 并不是很上來大家一來CMU就直接上. 我有聽說別的學(xué)院轉(zhuǎn)碼的同學(xué)一來就選這門課, 說是因為這門課是online的所以沒有SCS名額限制才能選的上. 我覺得這個是比較誤區(qū)的, 一上來就上這個課會讓你的一學(xué)期生活非常悲慘和倍受打擊, 我覺得大可不必. 如果是為了了解一下云計算方面的知識, 我覺得上本科版本課號的15-419就可以, 因為本科版本不需要做team project, 那樣的話體驗還是會更不錯的.

(, 下載次數(shù): 407)

階段三的最終排名, 我們組叫ThreeCobblers, 寓意三個臭皮匠頂一個諸葛亮

15-645 Database Systems

版本: Fall 2022
傳送門: CMU 15-445/645 :: Intro to Database Systems (Fall 2022)
性質(zhì): 公開課
編程語言: C++
個人評分: ★★★★★
課業(yè)壓力: ★★★☆☆

這也是一節(jié)有名火爆的數(shù)據(jù)課方向的公開課, 網(wǎng)上也有不少人自學(xué)做labs. 之前寫過一篇關(guān)于這門課的文章, 可以移步:
總體而言是非常好評的這節(jié)課.
lectures來說, 教授Andy他是真的懂?dāng)?shù)據(jù)庫的, 講得非常清楚, 課上還經(jīng)常會直接terminal打開mysql, sqlserverpostgres開始demo做演示. 核心內(nèi)容包括:
labs來說, 這節(jié)課BusTub的labs自成一體, 單人projects, 選取4個比較重要的compoents讓同學(xué)實現(xiàn). 我上的這個學(xué)期分別是:
個人感覺, 從難度來說P2 > P1 = P4 > P3. 不知道為什么, CMU很少課是用C++的, 要么是C要么就是Python. 所以這節(jié)課還可以操練一下Modern C++, 感覺還挺珍貴的. labs都是在gradescope上自動評分的, 可以無限次提交. 而且TA的回答問題非常到位和迅速, 給予很大的幫助 (和上面15619形成了鮮明的對比). 而且數(shù)據(jù)庫這個概念本身, 在實操中就非常常用,所以我覺得在眾多15-XXX系統(tǒng)課里是屬于優(yōu)先級比較高需要上的.
此外, 這節(jié)課的gradescope有個排行榜, 一學(xué)期下來累計在排行榜上排名高的, Andy會發(fā)一件BusTub短袖衣服. 穿著這衣服在CMU校園里逛的時候可神氣了!

(, 下載次數(shù): 387)
15-641 Computer Network

版本: Fall 2022
傳送門: Networking and the Internet, Fall 2022
性質(zhì): 封閉課
編程語言: C
個人評分: ★★★☆☆
課業(yè)壓力: ★★★☆☆

計算機(jī)網(wǎng)絡(luò)也算得上是計算機(jī)教育體系里非?;A(chǔ)的課程了. 在本科階段我沒選上計算機(jī)網(wǎng)絡(luò)的選修課, 所以心里一直有點遺憾念叨著這門課, 來CMU強(qiáng)行拉著我的隊友總算圓夢了. 這門課人數(shù)挺少的, 在一個小教室里上大概30,40個人, 并不算是一門熱門的SCS系統(tǒng)課.
教授Justine Sherry's Homepage 比較的風(fēng)趣幽默, 很典型的美國白人女孩兒風(fēng)格, 上課還會給大家?guī)浅? 課程的內(nèi)容其實還比較分散, 大概2~3節(jié)lectures就能講完一個話題. 核心概念有:
這節(jié)課一共有3個雙人組隊labs的, 其實內(nèi)容本身還算比較的有趣solid, 唯一不足的地方就是自動評分的gradescope時常有bugs, 比如它卡時間卡的非常緊, 你一個包非得在1秒到2秒之間到, 你0.8秒和2.2秒都算你錯, 而且gradescope掩掉了stdout所以你并不知道到底是哪里出了問題, 究竟是代碼crash了還是只是單純的和他的要求不符等. 具體的3個labs內(nèi)容包括:
這節(jié)課其實在所有SCS系統(tǒng)課里, 并算不上是優(yōu)先級特別高的課. 大部分人的工作中, 對計算機(jī)網(wǎng)絡(luò)有個大致的了解其實就可以了, 很多細(xì)節(jié)最多只能算是錦上添花的good to know.
但我個人somehow非常喜歡這些計算機(jī)網(wǎng)絡(luò)的話題內(nèi)容. 在十二月份結(jié)課后的圣誕節(jié), 我決定把這節(jié)課的labs的內(nèi)容合起來規(guī)整一下做成一個自己的項目 -- 一個輕量的C++網(wǎng)絡(luò)庫. 持續(xù)更新中, 現(xiàn)在github已經(jīng)收集了100顆星星?. 我在知乎也有直播這個項目的進(jìn)度, 希望有興趣的同學(xué)可以關(guān)注并star一下我的Turtle.
15-640 Distributed System

版本: Spring 2023
傳送門: Distributed Systems
性質(zhì): 封閉課
編程語言: Java為主
個人評分: ★★★
課業(yè)壓力: ★★☆☆

這門640分布式系統(tǒng)應(yīng)該是很多來CMU上課的同學(xué)的心中夢課了. 它有兩個版本, 秋季很潮流是用Go來做labs, 春季比較復(fù)古是C(1個project)和Java(3個projects).
教授Satya 資歷非常老, 是上個世紀(jì)80,90年代主導(dǎo)編寫CMU的andrew file system的主力軍. 他的lectures風(fēng)格是那種, 一節(jié)課80分鐘只講了10頁PPT但卻讓你聽的津津有味的類型. 我個人覺得這種風(fēng)格挺不錯, 把要講的東西都講的很清楚, 雖然也有別的同學(xué)覺得講的太慢了. 不過可能是因為上過不少系統(tǒng)課了的話, 并沒有覺得在這門課里學(xué)到很多新東西, 大多時候都更像是一種復(fù)習(xí). 核心概念包括:
一共有4個單人project, 前兩個代碼量稍微大一些, 后面兩個好做一些. 內(nèi)容分別是:
整體而言, 這節(jié)課還是比較值得一上的, 尤其是在如果你只能選很有限的SCS系統(tǒng)課的限制下, 這門課因為比較包容萬象, 優(yōu)先級應(yīng)該比較高. 但也能感覺到課上有些同學(xué)的基礎(chǔ)比較薄弱, 應(yīng)該是沒上過15513就來上了這門課. 我是比較喜歡在piazza上回答問題的, 但有些同學(xué)的問題實在是有點好笑讓人忍俊不禁, 沒法回答.
15-618 Parallel Computer Architecture and Programming

版本: Spring 2023
傳送門: 15-418/15-618: Parallel Computer Architecture and Programming, Spring 2023
性質(zhì): 封閉課
編程語言: C++
個人評分: ★★★☆☆
課業(yè)壓力: ★★★★☆

這門課我覺得可能是SCS 15-XXX課里對硬件講得最多的一門課了. 在本科階段的時候就上過一門并行計算的, 當(dāng)時對那些機(jī)器結(jié)構(gòu)啥的學(xué)的迷迷糊糊, 在這門課里總算是都學(xué)明白了. 但這門課的workload有點大: 首先它每周要上3節(jié)lectures,  一節(jié)課可以講上100頁PPT, 快得像開飛機(jī).  lectures上70%學(xué)期, 2次考試. 然后放你4周時間做一個final project.
課程的核心概念非常的多和扎實, 包括:
整個學(xué)期有4個雙人組隊的projects:
雖然我在上面輕描談寫的描述了這4個projects, 其實他們都是有很大的workload的. 首先, 每個projects都對應(yīng)一種不同的并行編程模型語言, 要寫一個正確的版本已經(jīng)需要花一定的功夫了, 而且每個projects的要求都非常高, 常常需要用perf和gprof去仔細(xì)profile程序每一步的耗時和瓶頸在在哪里, 要優(yōu)化到非常極限的地方才能拿滿分. 這點我其實不是特別喜歡, 很多時候其實只有1種特定的優(yōu)化算法可以達(dá)到要求的性能, 你不斷的迭代優(yōu)化提升都非常有限, 直到你最終想到了那種特殊的優(yōu)化算法后一下子就柳暗花明了. 但做出來后確實是非常有成就感: 最終優(yōu)化的版本可能比你寫出來第一個正確的版本要快上千倍, 都是你和隊友一點一點優(yōu)化出來的.
學(xué)期末有個為期4周的組隊final project, 任何和并行計算相關(guān)的話題都可以, 時間其實還是挺緊張的沒法做太大的project. 我和隊友現(xiàn)在正在施工中, 打算做一個線程獨立隊列、帶工作偷取功能的threadpool來取得更好的workload balance.有興趣的話可以持續(xù)關(guān)注
總體來說, 這門課比較的底層low-level, 對硬件感興趣的同學(xué)可能會覺得非常有趣, 不感興趣的同學(xué)可能碰都不會碰. 在選課優(yōu)先級上應(yīng)該也不算是特別的高, 即不是特別熱門的課. 對底層優(yōu)化有興趣的同學(xué)可以挑戰(zhàn)一下.
遺憾

最遺憾的就是沒有時間和精力, 或許也沒有膽量, 去上15-610 Operating System Design and Implementation. 這課最終的成果是你寫一個操作系統(tǒng), 然后load進(jìn)一個光盤里可以在一個老舊的電腦上跑起來. 在朋友圈我有看到過成功上下來的同學(xué)拍的視頻, 在教授的辦公室里那個老舊的電腦上把自己寫的操作系統(tǒng)跑起來的成就感.
但我沒有足夠的時間去上了, 如果上這門課的話可能一學(xué)期啥別的事兒都不用干了. 我們項目里有基礎(chǔ)很不錯的同學(xué)曾挑戰(zhàn)上這個課, 最后都是期中后drop了這門課因為workload太大了, 沒能完成.
立個flag: 以后得了空, 一定得把MIT那門公開課的那個OS lab給他寫出來, 實現(xiàn)一下我想要自己寫操作系統(tǒng)的小目標(biāo).
結(jié)語

兩年的時光, 我覺得值了. 村里真的很枯燥無聊, "好在"CMU作業(yè)夠多讓人一起忙碌著沒空閑下來.
最近如果空了的話應(yīng)該會繼續(xù)修修補(bǔ)補(bǔ)我的Turtle項目, 把Timer定時器做完后, 爭取能在6月前第一版定型收尾.
有興趣的小伙伴可以關(guān)注我的github: https://github.com/YukunJ 求粉求星星

-----------------------------
作者: 周亦    時間: 2023-4-10 23:35
[驚喜]居然沒上15410
作者: 斷橋煙雨ミ舊人    時間: 2023-4-11 00:40
媽的 本科期間刷到就好了[生氣][生氣]
作者: 包容    時間: 2023-4-11 02:18
[笑哭]實力不允許啊
作者: 曉玲    時間: 2023-4-11 03:41
[害羞]現(xiàn)在看看也不晚的!
作者: 14別好吧    時間: 2023-4-11 05:02
羨慕能夠接受這么優(yōu)質(zhì)的教育[贊]
作者: 糯米糍    時間: 2023-4-11 06:24
看完受益良多,感謝!
作者: 小女孩    時間: 2023-4-11 08:17
作者是美本嗎[思考]
作者: 益琳驊    時間: 2023-4-11 09:24
是滴. 看我主頁~[愛]
作者: 奇跡    時間: 2023-4-11 10:31
帶我走吧 [大哭][大哭][大哭][大哭]




歡迎光臨 愛鋒貝 (http://m.7gfy2te7.cn/) Powered by Discuz! X3.4