斯坦福大學位處矽谷,選課自由,是世界上最適合轉碼的學校之一。我本人是材料系17級Master,目前已經轉碼。在轉碼的路上我遇到了許多熱心的學長學姐,靠譜的小夥伴,感受過成功的喜悅也有失敗的痛苦,也得到了許許多多的經驗教訓。因為每年新生和老生之間都會重複出現大量的「學長,這學期怎麼選課呀」,「學姐,我現在轉碼應該做哪些準備呢」這樣的對話,於是在十幾位17級各專業Master轉碼的學長學姐的支持下,我們整理了一份簡單的Stanford轉碼選課指南。希望能夠對學弟學妹們有所幫助。

本文的作者們幾乎都來自與寫碼沒有直接關係的本科,屬於「轉碼」。本科是Math, Stats等相關專業的同學會有更適合於你們的求職路線。所有內容均來自作者們個人觀點。

任何想參與補充的學長學姐都可以私信我,文檔會隨時更新。感謝各位熱心的同學們!

Materials Science & Engineering

是否為STEM :

時長:3-6 Quarter

畢業要求:共45學分,其中30學分必須為材料課程(均與CS、數學無關)。其餘15學分無專業限制(但最多只能有一門100level)

轉CS策略:

  • Y同學:上滿6個學期,每學期10分以內的話可以上6×3=18門課程,理論上可以至少上8門CS課,實際上如果超過10分多選可以10門以上 ,在數量上已經足夠找到CS工作。假如能夠成功延畢一個Quarter還可以上更多。如果已經下定決心轉碼,建議在入學前即完成刷題準備(這樣就不必選CS106A, 106B了)。第一年盡量多選CS課有利找工作,第二年再補必修材料課。(假設此前沒有CS基礎)前兩個學期,也就是找實習的主要時間:Web方向建議選擇CS142(web application), CS108(Android), CS145(Database);System方向建議選擇CS107, CS110(system);AI 方向建議選擇CS221(AI), CS224N(NLP), EE263(linear algebra), EE364A(convex optimization);

    數據方向建議選擇 Stats202, CS246(Data Mining);

    第三學期:可以選擇CS231N(CV), CS229(ML), CS224U(NLP)第四學期:建議多選材料水課,全職期間應將主要精力放在刷題找工作而不是上課上。後面兩學期:根據找到的工作和興趣自行協調選課方向。
  • Z同學:6個學期畢業,其中有兩個學期超過了10學分~以下是具體安排(課號對應的具體課程可以去stanford carta上查詢),之後會附上這樣選課的理由:2017 Fall: CS 106B (3), CS 108 (3), MATSCI 303 (3)2018 Winter: CS 230 (3), CS 246 (3), MATSCI 331 (3), CS 246H (1)2018 Spring: CS 142 (3), MATSCI 209 (3), MATSCI 316 (3), MATSCI 175 (3), CS 1U (1)2018 Fall: CS 145 (3), CS 221 (3), STATS 202 (3), MATSCI 203 (3), MATSCI 174 (3)

    2019 Winter: CS 107 (3), CS 224N (3), MATSCI 206 (3)

    2019 Spring: CS 231N (3), MATSCI 208 (3), MATSCI 343 (3)選課理由:前兩個學期是找實習最關鍵的時期~如果之前沒有相關的CS背景,建議上大量的CS課來豐富自己的簡歷內容(我同時選了MATSCI非常水的兩門專選,以便於有時間找實習和刷題~)我是在2018 Winter的時候正式拿到了F家的實習,所以之後Spring quarter瘋狂補了一波材料系要求的課程,同時選了CS 142來鞏固我full stack相關的知識,事實證明這一部分對於我的實習還是有著非常大的幫助的~之後暑假拿到return offer,秋季學期有太多想上的好課,同時因為不再需要找工作,想多學一些machine learning相關的知識(感覺會對未來的職業發展有更多的幫助),所以就選了CS221, STATS 202以及和database相關的CS145~最後兩個學期就是佛系補補材料系的core,同時尊重一下stanford ML的兩大神課CS224N (NLP)和CS231N (CV)啦~下面是一個貼心的分類(都只是basic的很實用的作為software的必修課程,如果你想在某一個方面深入研究,比如ML,還有很多高階課程可以選)材料系相對簡單的core:MATSCI 203, MATSCI 206, MATSCI 208, MATSCI 209, MATSCI 210, MATSCI 171, MATSCI 174, MATSCI 175材料系相對簡單的選修:MATSCI 303, MATSCI 316, MATSCI 331, MATSCI 343Product相關的CS課程:CS 108 (Android), CS 142 (Web)Data相關的CS課程:CS 145, CS 246Infra相關的CS課程:CS 107, CS 110, CS 140演算法課:CS 161

    ML相關的CS課程:CS 221, CS 229, CS 224N, CS 231N

    另外轉碼最重要的還是刷題呀,CS 106B的演算法和數據結構我感覺已經足夠用了,想學更多演算法的話可以考慮CS 161 (聽說上完的話所有面試都不怕了),然後就是和leetcode進行漫長的糾纏,建議做好刷題筆記回頭再看會非常省時間~最後祝學弟學妹們轉碼順利,拿到想要的offer~
  • H同學:入學的時候打算繼續申請材料PhD,進ChemE組搬磚,第一個 summer 後決定轉碼。第二年暑假實習(full stack),七個 quarter 畢業。Timeline: 2016 Fall: MatSci 203, MatSci 303, CS 106A;2016.12進組搬磚;2017 Winter: MatSci 206, EE 216, ChemE 240;2017 Spring: MatSci 202, MatSci 343, CS 106B, CME 193;

    2017 Summer: 搬磚,決定轉碼;

    2017 Fall: CS 145, CS 221, CS 229;2018 Winter: CS 107, CS 161; MatSci 320; 找實習;2018 Spring: CS 142, CS 231N, MatSci 175, MatSci 209, MatSci 316; 繼續找實習; 2018.4收到實習offer; 2018 Fall: CS 108, MatSci 174; 找 full-time;2019.1收到offer.選課策略:材料轉碼建議從基礎課開始學習,以豐富簡歷及提升面試技能為主。CS106A面向毫無編程經驗的同學,難度不大建議自學。CS106B學基本演算法與數據結構,學完之後就可以開刷LeetCode了。CS161理論性比較強,對面試技能提升有限(性價比不高),不建議在找實習階段學。與 Software Engineer 工作技能點相關的CS課程主要有 CS108 (OOD & Android),CS142 (Web App), CS145 (Database)。這三門課也都有可以寫進簡歷的Project,學完之後對拿到面試幫助很大,建議優先選。Systems & Networks相關的課程包括 CS107,CS110,CS140,CS144等,這些課程與 Site Reliability Engineer 崗位契合度較高。不過 SRE 崗機會相對於 Software Engineer少,而且較少向 new graduate 開放。據我所知材料系轉碼沒人選擇這個方向,穩妥起見不建議考慮。拿到 Offer 之後可以考慮選 CS110 補充 systems 基礎知識。由於AI/ML相關崗位競爭激烈且一般要求 research 經歷,以找到工作為目的的話不建議優先學習AI/ML相關課程,包括 CS221,CS229,CS230,CS224N,CS231N,CS228,CS234,CS238 等。

    MatSci Master 畢業要求中包括5門相關 Engineering 課程,其中四門要求課號以2開頭,可以考慮選學上述AI課程或者 CS246。這些課質量很高,也有可以寫進簡歷的 project,不過 workload 較重,不建議安排在找工作關鍵期。

    材料系本專業課程選擇只有兩個標準:難度低,workload低。具體課程選擇可以參考 carta.stanford.edu/ 或者問學長學姐,也可以考慮自身本科背景。本專業課程建議安排在找 Full-time 的關鍵期(第二個 Autumn & Winter),從而把更多時間用於刷題和面試。具體課程介紹請參考以下網站explorecourses.stanford.edu; exploredegrees-nextyear.stanford.edu 投簡歷策略:投簡歷拿面試概率較高的渠道主要是內推和學校 career fair。公司官網/ LinkedIn 上投簡歷也偶爾能收到面試不過成功率不高。找內推可以聯繫認識的學長學姐,也可以在 LinkedIn 上找。投簡歷/面試期間建議重點關注一畝三分地 1point3acres.com/bbs/ 的美國面經版和曬工資抖包袱版。面經版主要用於面試準備,運氣好的話可以碰到原題。有的公司(如Airbnb)題庫不大(特別是OA輪),經常可以做到面試前就在電腦上寫好 code。抖包袱版帖子一般會寫明面試的 timeline,參考往年數據方便自己安排面試。大公司一般八月到九月就會開放 intern 和 full-time 的申請,十月起會有人陸續接到 offer,十二月聖誕假期前大公司秋招就進入尾聲了。即便自己覺得沒有準備好,也應當盡量早投出簡歷,不要等到十月初學校的 career fair 再行動。首先是因為每年招人 headcount 有限,拖到後面招聘標準也會水漲船高;二是一般大公司面試周期較長(如Google),晚投簡歷很有可能趕不上寒假前的 onsite。投簡歷與面試安排需要遵循一個原則:使 onsite 時間盡量集中。一般公司在 onsite 一兩周內(也存在需要一個半月的極端情況)發 offer,之後會再給你一到三周決定接不接。如果面試時間安排跨度太大,可能會出現由於一家公司的 offer deadline 到了而來不及面其他公司的情況,不得不拒掉不錯的 offer 或者鴿了理想公司的面試。因此,投簡歷之前有必要大概規劃一下 timeline,集中面試集中收 offer,方便自己比較各個公司的 package,也可以讓各家公司 compete package,悶聲發大財。

    關於延期畢業:

    我在第二年的 spring quarter 提交了延期畢業申請,延長至7個 quarter 畢業。延期畢業申請要求 advisor 和 department 同意。如果 advisor 比較嚴格,你可能需要解釋為什麼沒有如期達到畢業要求(選了很多畢業無關的CS課)。據我所知我們這屆 MatSci 三人申請延期畢業,只批准了兩個。總之,申請延期畢業有相當的風險,盡量避免。

