鏈接:https://www.zhihu.com/question/24295398/answer/1953719271
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
說到計算機,一定要提到大名鼎鼎的CMU,那麼該如何選課呢?
本篇文章主要針對求職向的學生,從秋季入學的角度進行闡述(春季入學的同學也可以參考一下)偏SDE軟件開發方向,適合基礎薄弱的同學,希望看完這篇文章能讓你結合當下的選課規則和自身情況去更好的進行選擇。

第一學期:打基礎
CMU的課程workload都比較大這是眾所周知的。因此,在選課之前,最好在課程官網上找到這個學期的安排表,將想選的課程全部列在你的日曆上,如果想選的課程組合起來之後,考試時間、大作業的deadline之類的時間點都是錯開的,那這個還是可以的;但是如果是那種集中一段時間搞大事的,什麼一個星期考三、四回考試,一個星期有三、四個大作業的deadline,那還是再琢磨一下換換課程組合吧。還有就是,學習氛圍也很重要。可以小夥伴們一起選某一門課,大家就可以多多討論多多交流交流。有人會擔心有交流障礙,其實主要看你願不願意主動去交流,托福GRE多少分其實沒有什麼太大的參考性。
1、18-613 Foundation of Computer Systems
這是一門基礎的系統課程,必選。它經過了近十年的不斷改進之後,變得越來越系統和完善。為了給之後的課程打下堅實的基礎,無論你是本專業、跨專業還是今後打算或者不打算做Computer System這一塊的,這門課都十分值得去上。除了打基礎之外,這門課據說還有一個評估功能:拿A者在CMU今後學習、工作路程會比較順利,拿B者還得多多努力。
它其實是借鑒了15-213/18-213/15-513課程的,只不過18-613是專門為ECE MS而設計的擴展課程。實際上,15-513的課程質量會更高。在學習這門課的時候,拿15-513的課程視頻來進行預習甚至學習也是也是比較有效率的學習方式。
2、10-601/10-701/18-661 Introduction to Machine Learning
CMU Machine Learning一系列課程的門檻,必選。特別是對於想要往Machine Learning發展,但是比較猶豫、對自己的能力評估得並不是特別到位的同學,上完這幾門課,基本就被安排得明明白白了;如果是在Machine Learning 方面有基礎的同學,這課就相當於複習鞏固,也挺好。為什麼說那些猶豫的同學會被安排得明明白白?是因為上了這幾門課之後能拿下A的,就相當於拿下了在Machine Learning方面學習的通行證;拿了B的同學,那還是考慮其他對數學要求沒那麼高的方向吧,比如SDE什麼的。另外,這幾門課的老師還算是比較好的,評分方面不會很嚴格很死板,拿下A其實並不算很難的事情。
雖然名字看起來幾乎一樣,但是這三門課並不是一樣的課。10-601是相對基礎的課程,雖然有時候有能po到簡歷上的project,但是10-601不是核心課程;10-701的質量比較好,很理論幾乎都是推公式,是核心課程,但是這是CS的,不是ECE的課程,如果要上的話會佔用一個非ECE課程名額;18-661是ECE核心課程,內容偏理論。通常來說CS課程的質量遠比ECE課程的質量要好得多,估計是近幾年CS的課程火了之後,ECE跟着開設的。另外,在選課之前要好好打探清楚任課老師,這幾門課每學期的老師都不一樣,通常來說,任課老師決定授課內容和質量。
另外,第一學期重在打基礎,基礎不好的同學還可以選這兩門來補一下:
17-681 Java for Application Programmers 17-683 Data Structures for Application Programmers
這兩門如果只能選一門,那肯定是17-683了,簡直、算法什麼的不好的同學的必選項。這兩個課好就好在都是同一個教授授課,即使你為了節省非ECE課程的學分而只選17-683,而17-681的課程只找那些上了課的同學借視頻來看,也可以提問教授17-681裡邊不懂的內容。Terry Lee是這兩門課的教授,他的課比較詳細,很有邏輯層次。這兩門課程分別上半個學期,17-681前半學期,17-683後半學期。只要你認真上了這兩門課,雖然不能讓你立馬成為大神,但是自己刷題的時候看明白解法是沒問題的。
3、18652 Foundation of Software Engineering
sv、se的必選課。這門課會用到很多web tool、framework等等之類,可以給簡歷增添不少亮筆;如果你選了一個市面上運用比較廣泛比較流行的,什麼react/之類的,那不得了了,你這個簡歷怕是要開光了。這個課的過程是這樣的:學生組隊做一個老師規定好的項目,一定要用node(express)作為後端。一開始,就是搞一個聊天室,一個hw0用http://socket.io作中介的非常基本的nodeJS為後端的那種。組隊項目對每個人的要求都一樣,每周要給助教報進度,每個組每兩周一個iteration、每兩周給助教demo。想上這門課的同學,建議提前去打聽一下作業,然後自己估摸一下自己能不能上,如果感覺很難,就不要去坑隊友了...

