作者:知乎用戶tAAI7O
連結:https://www.zhihu.com/question/24295398/answer/1927275447
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
我是2018年spring入學CMU ECE SDE的,去年5月從CMU畢業。因為之前在CMU選課的時候走了不少彎路,所以就想著寫一篇文章給大家提供一點選課參考,希望學弟學妹們看了之後能避開一些坑。後面還會講一些我的就讀體驗和就業心得,所以這篇文章會有點長,需要一點耐心才能讀完。
在分享之前我要先說明一下:第一,由於我本人是個學渣,具體在ECE三學期的績點是3.1 -> 3.4 -> 3.5,所以我的這篇帖子大概比較適合基礎和學習能力稍微弱一點的同學食用,我也不好在大神面前班門弄斧。
第二點就是,我的選課會偏SDE(軟體開發)一點,可能對想做機器學習方面的同學參考價值不是特別大。
總的來說,我推薦的課沒有所謂的「水課」,我對績點也沒有執念,因為我發現績點對找工作意義不大,只要滿足基本的畢業要求就行。再說你在CMU根本找不到所謂的輕輕鬆鬆拿高分的課。如果讓我花費大量時間僅僅只為了拿個A,期間根本學不到什麼東西,那還是算了,我寧願花更多時間去學一點實打實的東西,哪怕成績只能拿B也無所謂。

基於以上準則,下面我將展示這三個學期的推薦課程。
第一學期
必選:
18-613 Foundations of Computer Systems
這門課跟15-213/15-513的教材和教學內容一樣,是最基礎的系統課,被我划到必學的範疇。不管你是本專業出身還是轉專業,想做的方向跟系統有沒有關係,這門課都應該上一上。這門課的內容和作業已經經過數十年的打磨,質量已經比較高了,學了這門課可以給之後的課打下很好的基礎。
哪怕你之前已經上過computer system courses,你仍然還是需要上一下這門課。就這件事我當初還問過老師,老師笑著跟我講這門課是不一樣的,現在的我早已明白了老師的話有多正確。
另外,在我眼裡,這門神課還有一個特別的作用,被我當做一個自我衡量的標準。即:這門課如果能拿A,那你在CMU的學習就不會覺得困難,也能比較順利地找到工作。如果只能拿到B(比如我),就代表你的水平還不足,你還需要繼續努力。
前面有提到,這門課跟15-213/15-513的課程內容相同,但我個人覺得ECE的課程質量不如15-513。所以推薦大家可以直接看15-513的課程視頻來預習、複習甚至直接上課,我覺得講得更好。

10-601/10-701/18-661 Introduction to Machine Learning
這三門課雖然不是一樣的課,但是名字和作用都差不多。我這個人比較直接,就直說了,ECE這邊凡是課程名字/內容和CS的課「撞型」的課,一般很可能就是看著CS的課火才在近幾年開設的。名字雖然模仿來了,但課程質量卻遠遠趕不上CS,這種感覺就類似於東施效顰吧。
下面比較一下這三門課的異同:
首先是共同點,老師分都給得比較高,拿A的難度不大,反正我認識的人都是A(除了我)。對於初學者來說,這門課能拿A,就意味著你Machine Learning的基礎已經合格,可以嘗試更多ML方面的課程。而如果是已經在Machine Learning方面有一定基礎甚至做過研究的同學,這門課就是來給你複習+鞏固基礎的,順便還可以修個核心課。
其次是不同點:仔細比較起來,10-601的內容更基礎,有的老師布置的project可以後續放進簡歷,但不算核心。10-701是偏理論的phd課,課堂上會有很長的推公式的環節,算核心但不屬於ECE課程。18-661是ECE核心,這門課我沒上過,聽說偏理論。
至於具體的上課內容和質量就不好說了,因為這三門課每學期的老師都在變,課程質量和內容主要還是看任課教授,大家就上課前自己打聽一下吧。
總結起來,以上這幾門課屬於第一學期必選課,因為他們是CMU Machine Learning系列課程的門檻。這個課可以確定你適不適合走Machine Learning路線,比如我,上完之後只拿了個B,瞬間認清了自己薄弱的數學基礎,以及我是真的不適合走Machine Learning路線,從此我就收心找工作當SDE去了。