Statistics

是否為STEM :

時長:最多3個學年

畢業要求:8門Stats必修課,1門數學課,一門programming基礎課:letter grade;其他課程可算作選修課:grading方式不限

轉CS策略:

選課(CS相關課程):

2016 Fall: CS 106A;

2017 Winter: CS 106X;

2017 Spring: NA;

2017 Fall: CS 145, CS 161, CS 229;

2018 Winter: CS 108, CS 246;

2018 Spring: CS 142, CS 107;

2018 Fall: CS 224W, CS 221;

找Data Scientist/Analyst相關position的建議:

可以多補充Data Mining(stats 202, 216, 315B),Machine learning(CS 229)的知識;

熟練使用SQL和python,以及靈活應用統計學知識,多做projects;

培養一些product/business sense;

可以把leetcode裡面的easy題有針對性的刷一遍;

找Software Engineering position的建議:

如果之前沒有編程經驗,沒有學習過演算法,可以先上CS 106B打個基礎;

Leetcode題要儘早開始刷,並且有針對性的刷,可以多逛逛一畝三分地看看面經;

多做project,有一些handson的experience,這樣對於編程能力以及演算法理解都有很大的幫助;

推薦課程:CS 108,CS142, CS 246, CS 107/110,CS 221

Electrical Engineering

