课程选择建议
选课是个技术活。选对了课,学起来轻松,还能为以后打基础;选错了课,浪费时间不说,还可能影响 GPA。这篇文章帮你理清思路,把课选好。
必修课:必须学好
必修课没得选,但可以想办法学好。这些课是计算机专业的根基,学不好后面会越来越吃力。
数学类
高等数学/微积分
这是大学数学的基础,后面学机器学习、图形学、信号处理都得用。
- 重点:极限、导数、积分、级数
- 难点:多元函数、重积分
- 建议:课后题多做几遍,理解概念比背公式重要
线性代数
机器学习和图形学的数学基础,矩阵运算、特征值分解这些概念会反复出现。
- 重点:矩阵运算、线性方程组、特征值与特征向量
- 难点:抽象概念多,不容易理解
- 建议:配合 3Blue1Brown 的视频一起学,直观理解
概率论与数理统计
数据分析、机器学习的数学基础。
- 重点:概率分布、期望方差、假设检验、回归分析
- 难点:条件概率、贝叶斯公式
- 建议:多做题,理解概念的实际含义
离散数学
计算机的数学基础,集合论、图论、逻辑这些概念在算法和数据结构中经常用到。
- 重点:集合、关系、图论、逻辑
- 难点:证明题
- 建议:理解证明思路,不要死记硬背
专业基础课
数据结构与算法
计算机专业最核心的课,没有之一。不管是找工作还是考研,这门课都是重中之重。
- 重点:链表、栈、队列、树、图、排序、查找
- 难点:递归、动态规划、图算法
- 建议:光看懂不够,得手写代码实现。LeetCode 从简单题开始刷
计算机组成原理
了解计算机是怎么工作的,从晶体管到 CPU。
- 重点:数据表示、指令系统、存储系统、总线
- 难点:流水线、Cache、虚拟内存
- 建议:配合实验一起学,理解得更透彻
操作系统
管理计算机资源的核心软件,进程、线程、内存管理这些概念是面试必问的。
- 重点:进程管理、内存管理、文件系统、I/O
- 难点:进程同步、死锁、虚拟内存
- 建议:看看 Linux 内核的实现,动手写个简单的操作系统
计算机网络
互联网的基础,TCP/IP 协议栈是重点。
- 重点:TCP/UDP、IP、HTTP、DNS、路由
- 难点:TCP 的三次握手和四次挥手、拥塞控制
- 建议:用 Wireshark 抓包看看实际的网络通信
数据库
几乎所有软件系统都离不开数据库。
- 重点:SQL 语法、索引、事务、锁
- 难点:查询优化、并发控制
- 建议:自己搭个数据库,做点实际的项目
编程语言课
C/C++
底层开发、系统编程的首选语言。指针和内存管理是难点,但也是必学的。
- 重点:指针、内存管理、面向对象
- 建议:多写代码,理解内存模型
Java
企业级开发的主流语言,岗位多。
- 重点:面向对象、集合框架、多线程、JVM
- 建议:做个小项目,比如图书管理系统
Python
人工智能、数据分析的首选语言,语法简单,库多。
- 重点:基本语法、常用库(NumPy、Pandas、PyTorch)
- 建议:用来做数据分析或者机器学习的项目
选修课:根据方向选
选修课是拉开差距的地方。选对了选修课,能为以后的发展打下很好的基础。
算法/AI 方向
如果想做算法工程师、数据科学家,这些课很有用:
- 机器学习:线性回归、决策树、SVM、聚类,这些经典算法得理解原理
- 深度学习:神经网络、CNN、RNN、Transformer,现在 AI 的基础
- 计算机视觉:图像分类、目标检测、图像分割
- 自然语言处理:文本处理、语言模型、机器翻译
- 推荐系统:协同过滤、深度推荐模型
系统方向
如果想做后端开发、系统开发,这些课很有用:
- 编译原理:理解编译器是怎么工作的,对理解语言设计很有帮助
- 分布式系统:分布式存储、分布式计算、一致性协议
- 并行计算:多线程、GPU 编程、MapReduce
- 嵌入式系统:单片机、实时操作系统、硬件接口
安全方向
如果对安全感兴趣:
- 网络安全:渗透测试、漏洞分析、安全防护
- 密码学:加密算法、数字签名、密钥管理
- 逆向工程:反编译、调试分析、恶意代码分析
Web 方向
如果想做前端或后端开发:
- Web 开发:HTML/CSS/JavaScript、前后端分离
- 前端框架:React、Vue、Angular
- 后端架构:Spring Boot、微服务、消息队列
- 云计算:Docker、Kubernetes、云服务
其他值得选的课
- 软件工程:团队协作、项目管理、代码规范
- 人工智能导论:了解 AI 的基本概念和方法
- 大数据技术:Hadoop、Spark、数据处理
选课策略
怎么判断一门课值不值得选
看老师:
好老师能让枯燥的课变得有趣,也能让你学到更多东西。问问学长学姐,哪些老师讲得好。
看内容:
这门课教的东西和你的方向相关吗?如果相关,就值得选;如果不相关,可以考虑其他课。
看评价:
看看评教系统上的分数,问问上过这门课的同学。
看实用性:
这门课的知识在工作或科研中用得到吗?如果用得到,就值得学。
选课渠道
- 学长学姐:最有价值的信息来源,他们亲身经历过
- 评教系统:看看其他同学对老师和课程的评价
- 课程大纲:了解这门课具体教什么
- 网上评价:知乎、V2EX 上经常有人讨论课程
选课注意事项
- 先修课程:有些课有先修要求,得先学完基础课才能选
- 时间冲突:别选了两门时间冲突的课
- 难度平衡:一学期别选太多难课,留点喘息的空间
- 学分要求:保证毕业所需的学分
课程学习方法
怎么学好一门课
上课认真听:
听起来像废话,但真的很重要。上课认真听 1 小时,比课后自学 3 小时效率高。老师会划重点、讲思路,这些都是课本上没有的。
做作业:
作业是巩固知识的最好方式。不要抄作业,自己做。抄作业看着省事,考试的时候就傻眼了。
做实验:
很多课都有实验环节,认真做。实验能帮你理解理论知识,也能锻炼动手能力。
看参考书:
课本往往讲得不够深入,找几本经典教材看看。比如:
- 数据结构:《算法导论》
- 操作系统:《操作系统导论》(OSTEP)
- 计算机网络:《计算机网络:自顶向下方法》
- 数据库:《数据库系统概念》
找人讨论:
和同学讨论能帮你发现自己的盲点。有些概念自己以为懂了,一讨论才发现其实没搞明白。
怎么应对考试
平时:
- 上课记笔记,重点内容标出来
- 作业认真做,不懂的及时问
- 实验报告好好写,别应付
考前:
- 复习 PPT 和笔记,重点内容多看几遍
- 做往年真题,了解题型和难度
- 和同学讨论,互相答疑
- 老师划的重点一定要看
考试中:
- 先做会的题,不会的先跳过
- 时间分配合理,别在一道题上卡太久
- 不会的题写相关公式,能拿几分是几分
- 最后检查一遍,看看有没有漏做的题
哪些课可以"水"一下
不是所有课都值得投入同样的精力。有些课可以适当减少投入:
- 和自己方向完全无关的选修课
- 老师讲得很烂、学不到东西的课
- 纯理论、不实用的课
但注意: 水课不等于不学,至少得保证不挂科。挂科的代价很大,影响保研、找工作、甚至毕业。
一些实用建议
别只盯着绩点
绩点重要,但不是唯一重要的事。有些课虽然难拿高分,但学到的东西很有价值。有些课虽然容易拿高分,但学不到什么真本事。
平衡一下:必修课尽量拿高分,选修课可以适当选择对自己发展更有帮助的课。
动手实践很重要
计算机是实践性很强的专业。光学理论不够,得多写代码、多做项目。
建议:
- 每门课至少做一个小项目
- 把课程项目放在 GitHub 上
- 参加编程竞赛或黑客马拉松
善用网络资源
课本讲得不清楚的地方,网上有大量优质资源:
- B站:很多老师的讲课视频
- Coursera/edX:国外名校的公开课
- GitHub:开源项目和代码示例
- Stack Overflow:编程问题的解答