EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx

上传人:b****3 文档编号:6237101 上传时间:2023-05-06 格式:DOCX 页数:12 大小:25.82KB
下载 相关 举报
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第1页
第1页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第2页
第2页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第3页
第3页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第4页
第4页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第5页
第5页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第6页
第6页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第7页
第7页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第8页
第8页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第9页
第9页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第10页
第10页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第11页
第11页 / 共12页
EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx

《EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx》由会员分享,可在线阅读,更多相关《EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx(12页珍藏版)》请在冰点文库上搜索。

EECS申请与就业专辑之计算机专业在美国的就业情况+如何选课如何学习文档格式.docx

不管你是在哪个行业工作,IT也好,金融保险也罢,或者是啥咨询、生物技术、whatever,不管你的工作头衔(jobtitle)听上去很好听还是很丢人(比如architect/Principle/TechnicalLeadvsprogrammer),也不管你的工资是1万一个月还是5000一个月,最关键的是你的工作性质是什么,只要是以软件开发/编程为主,那么你就是此类的。

这么一说,可能大家就明白了,原来学CS的,不论你是什么方向,殊途同归啊,那我还计较个啥?

区别还是有的,比如说现在cloudcomputing比较hot,不少公司在做相关的东西,如果你在学校里是研究这类技术的,公司可能会因为你的domainknowledge招你而不是一个研究图形学的,但是你将来的工作性质,跟开发图形处理软件的兄弟们是一样的,说高尚点叫largescalesystemdesignanddevelopment,说俗了就是coding,codingandcoding。

大家都说做IT的是民工活,其实公司里资历久,对核心产品底层architecture懂的多的技术骨干,工资也是很高的,而且地位高工作也稳定。

《二》softwareQA(qualityassurance)/testing

每年网上都有很多人发帖子说“我学cs,但是我编程能力比较弱或者不喜欢编程,将来我能不能不去coding?

”做软件测试(QA/testing)就是一个选择。

从软件工程的角度来说,有人写软件,就得有人专门跟在后面找bug提高软件的quality。

QA的活一直被轻视,以前曾经被认为是可有可无的东西,不需要专门的QA,现在被越来越重视了,当然还是有些人觉得qa不如做developers更重要,但是不可否认的事实是,QA不可或缺,QA工作现在很多,已经在计算机行业里占了很大的比例了。

当年帮我settledown的师兄,03年去了微软,05年被调整做SQLServer软件的QA。

QA对技术的要求相对低。

QA可以粗略的分成两种,一种是mannualtesting,全手工测试,你不需编程,基本就是分析软件系统,制定测试计划和用例,然后用鼠标去点击为主,从技术角度来看,的确低级了点,早些年,developers觉得去做QA是降级,跟发配充军一个意思,所以QA不得不到处找,来源很复杂,做QA的整体技术能力也比较低下;

现在随着公司对产品质量和测试工作的重视,有CS技术背景出身的qa越来越被青睐;

第二种QA,做的是自动化测试(automatedtesting),就是用软件工具或者自己编程来自动化测试,这个就要求懂技术甚至要会编程,但是要求又没有developer那么高,这种技术性的QA也比较缺乏,现在的趋势是很多公司尽量用automatedtesting替代mannualtesting来提高效率。

同样经验/教育背景,QA的工资应该比developer低,但是差别也不是很大。

很明显,学cs任何一个方向的人,都可以胜任QA的工作。

《三》Database/networkadministration

developer和qa已经囊括了cs大多数的工作机会,继续写这个类别还是为了满足有些人既想学cs又不想编程的愿望—话说回来,如果不想编程,最好别学cs了。

数据库/网络管理对编程要求也很低,你不需要像开发数据库或者网络管理软件的人那样子,天天耗在编程里。

这类工作优点很多:

1)就业范围广,稍微大点的公司、学校或者任何机构都需要有高级管理员来管理维护网络和存储备份数据库;