是否為STEM :

時長:5-6 quarter

畢業要求:45學分

轉CS策略:

  • L同學本科學過Python入門,沒有java基礎,沒有C++基礎。轉碼的話,簡歷靠選課,面試靠刷題。IT公司軟體工程師面試其實也是千軍萬馬過獨木橋,死剛刷題才是硬道理。我的題目刷得也不多,所以給不了什麼好的經驗。選課方面講道理,EE的選課要求真的很松,所以基本你想學什麼就學什麼。以下是一點心得。CS106B沒什麼用,因為教的是斯坦福自己的C++library,這個library極大地簡化了C++的寫法,你在工業界不會用到的。建議上另一個106,用C++ standard library的那個。CS145這門課其實挺好的,可以教你SQL的基本用法,只可惜我們當時碰上了一個教課很一般的教授。SQL這個東西有時候還是會面到的,所以學學也沒什麼壞處。機器學習方面的課有很多,CS229,CS230,CS231N,CS224N,CS234。個人感覺CS230沒什麼用,還不如在coursera上學,反正是一樣的課。如果只想純做軟體工程師的話,機器學習的課程可學可不學。但是既然來了斯坦福,為何不學學?除此之外,CS的基礎課很有必要學一學,CS107,CS108這種課有時間還是學一下比較好。不過這些課用的時間都很多,加上機器學習的課也有大project,如果不想做一個坑隊友的人,還是安排好自己的時間比較好。
  • Z同學:cs106b (optional, not necessary), cs108(java, good for job), cs fundamental (cs107,cs110,cs161)ML basics (strongly recommend): ee263 (linear algebra), cs109(probability), ee364a(cvx optimization)ML courses: cs221 (intro), stats 202 (applied ML, good intro class), cs 246 (data mining, very useful), cs234, Deep learning(cs224n, cs231n) (these two should be enough), cs224w (graph), cs229(math heavy, very hard)
  • M同學和G同學:找工作刷題還是很重要。如果能來到斯坦福感覺在career fair投一波簡歷,再加上招人內推都能拿到不少面試。題目刷好才能把面試轉成offer。刷題除了leetcode以外一畝三分地的面經題也很重要。也有人總結了近期公司的高頻題,自己面試完也可以發帖說一下給社區做貢獻。斯坦福大部分課程都偏理論,刷題說白了有點像高考,學校可能沒有那麼看中(畢竟也早已過了高考的時候)。相對來說有幫助的是CS161,能學一遍cs基本演算法。但是cs161也很理論,面試的時候根本用不到那麼多東西。說了面試官也未必能聽懂。其它的課程前面幾位同學都總結的很好。EE選課比較輕鬆,又因為要選15門課畢業所以大家選的課都很類似。
  • Y同學:上過的課:System: CS110, CS140開發 : CS142, CS145ML&DL&DM: CS246, CS231N, CS341, CS224NTheory : CS229T, CS368其他:CS251, CS248, EE364A, Psych221我各種方向的課都選過一些,感覺stanford的教學質量還是很好的,上過的課都沒什麼雷(除了個人不大喜歡142,教授講得過於沉悶)。ML/theory相關的課給分都很高,system的課會稍微難拿A一些.一些關於找工作的建議:如果只想當general sde,最重要的還是刷題,我intern面試和fte面試的大部分面過的公司還是考演算法題為主。如果想去hedge fund, system和c++比較重要。比如two sigma和citadel,我面試的時候幾乎沒被問過演算法題,主要是system知識。如果打定主意想找ml related的職位,斯坦福的master也是有機會的。這方面我的個人經驗是apple會願意招master當ml engineer。此外一些二線的公司如walmart labs, adobe也過了我的ml簡歷。如果找這樣的職位就要在ml基礎知識(stanford courses should be enough)和ml design(一畝三分地或者其他地方的面經里有很多)上下功夫。

