写给计算机专业新生¶
如果你已经被计算机科学与技术、软件工程、网络空间安全、人工智能、数据科学等相关专业录取,首先恭喜你,我们能有更多的话题可聊。
计算机相关专业是一个机会很多、资源很多、方向也很多的领域。但也正因为如此,很多新生刚入学时会感到迷茫:到底该学 C 语言、Python、Java 还是 C++?要不要刷算法题?要不要提前做项目?要不要学 AI?看到别人暑假已经开始学很多东西,自己会不会落后?
结合我的经历,我想跟你们分享一下你们可以怎么做,当然这仅供大家参考。
我的看法:希望大家在暑假的时候能够掌握一些基础的语法知识¶
当时高考完的暑假,我曾跟招生的老师交流过,他们推荐我去提前接触一些计算机入门课程,例如哈佛大学的 CS50 和加州大学伯克利分校的 CS61A,但是当时我没有放在心上,后面当我到了交大之后我才发现,周围的同学们基本上都有很好的编程基础,他们有很多都学过信息学竞赛,并且在发达地区的同学们从小就开始接触编程了,所以我跟他们之间的差距很大,再加上交大的程序设计课讲的速度非常非常快,仅用了两周便将我之前学过的语法全部讲掉了,并且后面上课难度很大,我很难在课上去跟上,只有在课后慢慢地补老师讲过的内容,但是我的同学们学起来很轻松,这给当时的我带来了很大的压力。
但是这是客观因素决定的,我们没有办法在高中阶段接触这么多编程相关的知识,所以以我现在的视角来看,我还是希望各位计算机专业的学弟学妹们能在暑假花些时间来学习计算机有关的知识点,这样上大学才不会被打懵。
如果你想要在暑假提升自己的一些编程能力的话,我推荐一条路线供大家参考,当然大家要按照自身情况灵活地调整:首先大家应该对计算机有一个相关的了解,我非常推荐大家去看看Harvard的CS50这门计算机入门课,这门课非常经典,大家可以在YouTube观看或者在B站看中文字幕版。其次在看完CS50后,大家作为计算机系的同学,我不太推荐大家去学习python相关的语法,而是应该去学习C语言/C++,因为这两门语言更偏向于计算机底层并且大部分高校开设的程序设计课都是以C/C++思想来实现的,所以大家有想要提前学的打算的话我推荐大家学习C语言/C++,大家可以看B站上面的黑马的C++课或者鹏哥C语言,当然我当时上的是鹏哥的课并且所以更推荐大家上鹏哥(讲的超级好),讲的非常细致,但是缺点是时间比较长。最后的话,如果大家暑假还有时间,可以去看看Berkeley的CS61A,这是一门经典神课,但是我推荐大家在有一定的C/C++基础上再去学习这门课,所以把这门课放在CS50和C/C++语法课之后,这门课需要学习的时间较长(有很多很好很难的项目),所以希望大家不必快速刷完这门课而是在上完课之认真完成作业并且挑战项目,你会得到很大的收获。
最后我想说的是如果你能够提前预习一些程序设计相关的知识,你的大一上不会像我一样比较被动,能够有更多的时间去适应和探索大学的生活。
后面如果大家还想要继续学习的话,请大家多参考CSDIY Wiki。
下面是AI对大家的一些建议¶
不要一开始就被路线图吓到¶
刚进入大学时,最重要的是先建立对计算机学科的整体认识:
- 计算机不只是写代码;
- 编程语言只是工具,不是全部;
- 基础课程决定了后面能走多远;
- 项目经验很重要,但不能完全替代基础;
- 热门方向会变化,但底层能力长期有用。
不需要因为别人已经学了很多就慌张。每个人的起点不同,真正拉开差距的往往不是暑假多学了几门课,而是之后几年是否能稳定地学习、实践和复盘。
数学基础不要忽视¶
计算机专业不是纯数学专业,但数学基础仍然很重要。
不同方向对数学的要求不同:
- 算法、理论计算机方向需要离散数学、概率、组合、图论等基础;
- 人工智能、机器学习方向需要线性代数、概率论、统计学和优化方法;
- 图形学、计算机视觉方向需要线性代数、几何、微积分和概率;
- 密码学和网络安全方向需要数论、代数和概率;
- 数据科学方向需要统计、概率和数学建模。
大一大二的高等数学、线性代数、概率论、离散数学等课程,可能一开始看不出用处,但后面很多方向都会用到。
如果你数学基础一般,也不用因此否定自己。更现实的做法是:认真学好学校安排的数学课,遇到不懂的地方及时补,不要长期欠账。
计算机基础课决定后劲¶
计算机专业有几门基础课非常重要:
- 程序设计;
- 数据结构;
- 计算机组成原理;
- 操作系统;
- 计算机网络;
- 数据库;
- 编译原理;
这些课有些看起来不如 AI、深度学习、前端开发那么“热门”,但它们决定了你对计算机系统的理解深度。
比如:
- 操作系统能帮助你理解进程、线程、内存、文件系统和并发;
- 计算机网络能帮助你理解互联网应用背后的通信机制;
- 数据库能帮助你理解数据如何存储、查询和管理;
- 计算机组成能帮助你理解程序如何在硬件上运行;
- 编译原理能帮助你理解代码如何被翻译和执行。
如果只学应用框架,不学基础课程,短期可以做出一些东西,但遇到复杂问题时容易卡住。
所以,计算机新生不要只盯着最新技术名词。基础课虽然有时枯燥,但非常值得认真学。
项目经验很重要,但不用太早追求“大项目”¶
很多同学会听说“计算机专业要多做项目”,这句话是对的。
项目能帮助你把知识用起来,也能让你更清楚自己喜欢什么方向。
但新生阶段不需要一开始就追求很大的项目。刚开始更适合做一些小而完整的练习:
- 一个简单计算器;
- 一个记账小程序;
- 一个待办事项应用;
- 一个个人主页;
- 一个简单爬虫;
- 一个数据可视化小项目;
- 一个小游戏;
- 一个课程管理工具;
- 一个图像处理小程序。
项目不一定要复杂,但最好完整。比起写一堆零散代码,完整经历一次“想法、实现、调试、改进、展示”的过程,会更有收获。
做项目时也不要只跟着教程复制。可以尝试做一点自己的修改,比如换一个功能、换一组数据、换一种界面,或者把教程里的代码重新自己写一遍。
科研、竞赛和实习不必一开始全都抓¶
计算机专业的机会很多:科研、算法竞赛、数学建模、工程项目、开源社区、实习、创新创业、AI 项目、网络安全比赛等等。
但大一刚开始时,不建议同时追所有东西。
不同路径适合不同人:
- 喜欢理论和深度研究,可以逐渐关注科研;
- 喜欢解题和算法,可以尝试算法竞赛;
- 喜欢做产品和工具,可以多做项目;
- 喜欢工程实践,可以关注开发和实习;
- 喜欢 AI,可以先补数学、编程和机器学习基础。
刚开始不清楚方向很正常。可以先广泛了解,再逐渐聚焦。最怕的是因为别人都在做,就什么都报名,最后每件事都做得很累,也没有真正沉淀。
学会使用工具¶
计算机专业不仅要学课程,也要学会使用工具。
一些常见工具和能力包括:
- 科学上网的能力;
- 搜索引擎;
- Git 和 GitHub;
- Markdown;
- 命令行;
- VS Code 或其他编辑器;
- Linux 基础;
- Python 环境管理;
- 调试工具;
- 文档阅读;
- LaTeX;
- Docker;
- 常见 AI 工具。
这些工具不一定要在大一全部精通,但可以慢慢接触。
工具能力的价值在于,它能提高你学习和解决问题的效率。比如 Git 能帮助你管理代码版本,Markdown 能帮助你整理笔记,命令行能让你更高效地操作系统,文档阅读能力能帮助你自己解决很多问题。
如果不知道从哪里开始,可以先学 Git、Markdown、命令行和一个常用编辑器。
英语很重要¶
计算机领域大量高质量资料都是英文的。
官方文档、论文、开源项目、技术博客、报错信息、课程资料,很多都需要一定英文阅读能力。
并不是说英语不好就不能学计算机,但如果你能逐渐适应英文资料,会获得更大的信息优势。
建议从比较低压力的方式开始:
- 遇到报错时先尝试读英文提示;
- 看官方文档时先抓关键词;
- 学技术名词时记住英文表达;
- 看英文教程时可以配合翻译工具;
- 不要完全依赖二手中文资料。
英语能力不是一天练出来的,但计算机专业会不断给你练习机会。
不要只用“就业前景”理解计算机¶
计算机专业确实有较好的就业机会,但如果只把它当成“就业好的专业”,学习过程可能会很痛苦。
计算机需要长期面对抽象概念、复杂系统、代码错误、工具配置和不断变化的技术。真正能坚持下去的人,往往不只是因为它热门,而是逐渐建立了对问题解决、系统构建和技术创造的兴趣。
你不一定一开始就热爱计算机,但至少要愿意理解它、接触它、动手实践它。
如果入学后发现自己对某些课程不感兴趣,也不要急着否定整个专业。计算机内部方向很多,算法、系统、网络、安全、数据库、AI、图形学、人机交互、软件工程、数据科学、计算机教育等方向差别很大。你可能不喜欢其中一部分,但会在另一部分找到兴趣。
最后想说¶
计算机专业不是一条轻松的路,也不是一条只要报了就自动成功的路。
它需要持续学习,需要动手实践,需要面对大量细节和错误,也需要不断更新知识。但它也提供了很多创造和探索的机会。你可以用代码做工具、做系统、做研究、做产品,也可以把计算机和其他学科结合起来解决真实问题。
刚开始时,不要被别人的进度吓到,也不要因为一两次作业写不出来就否定自己。踏实学基础,主动动手,遇到问题及时查资料和求助,慢慢建立自己的节奏。
真正重要的不是你大一刚开始会多少,而是你能不能在接下来的几年里持续学习、持续实践,并逐渐形成自己的方向。