计算机

 

什么是Computer Science

 

尽管大家习惯性地把计算机学科称为CS,但是从人才培养目标的角度而言,我们通常认为,计算机学科可以分成计算机工程(computer engineering)和计算机科学(computer science)两部分。

 

计算机工程方向的教学内容,通常倾向于培养学生工程项目方面的动手能力,偏重于程序设计语言的学习、软件工程的实践等等。其培养目的在于尽量拓宽学生在工具应用层面的眼界,让学生能够熟练掌握多种业界主流的开发工具和开发模型。

 

 

计算机科学方向的教学内容比较偏向理论,其培养目的,是教会学生基于数学和哲学,利用计算机作为工具,对一些问题进行建模求解。所以这也要求学生具备扎实的线性代数、离散数学、形式逻辑、统计学等扎实的数学基础。这些问题有可能是生活中可以见到的应用型问题,比如研究如何准确地使用计算机算法对人脸进行识别,或使用计算机算法与人类棋手对弈,对这类问题的研究称为应用型基础研究;被研究的问题也有可能是纯理论问题,比如研究基如何通过蒙特卡洛方法对深度学习网络进行剪枝优化等等,这类研究的方向比较抽象,通常被称为理论型基础研究。我们一般认为,理论型研究是应用型研究的基础和工具。

 

计算机工程通常是计算机系本科生和部分硕士研究生的培养方向学习范畴。而部分硕士研究生(尤其是M.Phil)和绝大多数博士研究生(Ph.D)都在从事计算机科学方面的研究。

 

本科培养体系

 

在本科阶段,培养计划的目的在于引领学生对计算机领域进行广泛但并不深入的了解,课程大致可以分为几类:

 

计算机是什么:计算机科学导论,操作系统,编译原理,计算机体系结构,数据库基础,网络导论,数字电子电路,等。

 

开发工具和开发模型:面向过程程序设计(C语言),面向对象程序设计(C++JavaPython),汇编语言,软件工程导论,网络工程导论等。

 

攻读更高层次学位时可能用到的数学基础:线性代数,概率与统计,离散数学,随机过程,积分变换,等。

 

除此之外,本科培养体系里的专业选修课程会接触到一些细分领域的入门课程,如机器学习,人工智能,网络安全,管理信息系统等。

 

研究生培养体系

 

通常在硕士阶段,学生开始接触到比较实际的计算机科学专业方向,这通常取决于导师自己的方向。但由于硕士培养周期较短,对专业方向的涉及也常常比较浅显,硕士毕业生通常的状态是“具备比较扎实的计算机工程基础,已经开始接触计算机科学问题。

 

到了博士阶段,学生的主要任务就是挑选一个计算机科学的细分方向进行深入研究,直至斩获该细分方向的突破性进展才能够毕业。计算机科学的研究方向互相交叉,很难给出一个科学的分类图谱。

 

选校建议

 

很多申请者在申请选校的时候,都依赖于US NEWS的排名,或者QS的排名。但是这些排名,一般都由学术声誉、论文数量、论文引用、会议论文和书籍出版、国际化程度等指标来衡量,对CS专业其实不很适用。

 

CS的研究,很多时候都是在抢热点,看谁做得更快,因此很多重要的科研成果都是发表在会议论文上,而US NEWS对于会议论文的权重只有可怜的2.5%,而学术声誉等指标又过于主观,因此这些排名参考意义不大也就情有可原了。

 

选校不仅仅是看排名,还有地理位置,项目特色, 学校声誉,业界合作,师生比,留学成本等等。 如果想在学术圈发展,导师的业界地位最重要。如果能拜在图灵奖得主门下,学校声誉、专业排名,都可以忽略。这里说的业界地位,最起码也要是IEEE Fellow级别的。因为这样的导师,推荐信才有分量。 如果想毕业之后去公司,那么学校名气>导师地位>专业排名。毕竟HR不是学术圈里的人,一个妇孺皆知的校名比什么都好使。此外,导师的业界地位和人脉也很重要。

 

现在很多申请者去美国读计算机的硕士,目标都很明确,就是去AmazonFacebookMicrosoft这样的大公司,或者硅谷的明星start-up。因此有些人对地理位置看得很重,认为加州的项目就一定比其他地方好,其实不尽然。因为CS硕士毕业生,通常的就业岗位是Software Development Engineer或者Data Scientist,说实话只要学校能让你过了简历筛选,基本上学校的title就没那么重要了。剩下的比拼就是科研和项目经历,编程基本功与技能,应付笔试(刷题)和面试的能力了。至于地理位置,很多大公司都有资金实力在全美范围里招聘的,即使你在UIUC大农村,或者Wisconsin,一样会有HR主动上门来做hiring event。因此对于地理位置一般的学校,也不应该排斥。地理位置的优势可能会让你对于业界的信息资讯更为通畅,感受到的创业氛围更加浓厚,除此之外,顶多是找实习的时候,让你少搬家几次罢了。

 

因此申请学校就是能多申尽量多申。因为就和投资一样,申请某个学校的不确定性是很大的,现在的 CS 项目申请者数量极大,很难保证每个人的材料都被认认真真看过。而如果我们不把鸡蛋放在一个篮子里,用各种投资组合进行风险对冲,就能很大程度的缩小方差、减少风险,从而获得和自己实力匹配的 offer。 对于 PhD 学生来说,我觉得你的导师水平和你学校在你科研小方向的实力非常重要,比 CS 专排重要的多,因为你真正的专业其实是你研究的小方向,而不是 CS。看小方向的实力应该去看你的领域顶会 paper 的数量和质量,毕竟 PhD 以 发 paper 为生。

 

而看导师,除了看中 H-index,也要看他的人品以及在学术圈和业界的人脉和口碑,这和你今后的发展高度相关。另外,学校的综合排名(名气)也是非常重要的,今后假如要创业或者回国当青千,别人通常只大致知道综合排名 (除了 CMU 这种 CS 特别有名的),这也是为什么哈佛的 CS 会比 GaTech UTAustin 要难申。而对于 Master 来说这些排名都不大重要了,重要的是你申请的项目的质量和就业情况。例如,综排很高的学校会有那种一年的MEng,这种项目时间太短就很难找到好的工作。还有, CMU 虽然是 CS 第一强校,但因为整个学校有非常多的计算机相关学院,找工作时内耗很大,找工作时有优势的也就是和 CS 高度相关的 Master 项目(机器学习,语言技术研究,计算数据科学,计算机科学等),其他有的还不如一些 Top20 学校 的 MSCS

 

申请规划

 

数学背景+编程能力

 

正处在风口上的计算机科学,留学申请的难度越来越大。不仅有数学统计物理的同学想转行做CS,就连传统的社科类专业,比如经济学、政治学、 新闻学、社会学的人都有申请CS项目的。 一般来说CSmaster比较强调申请者的编程能力和项目经历(甚至GitHubstar的多少)。

 

同时,数学背景,比如数学分析,线性代数,数理统计等课程的成绩也是很看重的一方面,相比之下GPAGRE托福等Standard Score重要得多。 再者,美国CS华人faculty比例相当大,一般来说国内的老师也跟北美CS的学术圈有紧密的联系,能拿到靠谱的推荐信为申请结果提升不少。除了推荐信,项目经历和研究经历,如果能在文书材料中适当地展示出申请者的学术潜力,突出科研经历与项目经历,对申请结果会有出其不意的效果。对于跨专业的申请者,在Coursera等公开课平台上修读一些编程和计算机理论的基础课,也能弥补一些跨专业申请的障碍。