在CMU待了一个半学期了,对于留学,对于CMU,对于ME,对于转CS,对于CMU其它各种项目都了解的更多了一些,也有不同的体会。
我想这篇文章应该会对任何一个申请了CMU,或者想申请CMU,甚至每一个想要出国留学的人都会有一点帮助。 写下面这些内容是站在找工作的角度来写,大家可以直接跳到自己相关或者感兴趣的部分。
1、先介绍ME
2、然后讲如何转CS
3、介绍一下CMU其它一些CS项目 ECE,INI,VLIS,EBIZ等等
4、LZ所了解的一些CMU CS向的课程
5、其它非CS项目 CEE,ChemE等
6、留学感悟,如何在美国过你的留学生活
1、CMU ME项目
最近正好地里爆出不少CMU ME的 AD, LZ在北航的学弟学妹们也表示很多人都同时拿到了。 对这个录取很多人面临抉择,想知道这个项目到底如何。
从录取难度来讲,TOP的就不用说了, UIUC, UMICH, AUSTIN, GATECH,UCLA,UCSD 这几所肯定都大于 CMU。 PURDUE的话跟CMU风格不一,
以往有拿到CMU被PURDUE拒了的,也有拿到PURDUE被CMU拒了的。 假设你是想坚持本专业,我觉得 UIUC, GATECH, AUSTIN, UMICH都比CMU好一点。
至于CMU ME水不水, LZ的观点是,CMU ME说不上特别好,但也不算水,如果你是国内非TOP 2, GPA在84-87左右, GT尚可,能拿到这个AD的话,我个人觉得来CMU不亏。
这个背景拿到UMICH AUSTIN 以及再往上的学校的概率也不大, 13FALL过来的也有T大 GPA 88, 89 拒了ULCA, UMICH的。
可能被录取的同学还是会关心,我就再讲一遍我们这届同学的背景: 清华5,浙大6,北航7,上交3,北大2,复旦1,中科1,华科2,大连理工2,同济1,天大1,哈工大1。 美本三人:WPI, UCSD, MSU。 所以个人觉得只要不是太心高气傲你来了这边还是不太至于觉得周围都什么野鸡大学过来的。
之所以觉得UMICH,UIUC等学校的ME比CMU好,一个重要的原因是这边ME系规模不算大,方向不是特别全。 CMU ME 比较强的领域是传热,流体等方面,而设计,制造等方向就比较弱了,做的老师少。 而UMICH等学校机械系很大,方向很全,各个领域都有一些有实力教授在做,课程,research上当然就有更多选择。而对于ME就业而言,湖区的地理位置依然是除了德州以外最好的地区之一。
但CMU ME也依然有很多值得肯定的地方。首先我觉得你要是学能源,热学方向的话,这边的实力还是比较强的,好课也比较多。例如前系主任YAO的 Adavanced Heat Transfer等。 其它方向虽然不算顶尖,但除了其它一些ME比较牛的学校以外,也还算不错。另外这边还有做CAD方向的,但是与其说是机械,计算机图形学的内容比机械还多,总的说来CMU ME做的方向都有点脱离传统机械的感觉。
其次,你选择CMU ME的话,给你的是整个CMU的资源。 系里面有很多人想学ROBOTICS, CONTROL等方向,而这个方向CMU有顶尖的Robotics Institute,robotics跟ME毕竟是千丝万缕的联系。CMU选课十分自由,很多人都上RI的几门好课如 computer vision, Kinmatics &Dynmics & Control等。 你不仅可以选RI的课,还可以找RI的教授做你的advisor,加入RI的实验室。我们这一届有几个同学刚来就找了RI的导师,跟那边做research,好像现在已经有Paper要发了。 机电方向,ECE与ME合开的 Linear System,Nolienar Contro, Mechatronics 也都比较不错。所以说你选择CMU是选择整个学校的资源,其它系的资源弥补一些ME比较弱的方向上的短板。
这边坚持ME的同学们,无论是想读PHD还是想读MS的找工作,我觉得大部分人都找到了自己的方向,robotics也好,energy也好,都有一个目标。如果你想以CMU ME作为跳板申请PHD的话,这边做research的机会还是比较多的。MS 的RESEARCH靠自己,可水可不水,你要是不想好好做教授不会逼着你,你要是肯花功夫,也能很快出paper。CMU这块牌子还是算好使的,这边读MS想跳顶尖的MIT,STANFORD什么的PHD会比较难,但是往年在本校,或者GATECH,PSU,CORNELL去读PHD的还是有不少,只要你愿意努力好好做research,这一个平台还是能送你去这样的学校读PHD的。本校转博的话,要看看人品,如果刚好你MS的advisor有OPENING,说不定你没那么优秀也转成了,反之你有可能其实挺优秀也没转成。
总的说来,就是除了LZ上述的那几所学校,即使你不想转CS,来CMU不一定太理想,也不会太亏。
至于就业,我先说不转CS的情况。其实找ME工作的情况我了解的信息比较有限,因为CMU ME大面积转了CS,再加上LZ自己也转,接触的找ME工作的信息比较少。我知道的是前年有学长拿了APPLE ME方面的职位,上一届学长有拿到斯伦贝谢的,上上一届坚持找ME的好像也有几个OFFER,总之ME在美国的DEMAND比CS EE小很多,但是比其它engineering好像又强一点。我现在获知的信息大概是下决心要留美的普遍最后都还是有机会,只是过程比较艰辛,很多时候可能拖到毕业之后一两个月甚至更久才找到工作。
2、转CS
这一部分对所有CMU想转CS的同学都适用,不仅是ME的同学。 转CS在CMU是一个普遍趋势,ECE不用说,除了极个别基本全民码农了,ME趋势猖獗,我们这一届一半左右的同学转CS。 CEE,ChemE转码农的都渐渐多了起来。 转CS的原因不用多说,CS是目前美国最好找工作的专业, 并且优势明显,再加上CS又是CMU最强的专业。 CS系的好课也是最多的。
如果你拿了CMU ME的AD,想转CS的话,不要犹豫,这里是你最好的选择。
但是我还是觉得,你一定要对CS有兴趣,再选择这条道路,如果你真的不喜欢编程,不喜欢算法,那么不要只是因为好找工作就走上这条道路。
之前12FALL,11FALL大部分学长转CS的道路就是把CS主要的课程上掉,拿着ME的学位就去找工作了,我之前说过ME可以选择COURSE型毕业,只要求5门系内的课,其它的可以任选。所以这两年你能几乎把CMU大部分的CS好课上个遍。只要坚持下来,能力上是绝对够的。
(1)很多人担心拿着ME的头衔去找CS的工作会不会很不靠谱。
以已经毕业的11FALL的学长的就业情况来看。有一个学长说的情况是想找码农的最后都找到了,但没有证实。可以证实的是,拿到Oracle offer的有3个,还有AMAZON的OFFER,1个QUALCOMM, 2-3个 VERTICA(HP子公司),其它的应该就分布在一些中型公司了,去大公司的还是比较少,但11fall中国人本身也不是很多,还有一部分不转CS的。12FALL 目前还没毕业,我知道的学长有敲定了ORACLE和斯伦贝谢,还有BOA的OFFER,有去参加AMAZON的ON SITE,其它的还不是太清楚。好像大部分的人还在忙于找的过程中。
你要是实力够强的话,更不用担心,之前的学长有几轮on campus就搞定A家的,都不用去on site,O家也是还有一年才毕业的时候就搞定了offer。
总的来说,CMU ME找CS的工作可能会越来越容易,原因很简单,前人铺路后人收益。在11FALL之前CMU ME转CS之风还是不那么猖獗的。人脉缺乏,选课也靠自己摸索。现在在他们之前的学长不少进入这个行业以后,后面的人的network就更容易建立了,找工作找内推就更容易。举个例子,一个月前参加CMU春季的career fair,这家VERTICA在cmu做校园招聘的两个人就都是ME 11FALL的学长学姐,他们看到是ME的就都会把简历推荐给HR,其它的很多就被叫去网投了。当然因为他们在匹兹堡OFFICE的INTERN只有很少很少的OPENING,最后估计还是会石沉大海,但却说明了NETWORK对于找工作的重要性。咱CMU ME的人在计算机领域的NETWORK正在建立壮大之中。以后我们再找工作的时候要找oracle, amazon, vertica这些公司的内推就有了。
总的来说,非CS degree最大的缺点还是在过简历关上可能难一些。但我的观察来看,找全职的时候,A家不论专业都会给面试,ME之前已经好几个拿到A家OFFER了,CMU化工也有去A家的。O家也不太看专业,只要GPA够。 FLGT什么的可能比较难,但是之前的学长也混到了Twitter的ONSITE,所以也不是非CS,ECE就不给面试。进入面试以后,专业什么的影响就很小了。
也有很多人选择转其他PROGRAM,13 FALL入学的有三个同学申请14spring ECE被录取(说起来都是泪),12FALL的学长 有申到RI MSRD的,有一年半拿到ME然后又录了一年的CORNELL CS,都是两年半拿两个学位。
(2)很多人担心从零开始学一门新的专业会跟不上
这个问题的话,个人觉得,你只要对CS有兴趣,学习能力强(聪明)或者努力刻苦中间具备其中一个的话,就一定能做的好。
CS这个行业,因为这两年DEMAND确实大,使得他可以速成,熟练掌握一两门语音,学好算法数据结构,懂一点操作系统或者分布式系统或者数据库或者前端的网页开发之类的,就可以赶鸭子上架找工作了。当然想进顶尖公司还是不够的。总之在CMU给你提供这么资源的情况下,只要你努力学,两年的时间绝对可以打造成为一个合格的software engineer。
至于你需要修炼的,个人觉得第一学期可以上一到两门语言讲的比较多的课打打基础,如JAVA C++等。最好能再上一门有编程的 algorithm + datastructure. 这些是必备的 第二学期可以考虑一门 computer system类的,一门design pattern相关的,一门data base。一门进阶的algorithm。之后就是你自己的选择了,OS, Distributed System, computer networks, cloud computing, machine learning,compiler, storage system,对设计有兴趣的也可以考虑front end的东西如web development (HTML CSS JavaScript Django 之类) ,在这些领域中选一些你感兴趣的方向specialize一点,最好是project oriented的课提升你的项目经历,丰富简历,提升CS素养。
修课的过程中有一点编程和算法数据结构基础就可以开始刷题了,第三学期开始之前最少刷一遍以上CC150。如果你按照这样的套路稳稳的走下来,修好课,刷好题,我相信你没有任何理由找不到工作。
(3)找实习的情况
大家基本公认实习比全职要难找,LZ的感觉也确实是这样。去年入学的同学里面,截止到目前为止,有一个同学拿到了Microsoft ME方面的职位 PAY自然是很高,有一个拿到匹兹堡本地的一家ME startup. 找CS实习的, 有两个同学拿到了ANSYS的实习,这几个PAY都在税前3000左右。
LZ自己找纯SOFTWARE实习,目前收到6个面试,都是小公司。前天拿到了之前面的Pittsburgh本地一家BOSCH旗下的小公司的实习,感觉不是很正规,问MANAGER PAY的事情还没回我,肯定比ANSYS还要低一点。昨天刚面试了ANSYS,是做developing service的Team。他家developing全是C++,想要intern对VISUAL STUDIO比较熟悉的,LZ已经好长时间主要只用Eclipse了,所以感觉不是很MATCH,面的也就不是太好,估计要跪。
之前还面过两家纽约的,一家什么CAPITAL,问了我一些JAVA和C++的题目,然后问金融方面的经验,答曰没有,然后就跪了。还有一家IT CONSULTING,本来准备他问题的,结果明显是个HR不懂技术,叫我描述自己的PROJECT,根本没好好准备,然后没消息了估计跪了。 另外两个面试一个发现UNPAID就果断没鸟,一个发现完全是FRONT END还要portfolio果断表示不面了。但拿到的面试比上LZ海投的简历数实在是太少了,拒信也很少,大部分是没有消息,希望有大大帮LZ改下简历和CV啊,确实项目经历太少了!
从我自己找实习的经验来看,咱们半路出家的人,找实习的时候差不多就学了一个学期多一点的课程,实力上确实还是欠缺一些,再加上LZ第一学期的时候还想的是要把ME学位先拿到,所以上了些什么数学之类没用的。所以暑假想找一个好实习还是挺难的。另外像AMZON这些公司,全职的时候一般ME,化工都会给面试,但是实习的时候很多就不给面。 LZ之前在地里看了不少A家的面经,感觉其实有些被面的比较简单的话,基本能做出来。抱着侥幸的心理投了个A家,果断不鸟我。但是也不一定,ME的同学投EBAY什么的也有拿到面试的,他面的时候问了个rotate array的题(reverse 三次),问了个为什么hashTable是O(1)的插入删除,但BST还是经常运用,感觉好像不算太难,可惜LZ没敢投,只能悔出翔。其它ME的同学还有拿到BlackStone IT组的ON CAMPUS的等。 咱们半路出家的人,找实习的时候就放低点身价,大公司进不了就投小公司,PAY能养活自己就行,机会还是会有的。
总的感觉大公司的面试套路比较确定,肯定会考算法题。小公司的面试反而不好面,一般电面不太会考算法,要问题的话估计就是些语言类,或者描述性的题,比如让你说几种提升CODE 性能的方法。或者是让你讲你自己的PROJECT,最好提前准备好。
另外找实习的东西其实运气成分比较重,比如ANSYS实习的一个职位是用python写testing的,ME上学期有4个同学上用PYTHON的15112,但最先拿到这个实习的却是4个同学中唯一一个这门课没能拿A的。又比如之前career fair的时候,看到有一家RIVERBED的公司在当场做题,LZ就跑去试了试,拿到一道求数组中和最大的sub sequence的题,这道题LZ本来就知道,直接把O(n)的算法写了出来,以为能骗个面试,结果没有收到通知,另一个同学上去写了个不算太优的算法,却收到了面试的通知。
3、CMU其它项目介绍
拿到CMU ECE,INI,EBIZ,MISM,VLIS等项目纠结的同学看过来。
LZ之所以比较了解这项目,一是因为在CMU待的也有一段时间了,而是LZ是坚定的转CS者,一直在考虑也拿一个CS相关的degree,所以CMU的CS类的项目都考察过。
去年刚开学ME就有三个同学申请了14 SPRING的 ECE,最后全部录了,包括有截止日期后才提交的。这学期包括LZ在内有更多的ME的同学申请FALL的ECE,结果地里都报了很多了,我们几个都没有任何消息。看着ECE半天不出,LZ在INI截止最后一天申了个INI,材料都是改了改项目名就交了,推荐信和G,T都是一周之后才到。前几天INI报了一些,邮箱也是静悄悄,不知道INI是不是有第二轮,这也是LZ最近比较烦心的原因。虽然以前学长的经验看就拿着ME的学位找CS工作一样可以拿好的OFFER,但总觉得有一个CS的degree会好一些。
CSD, LTI这些地里没几个人拿到的program就不说了,大家可以看看以前的帖子,说说地里录取比较多的项目。
VLIS: 基本上是 CS 院下所有professional 项目里最好的了吧,性价比很高,就业很给力,课程非常硬。 如果没有UCLA,UIUC等及以上的纯CS MS的AD,目标是就业不是PHD的话,我觉得来VLIS不用犹豫。
ECE: 从往年来看,ECE 秋季和春季录取难度差别很大。 今年地里拿到ECE FALL PITT校区录取的也没几个,基本背景都很好,很多同学都拿到了推迟到SPRING的录取,正是说明了ECE spring的生源不是特别的好,才会给每个人延期都spring的选项。ME春季申请转ECE全录,秋季都没消息,可能也是这个原因。
我觉得对于本科EE,想转CS的同学,CMU ECE是个很好的选择, CMU往年的就业数据也很好。
拿到延期spring的同学,spring入学跟秋季入学从学习上来说并没有太大的区别,唯一的劣势就是得在家待半年和暑假没有实习。ECE CS向的课很多,不用太担心课程的问题。
INI: INI往年的就业比ECE还略好一点,NI几个项目中,尤其MSIN的课程非常硬,扛下来以后,实力都会有很大的提升,所以最后的就业自然就好。INI的degree requirement学分要求比较多,一年半毕业的话会有点累。
MSIT-SE,ESE:
这几个项目LZ真心不是特别了解,也基本不认识这几个项目的人,在CMU属于有点小众的项目吧。选课好像不是特别自由,主要是17XXX software engineering的课,这些课其它专业的基本都没什么人选,上课也在离CAMPUS一定距离的craig street上面。就业情况不是太清楚,不过个人觉得CMU + software engineering的头衔,自己刷好题,上好课,找工作应该不是问题。如果没有其它更好的选择的话,这几个项目还可以的。
EBIZ: EBIZ在CMU内部的口碑并不是特别的好,LZ来CMU之前并不是太了解,来了之后听过一下其他系的人说EBIZ比较水。地里好像也有几篇帖子批评EBIZ。个人觉得要从自己的需求的角度来看。EBIZ的缺点是选课很不自由,第一学期只有一门课,定死了是08600 JAVA,这门课LZ也上过,比较一般吧。第二学期可以选一门半。其它的都是他们本系的project,以前的帖子里面有抨击这些project水的,但是我看周围的EBIZ的同学好像都做的挺认真挺累的样子,但个人觉得还是多上上CMU的好课会更好一些。优点是EBIZ的就业情况还是不错的,GPA刷高去oracle希望很大。所以自身实力不错,想把EBIZ作为一个跳板在美国找工作的话,我觉的还是不错,一年的时间花费也不算特别高。如果本身实力不够,想好好修炼一番,选择其他项目可能会好一点
MISM:对于MIS类的同学来说,MISM是很多人的dream。不过来MISM的话最好做好做技术的准备。可能会跟之前的想象有一点差别。例如 IT CONSULTING什么之类的,去的好像比较少,大部分还是需要码代码的工作。有些同学在EBIZ和MISM中间做选择,个人觉得MISM好一些,当然也看自身需求吧。
4、CMU部分课程介绍
(1)15213 - Introduction to Computer System
这门课LZ是这学期上的,著名的CMU神课。其实213叫神课并不是因为特别难,而是因为这门课开了很多年,反响一直都比较好。真正论难度的话必不会是那种让你很痛苦的课,跟OS什么的不是一个档次。不会让你每天菊花盛开。
这门课上了一半,前半学期讲的内容有:整数,浮点数的表示方法。程序的机器级表示,寄存器,汇编等,比如if, loop, switch等如何实现。程序的stack-frame结构,递归如何实现等。Buffer Overflow的攻击原理等等。然后讲了memory-hierarchy, 着重是cache,然后是linking. Exceptional control flow讲了一半,之后还有virtual memory和 network,concurrency programming.
这门课比较出名的是他的作业,一共有七次LAB:
第一个data,让你只使用位操作实现各种功能,比较有趣也比较烦,你还可以不断减少你用的operator数在排行榜上领先(我是没那个功夫,GEEK们实在太猛了,无法超越)。第二个BOMB,就是读汇编,看懂是在干什么,给出正确的输入。 第三个,BUFFER,让你用BUFFER OVERFLOW的原理去攻击操作程序,植入代码等等,加深对汇编以及BUFFER的理解。 第四个,cache,写一个cache simulator,然后优化一个矩阵转制函数,要求使得cache miss数最少。(LZ真是他妈的想了好久才达到满分)。
前半学期的LAB还算比较好,可以算“有趣”吧。但是有一些有点像智力题的感觉,对找工作来说可能直接帮助不是特别大。据说后半学期的LAB就比较虐了。
5.Shell LAB, 写一个简单的UNIX SHELL, LZ才刚刚开始看,感觉很烦。
6. Malloc LAB,传言中最难LAB,自己写一个malloc,calloc函数等,有性能要求,据说相当的恶心。
7. proxy LAB, 网络编程+concurrency,要支持HTTP GET功能,据说也很恶心的。
213从去年秋季考试改成网考了,难度降低很多,其实LZ之前刷往年题的时候感觉213的考试其实就还好,至少期中我感觉不难,现在改成网考之后时间又多给,拿A其实真的不难了。 对于找工作来说,213的直接作用可能不是那么大,这门课不是让你学编程的,但是这门课是后续一些有用的系统课程,computer networks, OS, DS等的先行课,所以还是早点上掉比较好。
秋季学期讲课的是这本书的作者,春季学期有CMU 大帅哥 Anthony Rowe,色女们自行google吧。LZ有自己偷拍的照片。。
(2) 08722 – Data Structurefor application programmers
这门课主要是开给EBIZ和MISM的,在MISM那边的课号是95772. 但是很多ECE, INI的同学,以及咱ME转CS帮都在上这门课。这门课只有半学期,一共6个credits,相当于1.5学分。内容非常基础,但是我觉得帮助挺大的,对于非CS科班出身想转CS的同学非常建议上一下, 基础越弱收获越大,要是基础比较硬的话就不用上了。LZ上的其它CS的课几乎都是各种牛校的PHD出身,这门课的老师好像都没有PHD学位,肯定没法去上15的课,但是讲课挺用心,讲的也很清楚。讲课这东西真的不是老师自己越牛就讲的越好。尤其数据结构这种比较基础的内容。这门课从最简单的内容讲起,包括array, arraylist, linked list, stack, queue,sorting(bubble, selection, insertion, merge, quick, heap), hashTable, hashMap,hashSet, BST, TreeMap, TreeSet, Huffman coding, Heap. 每周一次quiz, lab, homework。讲的时候内容都围绕Java Collection 来讲,还涉及与collection有关的comparator, iterator 等内容。这门课完全就是针对面试的,作业要求先手写代码(虽然大部分时候都是先ECLIPSE敲好再抄到纸上的)。
6次homework,前面的非常简单,后面稍微麻烦一点,难度都不大,就是让你去熟悉这些数据结构能自己implement,也能用JAVA COLLECTION。
1.自己implement 一个 arraylist 实现各种要求 2. Queue, stack 的implement和应用 3.写一个sorted linkedlist, 要求全部用recursion,不能有任何循环。 4.自己设计implement一个 hashTable 5. Java HashMap的运用 6. Implement 一个binary search tree. 各种操作,以及运用。 包括traverse等,要求traverse必须iteratively 。
作业扣分比较狠,给的test只包括了常规的CASE,要求你自己去想CORNER CASE,因为面试的时候也没人会跟你说要考虑哪些corner case。
6次quiz,时间有一点紧,有些代码填空题,并不是特别容易拿高分,比如第一次quiz最后考了一个在unsorted的数列里面利用binary search找local minimum的变种,在不到20分钟时间做完前面的题之后,要是之前没见过也没那么快就想的出来。其他题目包括reverse a linked list, reverse a linked listrecursively,写 iteratively 的 merge sort 等等。
期末考试时间比较紧,题目有O(N)的recursive的Fibonnaci, 用两个长短数组实现没有latency的arraylist,写Huffman coding, rotate过的数组里面的binary search等。不算特别难,但是时间太紧,大家分都不高。
个人感觉这门课上下来帮助挺大的,比如LZ以前对hashtable之类的说起来也都知道,但是具体的implementation没有搞清楚,hashFunction怎么选。Collision 怎么处理,open addressing,还是linked list。上完之后要清楚不少。 还有像BST这种,说起来谁都会,但是让你写一个BST的class,实现 insert, delete, search等。你能写出bug free的么,我觉得大部分非科班出身的都困难,光一个delete估计就很难保证。甚至让你立马写一个bug free的 merge sort, quick sort可能都不一定。所以上一上这门课感觉还是挺有帮助的。
这门课LZ最后几次简单的QUIZ犯了傻,最后拿了A-,成了成绩单上的污点啊…
(3)02713- Algorithms & Data StructureFor Scientists
这门课的老师是以前在U MARYLAND 教算法的,前两年来了CMU的Computational Biology 系,CMU的算法早有牛人一直在上了就在computational biology系下开了这门算法课。选这门课也是实属无奈,说实话对于CMU转CS找工作的同学来说,CMU目前还真没有一门特别适合的算法数据结构的课。15451 Algorithm design & analysis 不讲数据结构不编程,都是各种证明,各种数学,而且难度很大,远大于面试可能考到的难度。15210 倒是数据结构+算法,而且有编程,但是使用的语言是CMU 自制的函数式编程语言SML,另外并行的算法讲的比较多。这门课WORKLOAD也比较重,再加上你需要自学SML,并行的算法目前来看考察的也不是特别的多,LZ权衡之后没有选这门课。。
上了这门02713以后发现其风格跟15651基本一致,大量的证明与数学。编程作业一共两次,用PYTHON写。
内容包括
1、“简单”图论算法: minimum spanning tree(prim’s, kruskal’s etc.) BSFS,DFS , Dijkstra , A*, Bellman Ford, Topological sorting.
2、 Divide & Conquer: closest pair of points,inversion count..
3、splay tree 4、Dynamic Programming 5、Network Flow 6、Linear & Integer Programming 7、 NPC problem
作业和考试都是围绕这些内容的算法设计和证明,比如让你证明如果一个图里有多个minimum spanning tree的话,那么他们的边的权重的序列一定相同。讲课的时候也是会花很多的时间来证明为什么splay tree是amortized O(log n). 之类的问题。总之比较数学。
编程作业刚布置了第一次,以 Minimum Spanning Tree 做 heuristic 用 A* 的思路做 TSP 的算法,看了一下感觉还是要花一些时间的,特别是LZ这种之前不会PYTHON的人。
另外虽然名字里有data structure 但其实基本没有讲,除了splay tree 以外,就讲MST 的时候讲了一点heap和union find data structure.
这门课对找工作的直接帮助可能也不是特别大,据说面试的时候图论的算法基本也就是个 BFS,DFS . Dijkstra 都不太可能有, 更别说什么 Bellman Ford, A*了。但是上上这门课对一些算法思想的认识上还是有提升的,再加上现在美国这边的算法普遍就是这个风格。在CMU没有其它更合适的算法课的情况下选这门02713还是可以的。另外MISM有一门自己的算法课95771据说不错,难度适中也有编程,但MISM的课外系一般选不上,不过有一名ME的同学发邮件给老师哭诉然后就选上了….以后的同学可以借鉴一下…
(4) 15214 – Principle of Software Construction – Object,Design & concurrency
说点题外话 c++已经在CMU失宠很多年了,除了computer graphics以外,好像CS系的课没有用C++的了。不过其实JAVA也早就失宠了,这门15214就是为数不多的还在用java的课。CMU已经把面向对象的概念从CS学生的必须内容中除去了。现在CMU流行的就是函数式编程,成为了必修,以及各种系统级编程,并行等等。C是CMU永恒的宠儿。
选这门课的原因是因为觉得design patterns 很重要。
这门课的内容包括主要三个部分,第一部分是面向对象的一些概念,inheritance, polymorphism 等等。第二部分是 design,第三部分是并行系统。
CMU的特点是本科生的课不断在变,这门15214开设时间并不长,课程质量跟开了十几年的213确实有差距。作业还算比较有趣,量适中,比213要稍微轻松一点。
以这次的作业为例,要求完成一个scrabble game,包括三个部分,第一部分要求做面向对象的分析与设计,用UML 画domain model, object model , interaction diagram等等。 第二部分Implementation和第三部分的GUI。 要求在设计和实现中考虑和运用design patterns。
这门课有两个老师,到目前为止部分的课是一个德国人老师讲的,他讲课基本上来说就是nightmare级,组织混乱,表达不清。这门课的PPT做的也很烂,上课基本听不进去。导致LZ在第一次期中之后,感觉除了作业以外,好多东西都没学清楚,只能找时间看书了。目前考过一次期中,个人感觉题目比较简单,考完结果也还不错,不过貌似大部分同学分都不高,不知道是不是这货讲课的结果。
(5) 08600-JAVA & J2EE PROGRAMMING
上这门课之前对这门课期望很高,因为名字很酷炫,JAVA+J2EE。上了之后其实有点失望。这门课最早的课号是15600,后来改成08600了,可能因为难度确实跟15 研究生级别的课不相称。完全从入门开始讲JAVA,前几次作业弱智级。中间稍微麻烦一点的作业就给了两周的时间。后几次作业涉及到网页,J2EE开发的东西。最后两次作业稍微麻烦一点,不过也完全搞的出来。期中期末考试都比较简单,拿A很容易。
这门课在CMU CS院研究生级别的课程里面确实算比较水的了吧。不过对于底子薄转专业的同学来说上这门课来学学JAVA,增加一点代码量,熟练度还是不错的,建议第一学期选。
(6) 24787 – Artificial Intelligence & Machine Learningfor Engineering Design
ME系的machine learning课。这门课其实还不错,老师讲的挺好的,课程压力不是特别大,也比较容易拿A。TOPIC 包括常规的decision tree, pattern recognition (主要是bayesian), neural networks, clustering, PCA,SVM, genetic algorithms, 和一些优化算法。作业刚开始做还有一点难度,如果编程基础差的话。比如第一次完整写一个decision tree,刚入学的时候做还是有点蛋疼。第二次作业的狄利克雷分布也有一点难,最后只能靠助教给的公式了。。不过作业的难度后面反而降低了。上这门课作为对machine learning的一点初步的认识的话还是不错的。有同学把这门课和machine learning 系的10601 machine learning都上了,说前半学期这门课作业难度还大一点,不过后半学期就不如601了。建议秋季上,老师讲的挺好的,不过春季学期他把他的PHD扔去讲课了.. ,就呵呵了。
(7) Engineering Computation
这门课的名字跟内容其实不太相关。这门课是ME系内的编程课,主要内容是C++和OpenGL.。这门课之前就有学长介绍,每年很多人都会选,尤其是想转CS的。LZ来之前对这门课期望比较高,因为各种描述都建议选。刚开始上的时候也觉得特别好。不过现在自身水平提升了一点以后再来看这门课觉得有一点水。老师过于NICE,极容易拿A,QUIZ考不好有work shop加分。这门课的老师其实挺牛的,但是他就是太过于NICE,不想太PUSH。OpenGL讲的深度不够,很多东西也都是他提供的现成的framework。 C++部分其实很多东西都讲到了,如copy constructor, destructor,各种const, operator overloading, template,virtual function等等。但是很多内容练习的不够,所以没有真正的掌握,另外老师说 Many people prefer C standard library overC++ standard library including me。然后我们就完全没有用 STL,一学期都是用各种C 的library. 另外ME的编程课对编程规范要求很低,各种poor style 如magic number, no comment, long function都出现在我给这门课写的code中,成员变量也是大量public。现在上的CS的课对这些方面的要求就很严了,严厉禁止各种poor style。当然批评了这门课的一些缺点,不得不说这门课在我刚到CMU作为一门编程小白时,确实给了很大的帮助,代码熟练度,基本的概念等都是来自这门课。对于CMU ME想转CS的同学,尤其是想把ME学位先拿到的话,这门课还是秋季入学必选的。
另外LZ听说的一些好课有
ECE: HOW TO WRITE FAST CODE, Real Time Embedded System
CS: 15112 绝对入门级神课,15122 CMU本科生必须,但是课讲的好想不是太好。154XX的 Database, Distributed System, Computer Networks, OS, Complier Design 都是好课,不过都比较累,尤其OS虐心级。 15319/619 Cloud Computing据说要水一点,开设时间也不长,但是内容好像挺好的。 15437 web application做网页,对前端感兴趣的可以上一上。
5、CMU 非CS项目
CEE: CMU的CIVIL被地里的77大神怒批很水。怎门说呢,CMU CEE系环境加土木两个方向一年MS有一百多号人。招人数量这么多,录取当然是不可能太严。985学校只要GPA GT都还能看就很有戏,非211 GPA GT有些亮点也行。至于就业的话,美帝CIVIL和环境的就业情况不容乐观,比ME还要难。所以现在CEE想转CS的人也开始多了起来,虽然还不如ME这么猖獗,但是也已经有自己的小团体了。我觉得在CEE自身实力够强的话,也一样能找到工作。
Chem E: CMU的化工我认识的人很少,只知道去年也有一个哥们转到ECE去了。化工的录取难度不太了解,但是好像也有人在地里发帖怒批很水。就业的话CHEM E在美帝一样严峻,其它的不是特别了解了。转CS的好像也有一些,不过也应该没ME这么多。
MSE, BME:
这两个是真心不太了解了,没什么认识的人,地里也没见过介绍这两个项目的。估计转CS的应该不多吧,因为我没见过。就业什么的从专业来看应该也是比较严峻,需要自己的优秀很坚持不懈找到好工作的类型。
6、留学感悟
在前面接近一万字的描述中,我几乎在说在CMU如何学习,如何找工作。
在美国找一份收入丰厚的工作,是大部分留学美国读MS的同学们的目标吧。目前来看,在美帝找一份码农的工作,确实是像LZ这样的工薪家庭子弟最容易的获得经济与物质上飞跃的途径。像我这样家庭出身的孩子,如果能拿到诸如AMAZON,ORACLE甚至GOOGLE TWITTER 这样的offer,在二十岁出头的年纪就将拥有一份收入比父母加起来还多的工作,拥有一份可能十倍于你大部分发小,同学的工作。这确实会让人觉得兴奋,觉得满足。
但是此时此刻我也在思考,我们想要的,追求的到底是什么。我想在大家二十年的人生中,过往的经历已经告诉了我们,物质条件的满足并不能给你带来持久的幸福感。或许很多人也和我一样,我们想要一份收入丰厚的工作向父母证明自己的能力,向亲人证明我们的成功。但是你有没有想过这些带给你的可能都只是一时的快乐与幸福。你有没有想过,对你的父母来说,比起在大洋彼岸听到你拿到年薪10W+美元的OFFER的消息,他们更希望有时间和你在一起聊天,吃饭,旅行。LZ不是一个强者,我时刻都在想着,我年过七旬的爷爷奶奶,或许我只有几年的时间可能可以再陪伴他们了,如果以后的每一年我都在美国,当你在大洋彼岸听到他们离去的消息,会不会心中有无限的感伤。我想说这些并不是想动摇大家的意志,只是希望大家在上这条路之前,也能思考一下,你现在所追求和梦想的是不是你真的想要的。
你有没有想过,如果不能找到一份自己喜欢的事业,纵使拥有你曾经渴望的车、房,也很难每天都有奋斗的心情。其实LZ真正羡慕的,是我曾经参加大学生方程式比赛时认识的几个人,他们知道自己最爱的就是赛车,就义无反顾的去做自己喜欢的事业。不感兴趣的可以一点不学,挂科,留级,做赛车时却百倍努力。毕业之后就去做了见习赛车工程师。LZ也是因为没有找到自己最热爱的可以去追寻的事业,所以只能选择先去追求物质条件上的自由。之所以说这些,是想告诉大家,追求物质条件上的满足是为了更加的自由而不是更加的不自由。一份薪水丰厚的OFFER是为了让你在能养活自己,回报父母以后有自由去思考找寻你真正有兴趣的事业,或者为你想追求的事业提供经济上的支持。而如果你最终被这份OFFER束缚住,想得到又怕失去,那么你真的应该考虑一下现在所拥有的是不是曾经所追求的。所以在你决定转或者不转CS的时候,都想一想你是否有兴趣,如果你从来就不喜欢编程,只是为了工作走上这条路的话,我想就算拿到你的DREAM OFFER,也不可能获得真正的幸福感。
最后,想告诉大家,不要鼠目寸光。刚才已经说过,在二十岁出头的年纪就将拥有一份收入比父母加起来还多的工作,拥有一份可能十倍于你大部分发小,同学的工作。这确实会让人觉得兴奋。但是你一定不要就此满足。人生的乐趣在于不断的有新的机遇和挑战。你永远不知道你能做到什么。喜欢管理,可以走上管理层。喜欢创业,你可以辞职办自己的公司。我的同学说他要来着当码农挣的钱回国拍电影,你也可以。如果你喜欢政治,你可能可以加入美国籍,做一名议员甚至。 It may seem ridiculous,but you never know.
很多人在美国拿着丰厚的年薪最后回国,接手一份工资不到此前一半的工作,为什么呢。当你现在就能看到你之后三十年的样子的时候,是时候寻求改变了。
说了这么多,可能很多都只是自己想太多,这一部分不是经验,只能说是LZ自己的意淫吧,希望,对大家有所启发。。
原文地址:http://www.bjnandi.com/show.php?contentid=15917