传说中的谷歌招聘委员会成员之一,从幕后走出来,教你学系统设计!


一亩三分地论坛

 找回密码
 获取更多干活,快来注册
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 18512|回复: 53
收起左侧

[经验总结] [EECS申请与就业专辑]之计算机专业在美国的就业情况+如何选课如何学习(中)

  [复制链接] |试试Instant~ |关注本帖
Warald 发表于 2009-7-12 00:58:45 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
本帖最后由 Warald 于 2009-7-13 23:11 编辑

这个系列的文章都是首发在这个版里,先给自己bbs的筒子们看~~~

上篇里说了公司里需要cs的学生去做什么工作,这篇是过渡,谈一下cs研究生教育和工业界需求的不同。

很多人来美国以前对研究生学习充满了期望,以为可以通过学习,迅速获得将来在社会上求职谋生的技能。这个想法当然没错,但是我想提醒,学校里侧重培养学术科研能力,传授理论知识,跟工业界需求不同。

大家都希望选择排名高的学校接受研究生教育,而这些学校,只所以排名高,很大程度上是因为理论研究做的好;research做的不好的学校,排名不可能高了,甚至是没有什么排名。

研究生学习,尤其是在一个侧重理论研究的氛围下,老师们强调的是你在一个小方向内深入研究,获得领域知识(domain knowledge)和解决问题的能力;学校里做research,经常可以听到强调"IDEA"(中文可以翻译成“点子”),把IDEA挂在嘴边,因为找到新颖的idea设计一套方法理论来解决学术问题,才是科研的核心;老师当然希望你有强大的编程能力来实现你的idea,但是找出idea远比编程更重要,因为编程能力可以慢慢培养,idea可不是你想有就可以有的。

研究生的课程,根本目的还是系统的传授理论知识给学生,而不是教学生如何使用某项具体技术,所以到了研究生这个层次,就没有什么很应用的课程比如说C++/Java了。开设的程序语言设计(programming language design)这种课程,也是从底层告诉你如何设计一个程序语言,而不是教你指针数组怎么用,类怎么设计。整体上,学校里轻视成熟技术,学校的老师不会很excited陪你整天玩j2ee,.NET这些东西,尽管他们在工业界用途广泛。

相比之下,公司决大部分职位需要的是能熟练使用某些具体技术的人,公司基本不需要你卓越的研究能力和超群的理论水平。
. Waral 鍗氬鏈夋洿澶氭枃绔,
还是举三个例子方便理解

1)例子一

你很喜欢程序语言设计这门课,你深入的学习了如何设计一门语言让别人使用来编程,说起程序语言设计的各种问题,啥type system, scoping, parameter passing,evaluation mechanisms,你头头是道,班上就你一个人拿A。你鄙视了一下班上号称java/C++高手,但是只拿B的同学,然后信心饱满的去找工作。

有个公司里要找software developer,要求熟练使用某种语言,你觉得通过课上的学习,对常用程序语言设计上的优缺点有了很清楚的了解,你甚至写过一个很全面很深刻的总结,基本的object oriented concepts你还是会的。但是面试的时候,公司的人不跟你讨论任何语言的优劣,人家全是问如何使用某种语言,比如说 JDK某个类的methods有哪些能做什么,enterprise javabeans的知识,如何实现singleton的模式,什么是object oriented perl,给你个现实问题让你现场设计C++ classes,etc etc

如果你的技术水平不过硬,你立刻就傻眼了,一肚子的理论知识都白搭;而那些理论学习成绩一般的java/C++ experts,反而更容易应付自如。

学校的课程是讲授理论的,是tell you how to design a language, not teach you how to program in any language。research/theory和technology/application,是不同的。

2)例子二. from: 1point3acres.com/bbs

XML曾经是数据库(DB, Database)的研究热点,多年前这项技术刚出现的时候,学校里的professor们会指导学生研究这个方向,比如研究针对XML的query如何设计如何优化,等你毕业的时候,你以为你是数据库专家了,但是去公司求职的时候,发现市面上还没有处理XML的数据库呢。你强大的xml数据库 domain knowledge就是屠龙之技,无用武之地。

