CMU碩士第一修課心得

Heron Yang
Heron’s Blog 海龍的部落格
6 min readMay 15, 2017

--

Introduction to Computer Systems 期末考前

前言

兩年前在CMU當交換學生時,寫了CMU與交大差異的一系列文章,被轉載到INSIDE後,出乎我預料之外地,讀者群超越交大或CMU,而甚至能接受到高中學弟妹、業界、其他學校老師等等的回覆,對我來說持續寫覺得有意義的文章是重點,至於讀者,大家隨心隨緣囉。

念碩士和大學不同處滿多:一,心花在課業居多其餘其次;二,有點忘記讀大學時候的細節,所以很難再如以往拿交大跟CMU比較。過去這一年我修了共十堂課,選其中五堂課以下簡單分享。

Introduction to Computer Systems (15–213/513)

Introduction to Computer Systems這堂課在CMU扮演系統的必修課角色,對於我的感覺像是大學四年課程的精華版,也就是裡面的每一個主題都呼應到以前我在大學學過的數堂課最重要的部分,我認為這堂課很優美地串起電腦運作的整篇故事。大概一週一份作業,總共有七份,涵蓋Bit Operation、Stack Overflow Exploit、LRU Cache、Shell、Proxy,就如對應到計算機概論、組合語言、程式安全、作業系統、網路程式設計這幾堂大學部跟研究所課的綜合體。如果本來沒有太多寫程式經驗的人能順利把這堂課學好,確實能有資工路線系統相關必修課的精華知識。

Packet Switching and Computer Networks (18–756)

Packet Switch這一堂課其實我本來不知道學它能做什麼,而選他的原因是因為二選一的必修中,相對於另一個一般的網路課,我想試試看新鮮的東西。猶記得期末的時候,老師Kim說:”Most of the things you learn in this class, you won’t use it. Then, why you are taking this class?”確實我們不太會有機會去設計交換器,但這堂課老師想要述說的是那些多年來累積的智慧是可以用在很多地方的,例如交換器裡面的Fair Queue,就能讓我們去思考怎麼設計公平的排程,吸收之後運用在買票之類的問題,像是我先前寫的「談五月天演唱會搶票 — 如何設計更好的系統」

這堂課從一開始的SONET講到如何Restoration,再講到ATM、MPLS等等。當年參與ATM設計的老師Kim並不喜歡TCP/IP或是OSI網路七層,等於說把我們以往常見的網路課翻了過來。

Engineering Data Intensive Scalable Systems (17–648)

Scalable System是一堂軟體工程的課,相對於去計較程式的細節,討論比較多對於系統架構的設計,每週都有不同的主題需要我們閱讀資料後小考,包含consistency、availability、scale up/down、micro-services等等共數十個,最終目的是寫出一個能適應巨大流量與資料的服務。最終的這個服務是要架設一個電子商務後台,有數GB的商品資料,提供瀏覽、購買、推薦等功能,在一定的AWS經費下,看班上誰能支援最多的流量而系統不會壞掉。這是一堂很實際的課程,大家會把所學放到自己的設計裡面,然後再自己把整個服務架起來。

Distributed Systems (15–440/640)

Distributed Systems的老師是Satya,也是開發了AFS和Coda得到ACM Honor的大咖,我特別喜歡他對於有自信的領域提出的看法,總是能用一句話道盡萬句話。例如,他認為”the only way to deal with performance issue in distributed system is cache”,或是”the only way for human to deal with complexity is hierarchy”。

這堂課雖然花了一整學期,但是要述說的觀念很簡單:分散式系統中沒有shared memory是一切問題的起源,根據需求安排不同的cache設計來解決問題;後半部課程則是在講多台機器中怎麼樣面對錯誤(而堅韌不拔,哈)。其中幾個作業特別耗時,有次一連寫40至50小時才寫出一個能適用各種流量變化的auto scaler (load balancer)。

Internet Service (18–845)

Internet Service是一堂讀論文、寫論文的學術課程,每週回家讀2至3篇的論文之後到教室跟大家聊天討論,期末分組是對自己喜歡的主題寫一份論文帶來跟同學分享。這堂課我收穫特別多,老師是David R. O’Hallaron,也是寫Computer Systems: A Programmer’s Perspective課本的作者,他選了許多影響力大的論文給大家讀,包含Google成立前的Stanford論文、GFS、MapReduce、Tensorflow、Borg等等,最後我們這組則是對於AWS Lambda這類的Serverless服務感興趣後,寫了一篇研究論文帶去跟同學們分享。

結語

深度,是這一年我學習上的目標。知識有時候多而繽紛,而速成的學習方法比比皆是,於是在自己感興趣的世界中,不斷地往下專研變成最好的不可取代性。網路與系統相關的學問累積數個世紀,但是核心問題改變的並不多,透過對於不同發展有深度了解之後,我們能看出不同學問之間的關聯性和故事。Satya有天讓百度營運長陸奇給我們一個演講,告訴我們趨勢在哪、視野應該在哪,進而讓我去思考自己的角色和對於學問的解讀。例如,手機App或網頁看似熱門但卻是處於前景不明的狀況,而更貼近人類本身的運算如人工智慧、即時與感官連結的運算等是我們需要去思考的。

CMU地標:Walking to the Sky

Want More?

Follow Heron’s Blog on Facebook or Medium.

--

--