class="hljs">数学课程:高等数学微积分、线性代数高等代数、概率论、复变函数、离散数学、数值分析代码课程:程序设计基础、面向对象程序设计、算法设计物理课程:大学物理
核心专业课:课程分布在大二、大三两年,据我所知,无论是哪个大学,计算机核心专业课都是十分之多的,因为计算机本身包含的内容确实太丰富了。不然怎么都调侃计算机系是熬夜脱发院系呢(摊手)
代码进阶:汇编,Java,图像化编程,软件工程,数据结构硬件课程:电路原理,模拟电路,数字电路计算机系统:编译原理,计算机组成原理,操作系统计算机应用:网络原理,人工智能原理,信号原理,计算机图形学,数据库
可选方向的专业选修课:这些选修课的内容为计算机应用的最前沿,覆盖计算机各类子学科,一般会要求学生选修若干学分。很多课程会有一线的科研内容,以下是一些例子
密码学,网络安全,数据挖掘,人工智能,神经网络,图像处理,软件开发,嵌入式系统,模式识别,高性能计算,多媒体,数字系统,博弈论,复杂度分析……
其中数理基础课和核心专业课程都属于必修内容,而后续的选修课程则与各类细分的专业方向相关。
细分方向
计算机有很多细分方向,不同方向之间也并非泾渭分明,大致归类如下
人工智能:可能是最近最火的方向了,致力于用计算机系统和算法来重现、模拟甚至超越人类的智能,从而解决各种实际问题。其具体领域包括机器学习、模式识别、计算机视觉、自然语言处理、强化学习等等。
高性能计算:致力于充分发挥计算机强大的计算能力、追求其极限,最广为人知的例子就是超级计算机了,如何设计并使得超大的计算集群得以运转并解决规模庞大的任务、尽力将每一个计算过程的效率发挥到极致、降低能耗、设计全新的计算架构(包括硬件和系统组织层面)是这个学科的核心问题。
计算机系统:在执行最基本运算的硬件和实现各种纷繁复杂应用的软件之间,计算机系统是一个至关重要的平台和桥梁,你很难想象像先人那样用命令行操作你的电脑,用0和1编程。好的系统需要快速、安全、稳定,这其中涉及到大量的底层问题,而这也正是计算机系统的研究内容。
网络技术:我们现在已经很习惯于网络了,但是互联网的到来是一件非凡的事情,其遗留的问题和未来的发展一直在继续。网络结构如何优化?远隔重洋的计算机如何安全的完成互相的身份确认和信息传输?黑客是怎么一回事、又该如何防范?这些都属于网络技术的范畴。
多媒体:多媒体技术包括图像和视频的处理,人机交互过程中可能出现的问题等等。因为其跟新闻传媒、社会科学以及人体工程有很多交集,所以是计算机学科中「人文味」相对比较浓的一个领域。
理论计算机:一切现在存在的计算机本质上都是图灵机,或者更确切的说,是基于冯诺依曼架构体系设计而成的计算机。这一理论本质带来一系列有趣的问题,例如计算能力的边界在哪里?面对一类问题,如何设计更好的算法,或者证明不存在更好的算法?对于一些本质十分困难的算法问题,如何设计好的近似或者随机算法?量子计算机真的在理论上可以完成传统计算机几乎不能完成的任务吗?为什么我们认为我们现在使用的密码系统是安全的?这些都属于理论计算机的范畴。
图形学、编译器、软件工程等………
交叉学科
计算机学科与其他学科的交叉非常之多。例如与经济学交叉的算法经济学和算法博弈论,研究各种定价和拍卖的问题;与社会科学结合的数据(AI)伦理;与数学结合的计算数学和理论计算机;与生物结合的计算生物学和生物统计,用计算机的力量帮助破解基因密码,又比如alphafold可以用于破译蛋白质结构……
可以说,只要一门科学里涉及到数学、并可以将某些核心问题转化成数学问题,计算机学科就可以用计算发挥其威力。
计算机专业怎么学?
前面两个部分对计算机专业的知识结构与关注的主要方向做了基础的介绍,但很多同学关注的除了「计算机专业学什么」之外,更多是「怎么学」以及「难不难学」两个问题,这里会针对这两个问题,简单给出一个回答。
在展开介绍之前,有必要先明确一个十分根本的认识问题:计算机学科到底在干啥?很多人怀揣着对于信息时代黑科技的向往或是对高薪资的追求,就非常热切的选择了计算机专业,这种本质上基于浪漫的想象和功利的眼红的动机,在本科的学习中很容易出现落差或者不适应,即使是在笔者所在的清华大学,计算机类专业学习过程中