2)工作经验越丰富越受欢迎,因为很多job就是得经验丰富的administrator才能处理好,不是随便扒拉一个没多少经验的人就能凑合着做的;

3)信息社会,公司对数据库和网络依赖严重,所以有时候一个经验丰富的database/networkadministrator对公司可能非常重要,如果他突然撒手走了,公司又没有准备好替代人员的话,会损失惨重的。

因此,这类工作工资高,也比较稳定。

前段时间有些金融公司即使大幅度裁员,核心的网络和数据库管理员也会被保留。

这类工作的缺点是入门比较难,公司希望你能有相关的实战经验而不仅仅是会点学校里的理论知识,刚毕业的学生往往根本没有这方面的经验;

有时候需要在晚上或者周末工作,也可能有oncall的情况出现。

《四》Others

其他的工种也有,比如releasemanagement,用户界面(UI,userinterface)设计,usability,Technicalsupport等等,但是一方面这些工作数量相对少,另一方面,不同的公司里,相同的职位名称可能具体的工作性质不太一样,比如做releasemanagment的,有的公司要求做很多QA的活,有的公司更靠近developers,还有的公司可能让你安装/搭建系统来管理不同的releases,跟个系统管理员似的,所以就不一一详叙。

像计算机这种大杂烩、狗皮膏药类型的行业,如何划分工作种类,可能不同的人因为经验经历不同,看法也不太一样。

不过我写文章我做主~~~

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

很多人来美国以前对研究生学习充满了期望,以为可以通过学习,迅速获得将来在社会上求职谋生的技能。

这个想法当然没错,但是我想提醒,学校里侧重培养学术科研能力,传授理论知识,跟工业界需求不同。

大家都希望选择排名高的学校接受研究生教育,而这些学校,只所以排名高,很大程度上是因为理论研究做的好;

research做的不好的学校,排名不可能高了,甚至是没有什么排名。

研究生学习,尤其是在一个侧重理论研究的氛围下,老师们强调的是你在一个小方向内深入研究,获得领域知识(domainknowledge)和解决问题的能力;

学校里做research,经常可以听到强调”IDEA”(中文可以翻译成“点子”),把IDEA挂在嘴边,因为找到新颖的idea设计一套方法理论来解决学术问题,才是科研的核心;

老师当然希望你有强大的编程能力来实现你的idea,但是找出idea远比编程更重要,因为编程能力可以慢慢培养,idea可不是你想有就可以有的。

研究生的课程,根本目的还是系统的传授理论知识给学生,而不是教学生如何使用某项具体技术,所以到了研究生这个层次,就没有什么很应用的课程比如说C++/Java了。

开设的程序语言设计(programminglanguagedesign)这种课程,也是从底层告诉你如何设计一个程序语言,而不是教你指针数组怎么用,类怎么设计。

整体上,学校里轻视成熟技术,学校的老师不会很excited陪你整天玩j2ee,.NET这些东西,尽管他们在工业界用途广泛。

相比之下,公司决大部分职位需要的是能熟练使用某些具体技术的人,公司基本不需要你卓越的研究能力和超群的理论水平。

还是举三个例子方便理解

1)例子一

你很喜欢程序语言设计这门课,你深入的学习了如何设计一门语言让别人使用来编程,说起程序语言设计的各种问题,啥typesystem,scoping,parameterpassing,evaluationmechanisms,你头头是道,班上就你一个人拿A。

你鄙视了一下班上号称java/C++高手,但是只拿B的同学,然后信心饱满的去找工作。

有个公司里要找softwaredeveloper,要求熟练使用某种语言,你觉得通过课上的学习,对常用程序语言设计上的优缺点有了很清楚的了解,你甚至写过一个很全面很深刻的总结,基本的objectorientedconcepts你还是会的。

但是面试的时候,公司的人不跟你讨论任何语言的优劣,人家全是问如何使用某种语言,比如说JDK某个类的methods有哪些能做什么,enterprisejavabeans的知识,如何实现singleton的模式,什么是objectorientedperl,给你个现实问题让你现场设计C++classes,etcetc