等这项技术开始成熟了,oracle和SQL Server都决定支持XML存储和查询,招聘大量懂XML和数据库的人去开发,你才有机会;但是开发数据库的就那么几个公司,如果oracle和微软都不要你的话,你走XML+DB的这条路子就暂时断绝了。XML当然是项成功的技术,被广泛应用在各个domain,能query XML的DB engine也早就有了,但是学校里拿来发表论文的东西,有多少在大浪淘沙之后,能被工业界广泛采用?如果你辛苦研究的新颖理论/技术中途死掉了,你在这个小领域上的努力也就接近白费了。

也许你会说,我还有解决问题的能力啊,但是公司的人会说,我们花钱招你来是让你干活,解决实际问题的,不是让你来发论文的。我们用的就是SQL的数据库,你说你懂数据库?ok,那我出SQL和Oracle的题目考你,回答的不好,我们不要。SQL的确不难,但是作为成熟的技术,不是novel idea,一些研究DB的研究生可能几年没碰过,万一人家出了个古怪或者复杂的问题,你被问倒了,没拿到job offer,那你不是要哭死?至于oracle这种大型软件,里面的东西就更多了,有些研究数据库的同学,可能用的是实验室自己开发的xml or data stream processing的prototype系统,根本不碰oracle。

3)例子三

你研究的是软件工程,而且是很新颖的用data mining technique或者formal methods来解决某个问题,还发表了一篇牛论文。公司的人乍一听专家来了,很兴奋,仔细一问,就说一句话,方法很好,但是实际上行不同,在工业界没办法应用。因为你的方法/理论做了一些的假设(assumption),而这些假设在现实中很难实现。

然后公司的人说,你解决问题的能力很强,很聪明,但是我们这里做开发的主要用C++,作为新人,你的编程工作会比较多,我来考你算法设计、设计模式和 C++编程的知识吧。again,如果你在学校里做科研项目用java(或者是更没人用的语言比如Scheme),一堆C++的问题考死你很容易。

不可否认,并不是所有的理论研究将来都用不上。我也听说有的人研究network performance,有的人研究存储技术,在公司里找到了可以大体上还可以学以致用的位置,因为公司有少数职位的确需要雇佣domain expert。但是通常情况下,工业界需要大量能解决实际问题的人,需要skilled workers,而不是理论专家。所以在面试的时候,很多人不是死在不懂research没有domain knowledge上(公司里大多数职位要求的domain knowledge翻翻书甚至有时侯看看wikipedia可能就足够了),而是死在C++/Java或者是数据结构、设计模式这种很基本但是很实际的东西上。
. 1point3acres.com/bbs
读研究生,学校希望能教给你领域知识和设计新方法解决问题的能力,瞄准high level的教育,提高你的理论水平;但是公司希望你能有解决具体问题的skills,懂得low level,down to the earth的具体技术细节,这些东西,最多是你研究生学习时获得的副产品而不是学习目的。这是根本原因。学校的做法没有错,学校就应该教给你理论知识,这样不管外面流行什么技术,你都可以很快理解学会,但是工业界急功近利,希望你来了就能熟练使用各种工具干活。深刻理解这种mismatch,在二者之间找个平衡,是你的责任。

追究讲谁对谁错没什么意义,这个问题也不是美国学校特有的。学校里当然要教给研究生理论知识,提倡学术研究,否则改成开java认证学习班算了。

美国有些学校注重工程应用,上课期间布置比较多的projects,学生需要动手解决问题,进行大量的编程工作,很培养能力;有的学校,设置一些很实用的基础课程给硕士生选。这些对于着眼于工业界就业的同学来说,比较有利;如果一门课,老师布置你读无数新发表的paper,那你从这些paper里获得的知识,将来去公司工作,很可能用不上。

