Skip to content

    课程选择建议

    选课是个技术活。选对了课,学起来轻松,还能为以后打基础;选错了课,浪费时间不说,还可能影响 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:编程问题的解答

    相关链接