如果你的技术水平不过硬,你立刻就傻眼了,一肚子的理论知识都白搭;

而那些理论学习成绩一般的java/C++experts,反而更容易应付自如。

学校的课程是讲授理论的,是tellyouhowtodesignalanguage,notteachyouhowtoprograminanylanguage。

research/theory和technology/application,是不同的。

2)例子二

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

你强大的xml数据库domainknowledge就是屠龙之技,无用武之地。

等这项技术开始成熟了,oracle和SQLServer都决定支持XML存储和查询,招聘大量懂XML和数据库的人去开发,你才有机会;

但是开发数据库的就那么几个公司,如果oracle和微软都不要你的话,你走XML+DB的这条路子就暂时断绝了。

XML当然是项成功的技术,被广泛应用在各个domain,能queryXML的DBengine也早就有了,但是学校里拿来发表论文的东西,有多少在大浪淘沙之后,能被工业界广泛采用?

如果你辛苦研究的新颖理论/技术中途死掉了,你在这个小领域上的努力也就接近白费了。

也许你会说,我还有解决问题的能力啊,但是公司的人会说,我们花钱招你来是让你干活,解决实际问题的,不是让你来发论文的。

我们用的就是SQL的数据库,你说你懂数据库?

ok,那我出SQL和Oracle的题目考你,回答的不好,我们不要。

SQL的确不难,但是作为成熟的技术,不是novelidea,一些研究DB的研究生可能几年没碰过,万一人家出了个古怪或者复杂的问题,你被问倒了,没拿到joboffer,那你不是要哭死?

至于oracle这种大型软件,里面的东西就更多了,有些研究数据库的同学,可能用的是实验室自己开发的xmlordatastreamprocessing的prototype系统,根本不碰oracle。

3)例子三

你研究的是软件工程,而且是很新颖的用dataminingtechnique或者formalmethods来解决某个问题,还发表了一篇牛论文。

公司的人乍一听专家来了,很兴奋,仔细一问,就说一句话,方法很好,但是实际上行不同,在工业界没办法应用。

因为你的方法/理论做了一些的假设(assumption),而这些假设在现实中很难实现。

然后公司的人说,你解决问题的能力很强,很聪明,但是我们这里做开发的主要用C++,作为新人,你的编程工作会比较多,我来考你算法设计、设计模式和C++编程的知识吧。

again,如果你在学校里做科研项目用java(或者是更没人用的语言比如Scheme),一堆C++的问题考死你很容易。

不可否认,并不是所有的理论研究将来都用不上。

我也听说有的人研究networkperformance,有的人研究存储技术,在公司里找到了可以大体上还可以学以致用的位置,因为公司有少数职位的确需要雇佣domainexpert。

但是通常情况下,工业界需要大量能解决实际问题的人,需要skilledworkers,而不是理论专家。

所以在面试的时候,很多人不是死在不懂research没有domainknowledge上(公司里大多数职位要求的domainknowledge翻翻书甚至有时侯看看wikipedia可能就足够了),而是死在C++/Java或者是数据结构、设计模式这种很基本但是很实际的东西上。

读研究生,学校希望能教给你领域知识和设计新方法解决问题的能力,瞄准highlevel的教育,提高你的理论水平;

但是公司希望你能有解决具体问题的skills,懂得lowlevel,downtotheearth的具体技术细节,这些东西,最多是你研究生学习时获得的副产品而不是学习目的。

这是根本原因。

学校的做法没有错,学校就应该教给你理论知识,这样不管外面流行什么技术,你都可以很快理解学会,但是工业界急功近利,希望你来了就能熟练使用各种工具干活。

深刻理解这种mismatch,在二者之间找个平衡,是你的责任。

追究讲谁对谁错没什么意义,这个问题也不是美国学校特有的。