可能有人说我的观点只注重眼前,不考虑长远发展,但是问题是不管是在中国还是在美国,我们的第一目标是先找到第一份工作再说,没工作,啥都免谈。找到工作以后,公司需要什么,我们就学习什么;有了工作,有了工资,啥有用啥流行咱学啥,而且很可能是公司出钱让你学,因为员工的培训(training)本来就是公司支持的。

关于选课学习更具体更丰富的内容,敬请关注下篇. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
. 鍥磋鎴戜滑@1point 3 acres
---- Warald  (iamxiaoning@gmail.com)
首发于一亩三分地bbs(http://www.1point3acres.com/bbs)ee/cs/mis专版. From 1point 3acres bbs
http://www.1point3acres.com     http://iamxiaoning1980.spaces.live.com
欢迎转载,转载请保留我的ID/Email/Blog,谢谢
剑痴 发表于 2009-7-12 01:05:02 | 显示全部楼层
希望下篇能看到Warald列举几个以就业为导向的uni和program~
ljcljc 发表于 2009-7-12 10:29:13 | 显示全部楼层
收藏收藏。。。。.1point3acres缃

掌握这些东西可以帮你找到第一份工作,不过仅仅为了找到一份工作而来美国是不是有意义呢??

最近一直在考虑这个问题。。
 楼主| Warald 发表于 2009-7-12 12:25:29 | 显示全部楼层
收藏收藏。。。。

掌握这些东西可以帮你找到第一份工作,不过仅仅为了找到一份工作而来美国是不是有意义呢??. visit 1point3acres.com for more.

最近一直在考虑这个问题。。
ljcljc 发表于 2009-7-12 10:29
. visit 1point3acres.com for more.

我总觉得无论你在哪里,第一件事情,是先找到一份工作,有了安身立命之本,再考虑发展或者其他。. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

可能是我比较实际了,未必适合每个人的情况。
ciz 发表于 2009-7-12 16:00:30 | 显示全部楼层
参考~
现在有些学校已经不仅仅教理论知识了,比如某普通 211 现在把 CCNA 拿来当课设(学生接受率暂不予考虑)
Skilled Worker... 谨记谨记……很多时候我搞不明白学校应该怎么教课才好,尤其是本科。。
harvester 发表于 2009-7-12 17:05:38 | 显示全部楼层
想就业就申硕士,想做研究做faculty就申博士,但很多学生在自己是该投入到工业界还是该做研究的问题上犯晕,毕竟大多数本科毕业生都没体验过这两者,哪个适合自己心里没数。
 楼主| Warald 发表于 2009-7-12 21:28:47 | 显示全部楼层
参考~
现在有些学校已经不仅仅教理论知识了,比如某普通 211 现在把 CCNA 拿来当课设(学生接受率暂不予考虑)
Skilled Worker... 谨记谨记……很多时候我搞不明白学校应该怎么教课才好,尤其是本科。。. more info on 1point3acres.com
ciz 发表于 2009-7-12 16:00


我也不知道。

公司需要skills,但是在学校,就是应该学习理论
 楼主| Warald 发表于 2009-7-12 21:31:59 | 显示全部楼层
想就业就申硕士,想做研究做faculty就申博士,但很多学生在自己是该投入到工业界还是该做研究的问题上犯晕,毕竟大多数本科毕业生都没体验过这两者,哪个适合自己心里没数。. From 1point 3acres bbs
harvester 发表于 2009-7-12 17:05


yes-google 1point3acres
还有人博士毕业后做了两年professor,然后去工业界,这就更狠了
 楼主| Warald 发表于 2009-7-13 00:04:25 | 显示全部楼层
想想以前本科读的软件工程,JAVA, .NET之类的应用课程很多。。学得时候大家怨声载道,要经常代码,画UML图,很麻烦。可是等毕业找工作了才发现,掌握这种实用型技术还是很管用的,不少公司还是很偏向于招有JAVA或者. ...
xiaojxiao 发表于 2009-7-12 23:45


lswsq 发表于 2009-7-13 00:46:11 | 显示全部楼层
Warald 说的对,特别是硕士
cliff 发表于 2009-7-13 13:40:33 | 显示全部楼层
我个人还是觉得要强调动手,无论是research还是working。我以前就是看了一大堆Java的书(web和app都有),然后真正动手写程序时,很难下手。所以我感觉是理论懂了就行,记住几个重点的函数,在编程中去理解、强化、记忆理论,工作中用到就那么几个(因为我只知道国内的情况)--1.架构,2.api调用,3.Google,反复用,过不了2年就项目经理了,然后又继续混日子。
而且最好不要学得太多、太杂。过一段时间不用还不是等于没学过。
至于idea,这个不好说,可能你喜欢看小说,想象力丰富,触类旁通,也会有很好的点子。这个还真不好说,可能你的idea确实好,但是实现不了,想起当年李开复在苹果做的东东,是很新颖,但是不适用或者不被广泛使用,这个也就不能叫创新。故,idea分成理论和实现两个部分考虑,达到了这两个部分,才是好的、有意义的idea。

评分

1

查看全部评分

cc0128 发表于 2009-7-13 21:19:35 | 显示全部楼层
本帖最后由 cc0128 于 2009-7-13 21:28 编辑

java .net这些东西如果只是应付面试实在不难,自己做几个项目,然后google下,java、.net面试笔试题,一共花上一个月准备也就差不多了。
所谓什么ssh,google几个pdf一看也就知其然了,至于是不是知其所以然实在没必要,能忽悠面试官即可。
真的要用的十分“精明”,还是要靠工作中巩固。有点熟练工种的感觉。
以上经验局限于国内。

评分

1

查看全部评分

 楼主| Warald 发表于 2009-7-13 23:17:00 | 显示全部楼层
我个人还是觉得要强调动手,无论是research还是working。我以前就是看了一大堆Java的书(web和app都有),然后真正动手写程序时,很难下手。所以我感觉是理论懂了就行,记住几个重点的函数,在编程中去理解、强化、记 ...
cliff 发表于 2009-7-13 13:40
. 1point 3acres 璁哄潧

非常赞成。
 楼主| Warald 发表于 2009-7-13 23:17:58 | 显示全部楼层
java .net这些东西如果只是应付面试实在不难,自己做几个项目,然后google下,java、.net面试笔试题,一共花上一个月准备也就差不多了。
所谓什么ssh,google几个pdf一看也就知其然了,至于是不是知其所以然实在没必 ...
cc0128 发表于 2009-7-13 21:19
. visit 1point3acres.com for more.

在美国也同样适用。. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
不过,最担心的就是面试的时候人家问得比较细比较深,学得好,总是有帮助的。
慕尼星 发表于 2009-7-16 20:30:05 | 显示全部楼层
实用性确实很重要,但是在选校的时候反而会让人很犯难。
比如对于一个想去工业界发展的学生来说,重理论的top50-60的学校和一个重应用的top120-130的学校,怎么选呢?
 楼主| Warald 发表于 2009-7-16 23:25:50 | 显示全部楼层
实用性确实很重要,但是在选校的时候反而会让人很犯难。
比如对于一个想去工业界发展的学生来说,重理论的top50-60的学校和一个重应用的top120-130的学校,怎么选呢?
慕尼星 发表于 2009-7-16 20:30


你这个例子举得不好...如果有50-60的,当然得去了,120-130差得太远了
pm200061 发表于 2009-10-12 01:23:06 | 显示全部楼层
受益匪浅!知道自己的方向!
siklone 发表于 2009-10-12 11:07:35 | 显示全部楼层
真的是一切以工作为目的。我没有其他那么高尚的想法,那些想法也是以工作为前提的。
julyorsky 发表于 2009-10-17 09:55:15 | 显示全部楼层
那么就是如果以工作为方向,在学校里学习的时候对自己实际操作的能力要重点培养了吧...
julyorsky 发表于 2009-10-17 09:56:27 | 显示全部楼层
那么就是如果以工作为方向,在学校里学习的时候对自己实际操作的能力要重点培养了吧...

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-9-23 12:00

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表