推薦一門找工作的課:39-699 Career & Professional Development for Engineering Masters Students
這是CIT學院的職業課,只有半學期,教的東西對找工作還挺有幫助的,會教你寫簡歷,linkedin和Handshake,還會布置作業讓你做修改改。建議大家第一學期都可以上一下。
推薦搭配:
17-681 Java for Application Programmers + 17-683 Data Structures for Application Programmers
這兩門同屬於Terry Lee教授的mini course,都是半學期的課,我的推薦是搭配著上。
這兩門課非常適合基礎不好的同學。17-683這一門我特別推薦給資料結構和演算法方面有困難的同學。我特別喜歡Terry Lee教授,上了他的課你就會明白,他上課的時候會準備很多材料,講課邏輯也很清晰,對我這種打基礎的人非常友好。只要認真聽了這兩門課,之後自己刷題就基本能看懂題目了。
如果想節省一點非ECE課的學分(有限制),可以只上17-683這一門,實在想上17-681可以找上了的同學借視頻看。

18652 Foundation of Software Engineering
這門課屬於必修課,春季學期會廣播到pitts。最大的優點是對簡歷幫助很大,會用到很多web tool/library/framework。 主要用的語言是js, 缺點是平時上課比較扯,講的都是software engineering practice,理論部分多到讓人頭大,感覺聽完也沒什麼用。
至於作業,這門課一開始的作業很簡單,會給你一個hw0 用http://socket.io作middleware寫一個非常基本的nodeJS(expressJS) 為後端的聊天室。像我這種沒有一點正經web開發經驗的人,大概也只花了兩三天就把作業和視頻介紹完成了。
後來就幾乎是組隊作業貫穿全程,老師那邊會給一個規定好的project,強制使用node(express)作後端,其他方面不做限制。如果選的是很潮流的技術棧,自然會讓你的簡歷增光添彩,比如react/redux這種就很有亮點。
如果想選這門課的話,我建議你提前評估一下自己是不是能hold住這門課的作業,如果實在覺得難那就還是別上了,否則你去了也只會給整個學期的組隊作業拖後腿
記得當時我選這門課的時候完全是個web小白,硬著頭皮也要上這門課,為了鍛煉英語,選組的preference填了mixed。結果分到的隊友就真的很mixed,一個隊總共5個人,我們分別來自4個國家。當時我們組有隊友強烈建議選angular當前端,但我對angular可以說是一問三不知,再加上印度隊友幾乎什麼也不幹,我就完完全全是零基礎硬寫整個組的前端,真的太難了。這門課成功地讓我對印度隊友有了陰影。

關於期末考試,題型一般是單選+不定向選擇+簡單的js testing 代碼。感覺想光憑複習就拿高分根本沒戲,主要還是看你上課有沒有積極參與,組隊作業完成得好不好,可能還要讓隊友喜歡你。
這門課的初衷本來是這樣的:組隊的項目每兩周一個iteration,所有人的項目要求、requirement和feature都是一樣的,每周給助教報進度,每兩周給助教一個demo,期間就是各種git practice, code review, ci/cd,testing testing & testing, 檢查代碼風格甚至還有pair programming。
但實行起來就不是這樣了,兩周一次的iteration被我們變成了1天一次iteration。全程我們組就是一個隊友把控大局,我和另外一個隊友分別寫前端和後端。最後寫出來的代碼雖然很差,但好在由於老師非常喜歡我們組的一個隊友,最後給了我們個高分。
這門課我幾乎全程是在自學寫web,所以中間的practice可以說真的不太規範。我比較建議有基礎的同學選擇這門課,或者你要是能在組隊的時候抱到大腿也行。當時我室友上這個課就很輕鬆,讓我很是羨慕,相比之下我這個菜鳥就苦不堪言了,自己本來就是小白還要時不時demo前一小時修隊友的bug。