学校里当然要教给研究生理论知识,提倡学术研究,否则改成开java认证学习班算了。

美国有些学校注重工程应用,上课期间布置比较多的projects,学生需要动手解决问题,进行大量的编程工作,很培养能力;

有的学校,设置一些很实用的基础课程给硕士生选。

这些对于着眼于工业界就业的同学来说,比较有利;

如果一门课,老师布置你读无数新发表的paper,那你从这些paper里获得的知识,将来去公司工作,很可能用不上。

可能有人说我的观点只注重眼前,不考虑长远发展,但是问题是不管是在中国还是在美国,我们的第一目标是先找到第一份工作再说,没工作,啥都免谈。

找到工作以后,公司需要什么,我们就学习什么;

有了工作,有了工资,啥有用啥流行咱学啥,而且很可能是公司出钱让你学,因为员工的培训(training)本来就是公司支持的。

前面两篇文章都是给这篇做铺垫。

中篇里说了学术研究和工业界需求的差别,这篇的核心话题是:

你应该怎么选课、怎么学习来适应工业界要求?

你应该学习什么,如何培养自己的能力?

《一》通俗点的版本

在学校里应该学什么?

这个问题并不高深,多年以前,我的一个硕士在读的小老师其实就给出过答案:

1)一门编程语言

2)一个操作系统

3)一个数据库.

就这么简单,语言可能最好选择pupolar点的也就是java和c++。

其他还有很多比如C,perl,python,Ruby等等也都可以,但是就业范围窄。

当然狭窄不代表就不好,比如说ruby,不少公司开始用这个语言做webapplication,但是知道rake啥意思的人不多。

操作系统当然是说linux/unix不是你的windows傻瓜机;

数据库无所谓了。

熟悉一门语言是必须的,即使你将来选择做QA,咱也得做automatedtesting才显的有优势,对不?

其他的两项其实都不是必须的。

warald我当年耗费老公司美金过万,深入培训了2种unix系统,转到现在的公司,根本不用,早忘光了;

几个主要的数据库软件,咱也是样样精通,样样稀松。

美国cs的研究生课程,大多分两类,入门和高级,比如说数据库和高级数据库,操作系统和高级操作系统,网络和高级网络。

区别是入门级的只讲授基础知识,上课的人多,本科学的比较扎实的同学会觉得不难;

高级的功课更难更深入,上课的人少,往往也需要读更多的paper,有更多的课堂讨论和presentation。

如果你是硕士生,想拿老师的奖学金或者推荐信去更好的学校读博,很明显,上完了入门一定要去上高级课程,而且要表现优异;

如果你的目标是去公司工作,这些高级课程可能就没太大意义了。

如果你是博士生,至少有5年的时间,你随便,爱学啥学啥~~

cs的同学,将来要做developer/softwareengineer的是主流,有的同学可能要问,哪门功课最管用?

答案是你本科就学习过的,datastructure。

来美国以后,找本英文的教材仔细反复揣摩,动手练习;

做TA的新生,很多人也是带这门课。

再加上软件工程尤其是里面的designpattern,和入门的数据库/SQL知识。

三门功课学熟了,就可以出去面试找工作了。

想做QA的同学,软件工程不用说了,很多系也有专门的softwaretesting课程,此外,再选个操作系统,因为很多测试工作是跨平台的,所以最好学一下unix/linux的基础知识。

想做database/networkadministration的比较吃亏,很多学校不开设专门的数据库管理和网络管理课程(注意,我说的是专门的数据库“管理”,而不是general的数据库功课~~)。

《二》高尚点的版本

如果你觉得《一》里面说的太民工太技工了,那这个section里,我规规矩矩的写得“高尚”点:

1)选好一个specialty/focus

比如说,如果你打算将来做QA(测试),那么你所有的学习活动都要以qa为中心。

所有测试相关的课程你都要好好学,project认真做;

问问哪个老师或者高年级博士生有没有软件需要你voluteer测试一下,反正你找不出错误没什么责任,找出来了对他们有帮助;