第二學期:重提高
這個階段選一些實用且質量不錯的課程是比較有利的選擇。
1、15-640 Distributed System
CS本科的必修課之一,必選。對後端比較模糊的同學,這門課值得你擁有。只不過春季入學和秋季入學的課程內容不完一致,秋季開學的用GO語言,春季開學的用Java。課程工作量當然也比較大,一般是:4次作業、4個項目、2次期中考試。這個課是沒得分來調的,即使全班都考了B也不調,就是這麼剛,考多少就是多少。
2、15-719/18-847 Advanced Cloud Computing
這是一門ECE的核心課,僅春季學期開設,方便畢業,可選。比Distributed System low一點,但是又比Cloud Computing的level高一點。這個課和Distributed System有很大的重疊,可以和Distributed System同步上,也可以先把Distributed System上完再上這個課,這樣會比較輕鬆一些。千萬不要先上這個課再跑去上Distributed System,怕你理解起來不容易,畢竟這個課的老師講課質量不夠Distributed System的好,有點隨意。這門課的優點是workload比較小。
3、18-845 Internet Service
這是一門由CSAPP授課的課程,僅春季學期開設,可選。它和ACC、DS有大量重合,質量那是槓桿的,一門頂三門,人間很值得。這個課程一般一個班20人以下,一學期缺勤不能超過2次,上課的時候主要是大家圍坐在一起,開口參與paper的討論,有問題老師都親自解答,不但提高了自己的表達能力,還提升了自己的思維眼界。這樣看來,每一節課都摸不了魚,得認認真真地提前準備好才可以,要不然面對這麼多大牛,你一開口就讓別人感覺奇怪的知識點增加了,怕你找不到地縫鑽。課後作業主要是每個星期要寫兩篇論文讀後感,還有一個Individual Project和一個Group Project是完完全全開放性的。對於這些,老師會更care裡邊有沒有你自己的思考和見解。
4、17-437/17-637 Web Application Development
這是一門加持SDE方向工作簡歷競爭性的課程,可選。最後一個學期面臨找工作的壓力,為了能把這個課放到簡歷上,強烈建議你一定要在最後一個學期之前上。這門課不難,但就是節奏比較快,只要你態度端正認真,就能夠學好。基本上每個星期作業都少不了,有時候是Homework,有時候是Project,這些都能夠幫助你對有個基礎了解。

第三學期:減壓力
一般這個學期大家都會面臨找工作的壓力,所以選課主要選擇那些難度相對低一些的課程會比較好。
1、16-720 Computer Vision
一般來說,這是一門沒有考試沒有Project,整個學期就5個作業的課程,可選。學生一般把自己的時間規劃好,按時寫完作業就是A的級別了。但是據說這門課每學期都有變化,課程的內容和質量得多觀察一下才是。
2、11601 Coding Bootcamp
這是一門刷題課,僅春季學期開設,可選。教材用的是Cracking the Coding Interview,需要你有一定的數據結構和算法的基礎,沒有的話...那還是選一下上前邊說的那個mini course吧,17-683 Data Structures for Application Programmers。
3、11-642 Search Engine
這是一門需要推公式的傳統的課程,需要讀論文,寫論文讀後感,可選。課程質量一直不錯,作業量主要依個人興趣想法而定。
除開以上十門課程,這裡另外推薦一個專門找工作的課程,非常實用,建議第一學期去上:39-699 Career & Professional Development for Engineering Masters Students。這門職業課是來自CIT學院的,只有半個學期,是教你簡歷、Linkedin、Handshake等方面的知識的。實習工作方面,CMU的是很不錯的,建議好好準備;找正式工作可以career fair再加上學姐學長之類的內推。
在CMU有一點很重要,就是不·要·抄·襲!
CMU向來對這個都非常嚴格,基礎大課比如Introduction to Machine Learning、Introduction to Computer System這類,更會是嚴格中的戰鬥機。像Cloud Computing 個別課程,你在每道題目上的停留時間長短將會被老師追蹤,拿來判斷是否抄襲。Project把規則講明不能使用已有代碼的情況下,即使你再在已經存在的代碼上花大量的時間來改進,甚至做出來的項目都和原來的不一樣,這也還是算是絕絕對對的抄襲。不管你是學霸還是學渣,一旦被追蹤到抄襲、被抄襲之類的,你將面臨掛科、休學、退學等的懲罰。

其實,在CMU學習壓力大、節奏緊張,寫作業寫到崩潰,甚至錯過deadline,是部分學生會出現的情況。(開學期間)這裡沒有party,也幾乎沒有有意安排的娛樂時間,絕大部分的人都在學習。有人從早上十點開始學習到凌晨兩點,每天如此;也有人堅持每天早睡早起地去學習。只要勤懇努力,雖然並不一定能拿高績點,但是畢業是沒問題的。另外,在CMU的生活還算可以,每餐都有好多家中餐外賣可以吃。還有,氣候比較乾燥,冬天比較長,要記得保濕好自己的皮膚哦!