Management Science & Engineering

是否為STEM :

時長:Flexible, usually 4-6 quarters

畢業要求:45學分, 27學分專業課

轉CS策略:

  • X同學:MS&E課程設計很靈活,選課的順序也沒有要求,畢業生去向也有很多,大概30%會做tech,其中DS和engineer,PM都差不多10%,也聽說過有法國的小哥哥去了citadel的QR(據說全世界只有10個人)....找工作感覺刷題比較重要,上課的話可以接觸到很多最新的前沿的知識,有一段時間來沉澱自己的思考,把技術用100%的時間搞明白感覺以後在工作中就很難有這樣的導師/時間啦.個人的建議是多多上課,感覺斯坦福的課程質量都超級棒, 和每個老師都能學到很多.Relevant並且上過的課程:CS: 106B, 107, 108,142, 224n, 229, 231n, 246MS&E: 211(優化), 226(簡單的統計學習), 346(RL 但是感覺要比CS234容易一些 作業也沒那麼多, 但是338就很theoretical了 取決於大家的興趣)

Civil and Environmental Engineering

是否為STEM :

時長:3-6個quarter

畢業要求:45學分,專業課學分要求視方向而定,目前有對cs課越來越限制的趨勢(eg:要求45學分里最多只能有3門cs課)

轉CS策略:

  • L同學:1.重要時間節點:-剛開始沒有決定轉碼,抱著試一試的心態18 winter選了106a,結合考慮到本專業的就業情況決定轉碼。所以遺憾錯過了第一年的秋招和春招,暑期沒有實習,在stanford summer academic center做tutor,類似於106a 和106b的TA. 同時暑期也重點刷題準備秋招。-18fall考慮延畢一學期,投暑期實習,刷題面試,同時在一家startup做兼職前端實習。-19win找到intern,轉投全職。2.選課建議:-鑒於現在環境系選課要求越來越嚴,建議盡量珍惜可選的cs學分,早做計劃,早做打算。-Peter和Jacobson的課相對較水,比較推薦。另外fluid mechanics相關推薦cee262E,其他課難度都偏大,比較花費時間。-本人選課:cs106a, stats216, cs106b, cs142, cme193, cs108, cs145, cs246, cs246H, stats290.
  • L同學:1. 時間線本科沒什麼基礎,到了研究生第二學期才開始轉,錯過了秋招春招機會,因此直接放棄美國實習機會,專攻國內大廠實習。由於國內對刷題要求不高,少量刷題後拿到菊廠實習。轉碼路線本來以深度學習為突破口,所以Spring學期上了CS230, CS231n,最後選的是計算機視覺組,做的是半研究半工業的內容。返校後在一家startup繼續做深度學習相關的內容,積累經驗。兩段實習結束後,明白自己能力在深度學習方面有限,而且不利於今後找工作,於是在春招改方向,投的職位改為 SDE。2. 國內大廠的時間線與要求:國內的實習開始時間和美國不一樣,大廠基本上3月開始接收簡歷,有內推當然好,但是網申也行。如果公司看到Stanford的背景的話一般都不會直接拒(就算skillsets並不相關),都會跟你聊聊。面試不考編程,最多就是口述一些簡單的演算法,但是會問很多過去的項目。面試又分為general 招聘和組招:菊廠給我的是 general 招聘,面試官考察的是我是否具備計算機基礎知識(演算法,數據結構等)。我也參加過組招,難度會大一些,因為面試官會問很多他們組需要的skillsets的知識,除非我們上過相關的課程,否則我們需要背下這些知識。3. 綜上建議:如果轉碼比較晚的同學建議考慮回國進大廠實習,一樣可以學到很多東西,對未來也有幫助在找大廠實習的時候,第一點就是要能把自己過去的項目講的非常透徹。第二點,對於不同的面試用不同的策略。如果是 general 招聘,則注意複習自己的基礎知識;如果是組招,除基礎知識外,還要注意複習那個組要求的skillsets。建議大家從一開始就確定自己的方向,是SDE還是MLE,這樣一來選課會比較有針對性,選課內容可以參考其他同學的。

