绝大多数计算机专业爱学习的学生,入学第一年都可能在教材和 OJ 的循环中度过。课堂上听课、课下啃教材、对着 OJ 平台反复提交——这是最标准的路径,但在 AI 普及的如今,恐怕已经是很低效的路径了。
教材本身有几个系统性的毛病。更新太慢,从立项到出版短则一两年,长则三五年,等书出来前言里说的"前沿技术"早已过时。质量也难保证——主编挂名、研究生分头撰写再拼装的情况不少见,各章之间的符号体系统一性都成问题。更有的教材目标只是撰写者评职称,顶多覆盖一下知识体系,压根不考虑让读者上手编程。
当然,教材不是没用。它提供系统化的知识框架,这是碎片化网络教程做不到的。问题在于用什么教材、怎么用。CS 自学社区 CSDIY 的核心理念就是用世界上最好的课程代替本地质量参差的教材。伯克利的 CS61A、CMU 的 15-213(CSAPP)、MIT 的 6.S081——这些课程由该领域顶尖研究者亲自讲授,配套作业和项目经过数十年迭代打磨,全部资源免费开源。一个学期的投入,收获远超跟着一本僵化教材自学。
代码必须运行
纸质教材用起来不方便,我上课时也从来都是把电子版的代码和资料发给学生,从不要求带纸质教材。
对写代码的人来说,最重要的一条原则是:代码不只是用来读的,是用来运行的。
看到一个算法,看懂了伪代码,甚至能在纸上手动模拟——这离理解还差一步。补上这一步的唯一办法是把它敲进计算机,让它跑起来。对于新手,如果不会用调试工具,哪怕用最简单的,比如 Python 就直接 print 中间变量看每一步的状态变化,如果可以尽量用专门的工具,比如 C 就拿 gdb 单步调试看寄存器和内存。跑起来之后还不够,改一个参数看结果怎么变,把循环条件反转看哪里出错。这个"运行、修改、运行"的循环远比反复阅读有效。
菜鸟教程这类网站的核心理念正是如此:每个知识点旁边都跟着一段可以直接运行的代码,不是让你看完了再写,而是让你复制过去立刻跑。递归、闭包、多线程——看五遍描述不如跑一遍实验。
你第一次看到 Python 的列表推导式 [x**2 for x in range(10)],看一遍理解它在做什么没问题。但你应该立刻去试几个变体:加个 if 筛选会怎样?嵌套两个 for 会怎样?性能上和 map 加 lambda 比哪个快?只有把一个语法结构的边界——能做什么和不能做什么——都摸清楚的时候,才算真正掌握。而这个过程不是在阅读中完成的,是在终端里完成的。
能讲清楚才算真懂
理解了之后,检验标准是你能否把它讲清楚。费曼学习法说的就是这个道理:如果你不能把一个概念用最简单的语言讲给外行听,说明你并没有真正掌握它。
在 AI 时代,这个检验变得更具体了。你有没有试过对着 AI 描述需求让它写代码?"帮我用 Python 写一个函数,输入是一个列表,返回去掉所有重复元素后的新列表,保持原始顺序。"——如果你能清晰准确地描述出这个需求,说明你理解了问题本身。如果描述很模糊、AI 给出了不符合预期的结果、你却能立刻指出哪里出了问题,说明你的理解是扎实的。
更进一步,让 AI 写一段代码然后给它挑毛病。AI 写的并发代码有没有竞态条件?数据库查询有没有 N+1 问题?错误处理是不是把所有异常都吞掉了?能挑出这些毛病,理解就超越了"能用"到了"能审"的水平。
这个能力在工程协作中至关重要。你每天都会有同事的代码需要 review,每天都会有需求需要向 AI 或同事清晰表达。说不清楚就等于写不出来。
文本优于视频
如果让你选——看一个 45 分钟的视频教程,还是花 20 分钟读一篇带代码示例的文本教程——选文本。
这不是主观偏好,是信息密度决定的。一个小时的视频,口语语速大约每分钟 150–200 字,总内容量不过一万字,还夹杂着停顿、调试操作、重复强调。同样一万字的文本,阅读速度每分钟 300–500 字,20 分钟读完。你在视频里看老师挣扎着调一个 bug 的 5 分钟,在文字里可能就是一句"如果出现这个错误,检查这里"。文本的检索效率也远高于视频——Ctrl+F 直接跳到关键段落,视频只能拖着进度条猜。
视频有一个文本替代不了的场景:当你需要理解一个复杂的操作流程时,比如配置开发环境、设置断点调试、搭建 Docker 容器。这类操作密集型内容用视频展示更高效,你可以跟着同步操作。但一旦过了入门阶段,代码和文档永远是最快的学习路径。
ZetCode 和菜鸟教程就是典型的纯文本学习资源。每篇文章聚焦一个具体技术点——Python 的 subprocess 模块、Go 的 goroutine——先给一个完整的可运行示例,再逐段解释。没有废话,没有课程大纲,没有时长提示。这就是开发者该有的学习节奏:精准、高效、直奔主题。
用 OpenCode 搭建开发环境
前面说了要掌握 Python、Git、GCC、LaTeX 等工具。但光是装这些工具本身就是一个不小的工程——去各个官网下载、解压、配环境变量、换国内镜像、验证安装。每个步骤都可能踩坑,加起来能消耗一整天。
有没有办法一次性搞定?有,用 OpenCode。
OpenCode 是一个开源的终端 AI 编程助手,安装后可以直接在终端里跟它对话让它执行命令。安装方法在公众号文章 《高校教师建议大一开学要有电脑,还要安装 OpenCode 使用智能体》 里有详细说明,Windows 和 Linux 都覆盖了。装完之后 OpenCode 官方内置的 Zen 服务提供了几个完全免费的模型,比如 DeepSeek V4 Flash Free,不需要绑卡充值就能用。
装好之后,你可以直接让它帮你搭建整个开发环境。下面是一个参考提示词,把它复制进 OpenCode 的对话框:
我是一台新装的 [Windows/Linux/macOS] 系统,需要搭建一个完整的编程开发环境,请帮我逐步完成以下操作。每一步都要验证安装成功再继续下一步。下载工具优先使用国内镜像(如 TUNA、npmmirror)以加速。
- 安装 Miniconda3(最新版),配置 conda 使用清华 TUNA 镜像,然后创建并激活一个名为 dev 的 Python 3.12 环境,将其中的 pypi 也设置使用 tuna 为更新源
- 在该环境中安装 numpy, scipy, sympy, matplotlib, pandas, jupyter, requests, pillow
- 安装 GCC 编译器套件(用于 C/C++ 编译),验证 gcc --version 和 g++ --version
- 安装 TeX Live 或 MiKTeX(用于 LaTeX 文档撰写),配置使用清华 CTAN 镜像,验证 pdflatex --version
- 如果系统有 NVIDIA 显卡,安装 CUDA Toolkit(选最新稳定版),验证 nvcc --version 和 nvidia-smi
- 最终生成一份环境配置报告,列出上述所有工具的安装路径和版本号
OpenCode 会依次执行这些步骤——下载、安装、验证,遇到报错自行诊断并重试。整个过程你只需要看着终端输出,偶尔确认一下。一两个小时之后,一个完整的 Python + C/C++ + LaTeX + CUDA 开发环境就搭好了,而且所有软件源都配好了国内镜像。这在以前可能需要新生折腾好几天,现在一个提示词就解决了。当然了,对于老手来说,可能就是自己珍藏好久的几个脚本就能搞定了。
重要的是,在这个过程中你会亲眼看到智能体是怎么工作——它读报错、改配置、跑测试验证。你学到的不是一个工具,而是一种工作方式。
学习路径
有了以上原则,具体怎么走?以下参考了 CSDIY 的框架。
在写第一行代码之前先学会用工具。Git 和 GitHub 不是可选项——把代码放在没有版本控制的地方相当于写论文不存盘。至少学会 git init、git add、git commit、git push 和一个 .gitignore 文件。同时学会用终端,Linux 基本命令 ls、cd、cp、mv、grep、chmod 应该像键盘快捷键一样成为肌肉记忆。编程不需要重型 IDE 才能开始,入门阶段一个轻量级编辑器加终端就够了,等你真正感受到限制时再去找更强大的工具,自然能领会它们的设计意图。这个阶段大约一两周。
然后学第一门语言,从 Python 开始。不是因为它最好,而是因为它启动成本最低。伯克利的 CS61A 是目前最好的 Python 入门课程——不讲语法细节,而是用函数式编程的视角教你如何"计算"。作业设计是杀手锏:你不用在 OJ 上刷几百道 LeetCode,而是写一个 Scheme 解释器——写完了你对递归、闭包、eval/apply 的理解会在一瞬间贯通。如果觉得全英文有压力,哈佛的 CS50P 是另一个极好的替代,讲解极其清晰,作业同样质量极高。这个阶段四到六周。
接下来啃两门硬骨头。CSAPP(CMU 15-213)从二进制位一直讲到并发编程,把计算机系统从底层到顶层串成一条线,学完它你不再觉得"程序为什么这么慢"是玄学。Data Structures(伯克利 CS61B 或 Princeton Algorithms)训练工程思维——不是背排序算法,而是学会面对实际问题时用什么数据结构组织数据、什么算法降低复杂度。这个阶段八到十二周。
基础打牢之后,操作系统(MIT 6.S081)、计算机网络(Stanford CS144)和数据库系统(CMU 15-445)是三门被广泛推荐的方向课。选一两个最感兴趣的方向深入。到这个阶段最有效的学习方法已经变成了"读论文加跑代码"的循环。
最后说两个看似简单、执行起来极其困难的习惯。一是持续性——每天写一点代码比周末突击两整天有效得多,大脑在睡眠期间会巩固白天学到的内容,间隔学习的效果已被认知科学反复验证。二是输出——你至少需要一个地方记录学到了什么,可以是一个 GitHub 仓库的 README,可以是一个博客。这个过程不是给别人看的,是给自己看的,当你试图用文字表达一个模糊的理解时,模糊的地方会自动暴露出来。
参考文献
[1] CSDIY – CS 自学指南 https://csdiy.wiki/ — 北大学生整理的计算机自学路径,涵盖 MIT、Stanford、CMU、UCB 等名校公开课程。
[2] 菜鸟教程 https://www.runoob.com/ — 面向初学者的编程教程网站,每个知识点均附带可直接运行的代码示例。
[3] ZetCode https://zetcode.com/ — 英文的编程教程网站,涵盖 Python、C#、Go、Java、JavaScript 等多种语言,以聚焦具体技术点的短篇文章为特色。
CycleUser