浙大到耶鲁计算机博士给你解析计算机专业:从基础到前沿,从就业到升学
浙大到耶鲁计算机博士给你解析计算机专业:从基础到前沿,从就业到升学
各位同学,大家好!我是本科毕业于浙江大学计算机科学与技术专业,现在在耶鲁大学攻读计算机科学方向的博士学位。我的研究方向是计算机图形学(computer graphics),更具体点就是材质和渲染相关。
一、计算机科学专业简述
(一)什么是计算机科学(CS)
计算机科学是一门理论与工程紧密结合的学科,研究一系列与计算相关的问题。它涵盖了计算机理论(computer theory)、计算机系统(computer system)、人工智能(AI)以及各种交叉学科,比如我研究的计算机图形学,还有计算生物学等。其实严格意义上,人工智能也是交叉学科,因为它包含大量数学和统计学内容。
计算机科学非常注重理论,很多研究领域强调算法设计,这就涉及到理论数学、应用数学和统计学等,像统计学在人工智能领域应用广泛。同时,计算机科学也重视实践,编写程序实现算法和系统是研究或工作中必不可少的环节,也就是说编程写代码是这个专业很关键的部分。
(二)计算机科学的基础
1. 数学素养:学好计算机专业需要有较好的数学素养,要掌握微积分、线性代数、离散数学等基础知识。这里不要求像数学专业那样掌握高难度数学知识,但这些基本内容是很必要的。
2. 编程功底:要有扎实的编程功底,熟练运用至少一门高级语言,像 C、C++、Java、Python 等都可以。从语言学习角度看,掌握了一门高级语言后,再学其他语言会相对容易。而且,理解面向对象编程技巧很重要。虽然还有面向函数等其他编程模式,但目前面向对象还是比较关键的。有些同学从 Java 或 Python 开始学,可能会忽略对面向对象部分的深入理解,因为在 C++学习中老师会详细讲解类等概念,而在 Java 和 Python 教学中可能不会深入展开。
3. 计算机基本知识:同学们还要了解计算机基本知识,比如数据结构、计算机组成、操作系统等。对于计算机本科同学来说,这些基本都是必修课,而且国内考研也会涉及,它们是计算机专业知识体系的重要组成部分。
4. 写代码能力:如果以后想从事计算机相关工作,能高效用代码实现算法是关键,所以锻炼写代码能力非常重要。
5. 创造力(针对研究方向):如果从事计算机相关研究,除了能实现别人的算法,还需要创造力。这种创造力从哪里来呢?需要有较好的数学能力,能读懂别人的文章,分析其中问题并提出自己观点。当然,创造力是可以通过后天经验积累慢慢锻炼出来的。
二、计算机科学的就业方向
计算机专业的就业面相当广泛,是目前就业机会zui多的行业之一。大部分计算机专业毕业生会选择在本行业就业,因为有大量高科技公司提供了丰富的岗位。
(一)计算机行业内
1. 软件开发:主要是开发各种软件,这是大家比较熟悉的领域。
2. 硬件开发:从计算机专业角度来看,硬件开发偏重于算法,比如研究硬件的调度算法等,不太涉及电路开发。像英特尔、英伟达这样的硬件公司,通常会招聘有计算机背景的学生。
3. 系统开发:这是当前比较热门的领域,很多大公司有分布式系统、数据库系统等相关开发需求。
4. 互联网企业相关岗位:互联网行业岗位可以看作是软件开发的一部分,但由于其就业机会多,所以单独拿出来说。像 Google、Facebook 等公司,主营广告、web 端业务等,有前端开发等多种岗位。
实际上,这几个部分是相互关联的,还有一些独特岗位,比如数据分析、AI 开发工程师等。
(二)计算机行业外
计算机背景同学的从业范围不止局限于计算机行业。计算机科学是关于计算的学科,任何与计算相关的行业都可以涉足。
1. 传统制造业:有计算设计(computational design)概念,通过计算机辅助设计和制造,可以设计出更可靠的系统,节省时间。
2. 生物学:计算生物学不是新领域,计算机背景在生物研究中有很大优势,可以助力生物性研究。
3. 医学:随着人工智能兴起,很多计算机背景的人参与医学研究,比如计算机辅助诊断(人工智能诊断),甚至可以应用到手术机器人中。
4. 金融:金融行业喜欢计算机背景的学生,因为金融业务中的数据分析、模型建立等都需要编程能力和数学知识。
5. 教育:计算机背景可用于开发教育系统软件,或者利用人机交互(HCI)等技术为教育系统设计新的人机交互接口,发展潜力很大。
三、计算机科学前沿方向
计算机科学可以大致分为四个大方向:计算机理论、计算机系统、人工智能、交叉学科。每个大方向又可以细分。
(一)计算机理论
包括计算理论(比较核心、理论性和数学性很强)、计算机安全和密码学。密码学和安全主要研究网络与系统安全、加密算法等,相关课程有网络安全、密码学、操作系统安全等。这个方向适合创新能力强、喜欢黑客技术、数学能力扎实、对系统理解深入的同学,尤其是有数学系背景的同学,因为密码学本质上和抽象代数相关,比一般的应用数学和统计学更难。
(二)计算机系统
1. 操作系统和网络部分:这是计算机领域发展成熟且工业化程度高的方向。相关课程有计算机组成原理、操作系统、计算机网络,分布式系统一般是选修课,但目前分布式系统研究很热门。研究方向包括资源受限系统、虚拟化(如操作系统中的虚拟机概念)、高性能计算(利用 GPCPU 或 GPU 集群)、物联网(属于计算机网络一部分,目前是热门研究领域)、高速网络(如 5G 网络相关)等。这个方向适合编程能力强且对系统知识框架有良好理解的同学。例如,美国大学的操作系统课程可能会让学生手动搭建迷你操作系统,这对代码能力是很好的锻炼。
2. 程序语言和软件工程部分:主要课程有面向对象软件开发、软件工程、编译理论和形式语言。研究方向包括程序语言设计、程序分析与验证、软件建模与设计、普适软件系统等。软件工程适合编程实践能力强的同学,而程序语言相关方向需要有扎实理论基础,因为涉及数理逻辑知识。
(三)人工智能
1. 机器学习和数据挖掘部分:机器学习是交叉学科,和数学尤其是统计学密切相关。主要课程有概率论、数据统计、算法复杂性、人工智能导论等。研究方向有理论机器学习(研究数学方法、模型设计、算法优化和收敛等)、深度学习(研究网络结构、设计新模块等)、增强学习(如阿尔法狗就是增强学习的典型案例)。适合有扎实数理统计功底、对人工智能和机器学习算法有兴趣的同学。
2. 计算机视觉和自然语言处理部分:主要课程有概率论、计算机视觉导论、自然语言处理导论。研究方向包括计算机视觉的物体识别与分割、图像处理(如黑白图像自动着色、图像风格转换、P 图等都属于图像处理),自然语言处理的机器翻译、问答系统(包括句子与句子、句子与图片之间的问答系统)等。适合有扎实数据统计功底、对人工智能和机器学习算法及应用有兴趣的同学。
(四)交叉学科
1. 计算机图形学可视化和人机交互部分:可视化可归为计算机图形学子方向。主要课程有计算机图形学、数据信息可视化、人机交互等。计算机图形学研究渲染(电影、游戏渲染等)、虚拟现实、增强现实、三维重建、3D 打印等,可视化研究信息展示,人机交互研究交互设计,通过用户调查满足用户需求,和工业界联系紧密。适合对图形图像交互相关算法和应用设计感兴趣、有较好数学基础的同学,因为渲染等领域和物理相关,需要数学知识。
2. 生物信息学和计算生物学部分:是计算机和生物的交叉学科。主要课程有生物信息学、应用生物信息学、计算生物学导论、数据结构与算法。研究方向包括基因和基因组研究、结构生物学、医学成像与重建(如 CT、核磁共振图像成像或重建)、计算机辅助诊断等。适合有双背景或对计算机和生物学都有浓厚兴趣的同学。跨学科研究要注重特定领域知识,不能只依赖原专业知识。
3. 机器人学部分:这是一个涉及多学科的交叉领域,和电子工程、控制、机械工程等都有关。主要课程有机器人设计、机器人控制、人工智能与机器学习。研究方向包括机器人路径规划与定位、嵌入式系统、人与机器人交互。适合对机器人设计及应用有兴趣、掌握一定数学和控制相关知识的同学,很多大学有机器人竞赛,可帮助初步了解这个领域。
四、计算机科学的应用案例
(一)Slam(同步定位与建图)
Slam 广泛应用于机器人领域。当机器人在真实世界漫游时,需要知道自己的位置并感知周围环境进行建模。这个技术不仅涉及机器人技术,还用到了计算机视觉和计算机图形学技术,是一个系统级的大工程。它在无人车解决方案中很关键,无人车要对周围环境感知、定位和建模,比如判断旁边车辆距离并决定行动。在军事、航天领域也有重要应用,比如探月工程中,无人车在月球上需要同步定位建图,获取宝贵的研究数据。
(二)医疗图像成像
这是计算生物学的重要应用,比如利用深度学习方法(如 admm net)重建核磁共振图像(MRI 图像)。传统的蒙特卡罗方法效率较低,而神经网络的应用是对传统方法的革新,大大提高了算法效率,体现了人工智能和生物学医学结合的前沿成果。
(三)自动化编程
自动化编程是个很有趣的概念。传统方法用形式化语言或概率语言模型推理,现在常用 by example 方法,即数据驱动、机器学习方法。比如给机器输入和输出,它能自动编写程序。以字符串处理为例,对初学者来说处理字符串可能很困难,但自动化编程可以根据输入输出编写相应小程序。这种技术在工业界有应用,比如一些论文利用递归神经网络(RNN)对程序语言建模实现自动化编程。这些例子都显示出机器学习在计算机专业领域的活力,神经网络作为一种通用工具在多个领域都有应用。
五、计算机专业升学经验分享
(一)明确兴趣方向
大家要主动尝试不同学科方向,可以通过上感兴趣的课程来明确自己的兴趣所在。计算机专业有很多有意思的子方向,升研究生或博士时一般只能选择一两个方向,所以本科阶段要抓住机会多尝试,了解不同方向后确定自己的兴趣点。
(二)提升编程能力
编程能力是计算机专业的首要任务。很多人一想到计算机就想到编程,可见其重要性。要多参加实践性活动,比如做 project、参与公司或实验室的实习或研究。这不仅能磨练自己,对未来找工作或科研有帮助,还能丰富简历,为申请做准备。
(三)重视 GPA 和语言成绩
GPA 是衡量学术水平的重要标杆,尤其对于没有强科研或论文的同学,学业成绩很关键。如果是大一、大二同学,一定要保持好成绩。同时,要尽早通过语言成绩考试,因为大四申请季很忙,要准备推荐信、科研、论文等,可能无暇顾及语言考试。
(四)规划科研和实习
同学们zui迟在大三就要开始规划科研和实习,积累简历素材。现在申请者众多且都很优秀,三维(GPA、托福、GRE)差距不大,要脱颖而出就看软件实力,即科研实习经历。可以争取进入好的实验室或大公司实习,比如腾讯、百度、微软、英特尔等,这样能极大提升申请竞争力。
希望今天的内容能帮助大家对计算机专业有一个系统全面的了解,也祝同学们学习和升学顺利!谢谢大家!