Mechanical Engineering

是否為STEM :

時長:5-6 quarter

畢業要求:3 depth courses, 2 breadth courses, at least 24 ME units, 2 math courses and in total not less than 45 units

轉CS策略:

  • H同學:ME program可以說是Stanford graduate program當中課程要求較松的項目。course advisor和staff都比較好說話,只要符合program上的那些硬性要求(已列在畢業要求中),幾乎凡事都可以商量。比如把cs229,ee364a當做數學課,比如把multi-robot system,AA274當做robotics depth的課,這樣的petition幾乎都能過。我自己是robotics depth,可能算半個轉碼的吧,自己選過cs106b是寫碼的課,然後目前有audit cs161。據真正轉碼的同學說,cs161是不推薦的,我也不便多說。如果對robotics感興趣,尤其想找autonomous driving的工作,推薦上AA274,這是一門overview course,包含了autonomous driving的各個方面,control,perception,localization,planning都有涉及,final team project是寫ros用一個mobile robot來做一個任務,會把以前學過的知識,包括寫過的code結合起來。這門課是一個很好的入門課程。然後針對各個領域,如果對perception感興趣可以選cs231n,對localization感興趣可以選AA273 filtering,planning and control可以上AA228 decision making。 Stanford開的這些專業性更強的課程,並不像其他學校那樣是專門幫你找工作用的,更多的是教你這些應用的理論基礎,所以找這方面的工作還是不可避免的要刷題。如果想做robotics的research,如果對haptics感興趣,可以選Haptics system當做敲門磚,或者直接找allison。如果對robotics manipulation感興趣,可以上oussama教的cs223a和cs327系列。我當時進oussama組干過一段時間,就是因為他們會招上cs223a的學生做project。oussama組是robotics mechanical design和control, planning相結合的。jeannette bohg也會教cs223a這門課,也可以跟她套磁一下。如果想找jeannette還可以專門上她的cs326,基本是讀paper和寫proposal的課,她會從這門課里挑學生。如果想做machine learning,cs229是必選的,cs221據說評價沒有229好,但是適合入門。另外還有cs231n是結合cv,cs224n是結合了nlp,cs234是reinforcement learning,大家各取所需就行。