第二學期
必選:
15-640 Distributed System
這是我在CMU最喜歡的一門課,沒有之一,值得花掉一個非ECE課程名額!
這門課是CS本科的一門系統必修課,任課老師的水平都很高,講課質量真的沒得說,是我學到最多東西的一門課,對我理解後端幫助很大。你可以去看看他們每學期的評教分數有多高。這種高質量的課平時我們都是跟本科生一起上,他們的實力真的不容小覷,像我這種學渣就經常有一種被本科高手碾壓的感覺。
這門課的workload還是挺大的,每學期會有4次作業,4個project 和 2 個考試。我當時幾乎每周都在寫作業當中度過,而且debug真的很難,有bug的時候真的欲哭無淚,想求神拜佛。但是如果能找一些同學跟你一起學,互相幫助,多討論一下,可能會幫你分擔一些壓力。
另外,我覺得這個課程的評分也挺讓我滿意的。大概是CMU最有原則的一門課了,完全不調分,大家考多少就是多少分(全班都拿B也不調分)。據師兄說他那一屆因為最後考試比較簡單,最後統一向下curve了。
最後要提醒一下,這門課在秋季學期和春季學期的內容不太一樣,Fall用Go,Spring用Java。我個人比較喜歡Go的版本,一般學一周之後你就能精通Go了。
這裡附上課程主頁:https://www.synergylabs.org/courses/15-440/

可選:
15-719/18-847 Advanced Cloud Computing(只有Spring開)
概括一下就是低配版的Distributed System,高配版的Cloud Computing。
這門課的內容可以說和跟DS大同小異,但是教授講課質量趕不上DS,沒有說教授本人水平爛的意思,只是課堂風格實在有點隨便,挺催眠的。所以只稱得上低配DS。
但跟CC比起來還是算高配了,因為至少有人講課,workload也沒CC大。
但我覺得這門課還是可以一上的,畢竟是ECE的core,要滿足畢業要求。要是單獨上效果不好,你可以選擇跟DS同步上,或者上完DS再上,事半功倍。但是就不要先上這門課再上DS了,這樣效果不好。
附課程主頁:http://www.cs.cmu.edu/~15719/
18-845 Internet Service (只有Spring開)
我在CMU最滿意的課之一,強推。這門課的老師同時也是這門課教材CSAPP(Foundations of Computer Systems)的編寫者。
這門課是小班授課,人數會控制在20人以內。人少的原因據我分析是這樣的:這門課主要是讓大家讀paper,上課時會讓大家圍成一個圈討論某一篇paper的內容,你就在博學的教授和一堆學霸面前坐著,根本沒可能划水,還必須要認真準備和思考,不然你開口就沒有講的東西,只能在大家面前獻醜。

既然如此,這門課也對出勤率提出了硬性規定,即一學期最多缺勤兩次。作業的話,是每周寫兩篇論文讀後感,感覺這個寫作對英語的要求不高,重要的是看你有沒有自己的思考。還有一個個人的Project+一個Group Project,這兩個project都沒什麼限制,讓學生自由發揮。實現難度這些在老師眼裡不怎麼重要,一個新穎有趣的idea加上你獨具匠心的思考才能得到老師的青睞。
可能這門課會讓很多覺得「開口難」的中國學生望而卻步,但這反而是我最喜歡這門課的一點。課堂上大量的討論真的很難得,尤其對於我們這種不讀Phd的人來說,基本沒什麼機會能跟資深的教授坐在一起,所以每周讀兩回paper真的讓我很滿意。不僅如此,你拋出一個問題之後,老師就在你面前親自解答,這種問答環節不僅能提高你的口語和表達能力,還能豐富你的眼界和思維,何樂而不為? 另外,我還有一個意外收穫,因為我這門課是和Advanced Cloud Computing同時上的,我發現這門課的必讀篇目和ACC, DS這兩門課都有大量重合。所以我相當於是花一門課的時間讀了三門課的paper,而且還是名師導讀的精讀版,真的很值得。
附課程主頁:http://www.archive.ece.cmu.edu/~ece845/
17-437/17-637 Web Application Development
很有名的一節課,因為每學期的授課老師都有變動,所以我這邊沒辦法講課程質量好不好,具體的課程質量還是要看老師。但總體來看這門課老師的水平都穩定在一個比較高的水準。
這門課的內容不難,但節奏很快。作業基本上是每周都有,Homework和Project都有可能,上完之後能幫助你全面基礎的了解全棧Web開發。這門課只要認真學就能學好,也是我第一個拿A的課,所以我對這門課的感情還挺深的。我後來當了這門課TA,開發了第一代autograder,以後你們上這門課的時候還會用到我寫的autograder。
另外提醒一下,這門課的project後續放進簡歷里對找SDE工作很有幫助,但要是最後一學期才上就來不及放進簡歷了。所以我的建議是:一定要在最後一學期之前上。

