斯坦福大学位处矽谷,选课自由,是世界上最适合转码的学校之一。我本人是材料系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。

推荐阅读:

相关文章