Chemical Engineering

是否為STEM :

時長:5-6 quarters

畢業要求:Four (4) Chemical Engineering core graduate lecture courses. An additional four (4) Chemical Engineering graduate-level lecture courses. Three (3) units of CHEMENG 699 Colloquium An additional 18 units, selected from graduate-level science, math, or engineering lecture courses (3 units or more) in any appropriate department.

這個是2018年新入學的MS的要求,17年之前是不需要4門化工專業課的,也就是說有總共30學分的graduate level選修課,但是現在只有18學分選修了。

轉CS策略:

  • X同學:我當時的化工專業選課很自由,但是必須得是 graduate level 的課(2開頭及以上),所以轉碼基礎課就上的比較少,選的比較多的是AI相關的課程,後來暑期實習也做的NLP相關。化工的core都比較難,而且也看老師,且化工系人每屆中國人比較少,建議抱緊小夥伴大腿。對於新入學(只有18學分選修)的同學,可以參考材料系同學選的課程。本系水課推薦 yoon 教授的所有課,本人沒有上過,但是其他同學都說比較水。2017 Fall: CS 106B (3), CS 145 (3), STATS202 (3) CHEM699(1)2018 Winter: CS 224N (3), CS 246 (3), CHEM310 (3), CS 246H (1)2018 Spring: CS 230 (3), CHEM 355 (3), CHEM 320 (3), CHEM699 (1)2018 Fall: CS 229 (3), CS 221 (3), CHEM 340 (3), CHEM699(1)2019 Winter: CS 248 (3), MATSCI 256 (3)2019 Spring: CS 231N (3)

Education (Learning, Design & Technology)

是否為STEM : No

時長:4 quarters

畢業要求:45 units. 相對比較寬鬆,cs的課程都可以作為選修課

轉CS策略:

  • H同學: 目前在Yahoo Fantasy Sports從事安卓開發- 個人決定轉專業比較晚,到春季學期才下定決心,所以其實錯過了暑期實習的申請季,在找fulltime的時候沒有一個summer intern感覺還是比較吃虧的。主要是轉專業簡歷不紮實,很多公司會直接拒簡歷。所以建議大家提前思考和決定是否要轉碼。-我因為一直是讀文科,所以理工科基礎相對薄弱,在選課中都是選了一些偏寫碼和演算法的基礎課程(106b, 108, 110, 161, 142),沒有涉及任何aiml相關的領域。在找工作的時候,也大多是投偏前端的崗位。我覺得對我來說就是量力而為吧,方便集中發力,實現找到工作的目標。-刷題還是最重要的,需要找到適合自己的方法,然後就是下苦功吧。-我的timeline:3月決定轉碼;4-6月找了一份和自己專業相關的startup實習,開始上手編程,逐步過渡;6-9月開始刷題,9月集中刷題,9月底拿到offer。

推薦閱讀:

相关文章