第三學期
最後一學期比較特殊,所以大家一定要結合實際情況來選。假設你這學期需要找工作,你可以選一些沒有考試的課和相對輕鬆的課來緩衝一下,騰點時間給找工作。但我這個建議僅僅適合最後一學期,其它學期我不建議犧牲課程質量來給找工作讓步。
兩個原因,一是因為你沒辦法保證在課程那裡省下來的時間都能真的用在找工作上,而人的時間是可以擠的,不如逼自己一把。二是,最後一個學期之前,你都有機會在課程中得到含金量更高的project來充實你的簡歷,但如果是質量差的課就沒這個收穫了。
可選:
16-720 Computer Vision
這門課每學期都在變,所以具體課程內容和質量不好說。我只知道我上這門課的時候,一學期只有5個作業,project和考試都沒有,所以全程學下來沒什麼壓力。只要合理安排時間,並且早點開始學習,一般作業都能拿A。按照我當時的課程質量,這門課還是比較不錯的,推薦給大家。

11601 Coding Bootcamp (只有Spring開)
這門課強力推薦給找工作的朋友,反正找工作也要刷題,那不如來這個正宗的刷題課,平時上課就是刷題。教材就是著名的Cracking the Coding Interview。
但這門課的老師講課質量一言難盡,基本沒啥效果。所以不太建議沒有資料結構和演算法基礎就想強行刷題的朋友來上這個課,我建議去前面推薦過的17-683。
11-642 Search Engine(只有Spring開)
這門課的內容沒有想像中那麼黑科技,就是非常傳統的類型,平時一樣要推公式+讀論文+寫論文讀後感。課程質量很穩定,老師講課水平也不錯,load大小就因人而異了,看個人興趣。像我就不行,推公式簡直會要了我的命,我只能選擇抱大腿。

三個學期的課程推薦都講完了,接下來我做一個總結:
總的說來,CMU是CS大校,課程資源的豐富程度超乎你想像,只要你想學,幾乎都能找到,我上面提供的這個選課單僅供大家參考。但這些課程都是我或者很親近的朋友親身體驗的,所以還是比較靠譜的。
我還有一些tips提供給大家——
第一,不要被課程的名字所迷惑,其實課程內容只跟教授有關,具體內容最好是在上課之前打聽好。
第二,CMU的課程workload都很大,所以記得正確評估自己的能力,看自己能承受到什麼程度。workload超負荷的話,你恐怕一整個學期再怎麼努力學也得不了一個很理想的分數。我建議大家在選課前去課程官網上看看,評估一下這個學期的排課適不適合自己。如果目前的排課組合讓你有一種忙不過來的感覺,考試作業超負荷的話,你可能就要考慮換一個組合了。
第三,如果能和小夥伴一起學習是最好的。畢竟大家選了一樣的課,就能多交流分享,集思廣益,互相幫助。

Last but not least,千萬不要抄襲! CMU這邊有多看重學術聲譽,它的規則就有多嚴格,就算每一門課都有不同的底線,但抄襲行為絕對是所有課都深惡痛絕的。其中又數Introduction to Computer System, Introduction to Machine Learning這種基礎大課最為嚴格。還有Cloud Computing這個課,老師甚至會追蹤你在Quiz每道題上的停留時間來判斷抄襲。
這裡提供一段我做TA的時候知道的真人真事:有一組同學在Github上已經存在的project基礎上寫自己的project。儘管他們花了大量的時間改進,做出的project其實已經跳開了原來的那個project,但這依舊是抄襲。project明令禁止用已有的代碼,用了就是抄襲,不要自作聰明地認為不會被發現,其實有專門的追蹤工具。不管是抄襲還是被抄襲,用已有的代碼作弊等等,反正跟抄襲沾了關係的人,結果都很慘,掛科甚至休學、退學的都有,其中還不乏一些成績很好的同學,大家一定引以為鑒。
PS:我們18Spring選課很free,所以我選的都是自己真心想上和乾貨很多的課。現在ECE的選課規則貌似有變動,學弟學妹們可能需要看一下新規則和畢業要求,自己做一下調整。
關於課程的部分就到此結束,後面是我在CMU的就業心得和就讀體驗。

