怎样正确地选择大学专业？
首先声明一下，任何一行都会有各种各样的具体情况，作为一个个体很难绝对完善的覆盖各个方面，笔者亦不能免俗。这篇文章的某些观点仅代表个人意见，具体情况还希望多加调查以确保不要陷入个人偏见。 信息技术是当今信息社会非常基础的存在和生产力，也正因此，在很长的一段时间里计算机学科都显得很吃香，也成为了诸多学生选择专业的首选。 但和很多其他专业一样，计算机这个学科有着自己的特点、适应人群和并不简单轻松的职业发展路径。因此，本文将试图从专业学习、未来出路和生涯规划三个方面来介绍一下计算机专业的全貌。 本文作者：LR，清华大学交叉信息研究院本科毕业，博士在读 (P.S. 计算机 CS 之外的三个专业介绍在这里 电子信息：电子信息类的就业前景真的不如计算机类吗？ 自动化：自动化是不是很坑的专业？ 软件工程：「软件工程」专业是一门怎样的专业？） 计算机是一门非常年轻的学科，其历史至今还不足百年。但是作为第三次工业革命的主要技术，计算机依然是这个时代最核心的学科之一。 简单来说，最狭义的计算机学科，研究的是如何通过现代的各种电子元器件（如最早的电子管、晶体管、集成电路）的组合，使得它可以按照人类预先设定的流程工作，从而完成各种计算问题。这是抽象到最抽象的计算机学科，也是其原本最根本的出发点和整个学科的基础核心。 事实上，计算机这个学科是一个非常特殊的存在，因为它是如此的包罗万象，以至于从各个不同的侧面和不同的层级看去，计算机科学可以呈现出各类学科的特点。例如，在最底层的实现部分，计算机学科是一门妥妥的工程学科，如何搭建电路以完成基本逻辑运算、如何提高效率、如何大规模集成，这些和设计精密的机械仪器和汽车发动机别无二致；然而到了抽象层面，算法、数据结构这些组织数据和解决问题的方法论，却是满满的理论研究的味道，到处充满了组合数学；在中间的各种应用层级，计算机学科又像是材料、建筑或是生物，在有限的抽象层级和有限的工具范围内进行组合，在某一特定应用领域中发现一些算不上是基础突破、但又不完全纯粹是技巧的技术和知识（例如优化计算机网络结构等）。 现如今，因为信息系统已经深度融合进入了各个学科行业，所以计算机学科也变得格外重要，其下属的具体方面也愈加丰富多元。有硬件层面的不断精益求精、试图突破摩尔定律的极限，有软件应用层面的工程代码的设计、网络系统设计，有交叉学科的人机交互、图形学，有试图破解人类智慧的人工智能，有在理论上探究更加算法与计算本质的理论计算机科学和量子计算等等。 计算机学科的培养方案比较庞杂，不同学校也有各自的特点，不能一概而论，但大体上以下部分是几乎所有的培养方案都会包含的：    其中数理基础课和核心专业课程都属于必修内容，而后续的选修课程则与各类细分的专业方向相关。  计算机有很多细分方向，不同方向之间也并非泾渭分明，大致归类如下 计算机学科与其他学科的交叉非常之多。例如与经济学交叉的算法经济学和算法博弈论，研究各种定价和拍卖的问题；与社会科学结合的数据（AI）伦理；与数学结合的计算数学和理论计算机；与生物结合的计算生物学和生物统计，用计算机的力量帮助破解基因密码，又比如 alphafold 可以用于破译蛋白质结构…… 可以说，只要一门科学里涉及到数学、并可以将某些核心问题转化成数学问题，计算机学科就可以用计算发挥其威力。 前面两个部分对计算机专业的知识结构与关注的主要方向做了基础的介绍，但很多同学关注的除了「计算机专业学什么」之外，更多是「怎么学」以及「难不难学」两个问题，这里会针对这两个问题，简单给出一个回答。 在展开介绍之前，有必要先明确一个十分根本的认识问题：计算机学科到底在干啥？很多人怀揣着对于信息时代黑科技的向往或是对高薪资的追求，就非常热切的选择了计算机专业，这种本质上基于浪漫的想象和功利的眼红的动机，在本科的学习中很容易出现落差或者不适应，即使是在笔者所在的清华大学，计算机类专业学习过程中出现不适应、跟不上的学生也比比皆是。 计算机学科最原始的初衷是用机械代替人力计算，后来机械装置变成电路，即使用复杂的电路完成预先规划的计算行为。因此，从本质上说，计算机学科是一个研究「如何设计并使用电子器件收集、存储、处理信息进行计算以达成某种目的」的学科，而如何控制此种计算或处理流程的预设逻辑，即为大家所熟知的「程序」或「代码」。 以此脉络展开，就不难理解世界上各个大学惊人一致的计算机专业的培养方案了：除去是一个理工科学生都必须要学的微积分、线性代数、概率论之外，一个计算机专业的学生首先需要理解基本的电路的工作原理、以及如何使用电路进行逻辑运算，所以就会有一系列的硬件课，包括电路原理、数字电路、计算机组成结构； 其次，计算机专业的学生一定要十分熟悉并且喜欢一种「安排」感，