系里如果有研究testing/QA方向的人做researchtalk,跑去听一下,提高一下自己的理论知识---注意,我鄙视的不是“学理论做科研”,而是“单纯的学理论”或者“过于专注科研”,理论知识丰富了,你说话也上档次,找工作的时候忽悠人更容易。

如果理论和实际结合,样样都行,那当然比瘸一条腿好多了。

如果你对成为网络管理员很感兴趣,networks和advancednetworks两门课不用说了,把Operatingsystems(OS)和advancedOS也学了。

有时候,系里或者学校某个院系/实验室有网络或者是一堆电脑想找个学生维护,那更是黄金机会了,不管有没有工资,不管工资多少,把这样的活揽到手,毕业的时候,您老人家简历里可以很proud的号称有若干年网络管理经验,啥杀毒、系统备份、软件升级、网络恢复样样精通。

如果你的目标是做Java的软件开发,很明显,选课之前,提前打听一下用什么语言做projects。

光靠翻书是学不好Java和软件设计的,美国老师课程上布置的projects就是练手的好机会;

有些老师要求高,课上的大作业工作量可能比国内很多学校的本科毕业设计还要大,非常锻炼人。

如何选择你的focus,看你的兴趣,也要看特长,比如有的人是biomedical/lifescience类专业转成cs的,那么也许侧重bioinformatics,顺便跨系选两门统计类课程,将来瞄准生物技术公司和制药公司的信息系统部门或者是statisticalprogrammer/biostatistian这样的职位,会充分利用你的独特背景。

更高级点的做法是考虑一下目标就业地区(比如学校周围)或者公司的需求。

比如说目标地区有几家生物信息公司,他们可能用perl;

如果有一个一直来你们系招人的网络公司,产品主要用C/C++开发,或者你周围的几个办理H1b签证的公司用的都是java,or你师兄可以帮你投简历的公司要用python写很多scripts,那你应该侧重什么,就不用我废话了。

我blog里面也有文章很明确的说了,读master最好做thesis,因为thesis给了你机会,让你深入了解一个小领域也就是建立你的specialty,并且提高分析和解决问题的能力。

有些学校的master学位,本身也是分specialty/track的,有围绕着每个track的一系列功课,课程设置也很有指导意义。

2)拓宽你的知识面

无论你是读硕士,还是博士,都不是只上前面通俗版里说的几门课程就可以毕业的,你还需要选修很多其他的功课才能毕业,每一门课都是一次机会。

如果你对图形图像处理非常感兴趣,希望将来作这方面的开发,那么,你不但要上所有的软件类课程,还要上graphics,advacedgraphics,imageprocessing,vision,visulization,只要系里提供这些的课程,全都上了,毕业的时候,你都做了无数的此类projects了。

拓宽你的知识面,也包括构建你的整个知识体系。

比如说做QA,乍一看,只需要懂软件测试技术就可以了,最多你把所有的软件类课程都上了,但是如果你将来去网络公司测试他们的软件,或者去图像图像公司,或者未来的公司产品在多个操作系统上运行,需要你深入的了解OS才能测试,那你最好也得懂点相关领域的知识。

还有,选择一个focus并不是要求你排除其他的可能性,你也应该选择多个方向的课程,万一没有在自己的focus上找到工作,也可以有其他选择。

比如你的目标是进入学校周围的一个大网络公司作developer,你上了2门软件工程的课,4门网络/操作系统的课,2门系里规定的其他必修课程,还有其他3门课程才可以硕士毕业了,那你完全可以选一门软件测试,一门数据库,和一门bioinformatics。

这样,万一做不了网络公司的developer,你还可以去做测试,或者是去一个biotechorpharmaceutial公司做informationsystems帮他们处理biomedical的数据。

我不可能给出一个具有普适性的必须或者推荐选修课程名单,每个人都有自己的特殊情况,没有那个名单可以适用

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2