就業心得
讀研之後才明白節奏有多快,一來就要找工作,我因為拖延症吃虧良多。希望大家就不要像我這樣了,盡量早點開始準備。
我覺得CMU的career fair效果還可以,推薦給大家。我的實習就是在career fair找到的,正職是career fair + 內推。大家參加CF之前記得一定要認真準備。
另外,我前面在第一學期推薦過的那門找工作的課效果也不錯。
至於就業情況,感覺我們這一屆(17 Fall & 18 Spring)的情況還不錯,主要還是靠亞麻爸爸那邊撈了很多人。基本上只要公司招人,我們專業都有成功拿到offer的。
就讀體驗
首先講講學習方面。
我本科畢業於國內某985ece相關專業,來CMU學習之後,覺得這裡的課程壓力大到讓人想退學,毫不誇張的說,我來這的第一個學期真實地每天趕due趕到崩潰,就這樣了還有好幾次趕不上Deadline。一路這樣熬過來,還好我還能求助一下身邊的大神,真的多虧了他們的幫助和鼓勵,我漸漸地有了進步。

我每周的學習時間基本就是1027,就是每天從早上十點學到凌晨兩點,一周七天從不間斷。但也有睡得更早,起得更早的同學,這個作息就比較健康,但感覺大家的學習時間都差不了太多。大家都一樣,幾乎所有時間都被上課+寫作業+找工作佔滿。其實也有效率低偶爾放空的時候,但真的沒什麼時間娛樂。
至於成績,我這個學渣要想拿A是真的難,拿B還是可以的。只要態度認真一點,努力一點,畢業要求還是比較容易達到的。想要高績點就要更拼了。
雖然我前面感嘆了一大段學習的艱辛,但不得不說,CMU主校區的學習氛圍真的很能感染人,課程設置和強度很大,學下來不僅能鍛煉人的意志力和學習能力,還能治療拖延症。我這兩年學的東西是大學的時候所無法想像的,可能這就是先苦後甜吧。
關於做研究方面的信息,因為我個人目標是找工作,所以不是很了解。但據我所知,只要你主動一點,就能和教練聯繫,教授們都很approachable,很好說話。我個人因為當TA,所以跟TA那門課的教授很熟悉。

接下來講講生活方面。
我在CMU的生活還算不錯,吃的話可以點中餐外賣,選擇還挺多的。學校裡面中國人含量還挺高的,所以交友不愁,大家也經常交流。我就住在一個全是熟人的公寓,平時經常上下樓串門,大家一起過年過節特別熱鬧。我很感謝大家的幫助和鼓勵,多虧了他們,我在CMU才感覺有了支撐。
但是同胞太多也有個缺點,大家平時和外國人交流的機會比較少,所以不太利於口語鍛煉。想要提高口語,關鍵是看你自己願不願意開口說話,不開口就永遠沒辦法克服交流障礙。我自己就是一直喜歡主動出擊到處開口交流,後面口語提高了很多。至於托福GRE多少分,其實參考意義不大,我就不說我多少分了。
至於跟外國人交流要看機會,有機會一定要抓住,我當TA的時候,就常跟同事們交流,其他的話沒啥機會。但我真的每參加過這邊的party,可能CMU真的不太存在party的可能性吧。不過要是放假或許可以試試看有沒有時間。
最後提醒大家,匹茲堡很乾,冬天很長,南方的小夥伴來這邊容易皮膚過敏,所以記得多保濕 & 加濕。

這篇長文到這裡就要結束了,希望大家看完能對CMU ECE的SDE項目有新的了解,盡量少走彎路。
AdmitWrite,基於共享經濟模式建立的知名網際網路留學平台,留學屆Uber。迄今為止,平台入駐世界頂級名校導師已超過1000名,實現美國TOP30,英國G5,澳洲八大等多個地區名校全覆蓋。學術大牛?名校學霸?外籍名校導師?牛人彙集地,你想要的都在這裡。人文社科/商科/工科?理科/藝術/法學?不管什麼方向,我們都能為你匹配同專業名校學霸,申請so easy!中介價格不划算?線上模式,拒絕無謂成本,打造極致專業度,極具性價比服務,讓每一分錢都花到實處。
大牛談留學之申請硬知識可以關注專欄:
學霸談美國申請:哥大學姐帶你沖藤校
大牛談英國留學:劍橋學姐帶你申海外名校
海量名校實戰申請經驗:海外名校申請經驗