# 转载：AI时代，斯坦福计算机专业的学生在学什么?


> **转载声明**：本文经原作者 **liuyubobobo** 授权转载。原文链接：[微信公众号原文](https://mp.weixin.qq.com/s/PtYjfH041iPxehKESsjj0w?poc_token=HFKmqmqj18q2Mhg377ZgFwhU23svxSuBT362Um6l)

AI 时代，很多同学都有这样的困惑：AI 写代码已经这么快了，计算机专业到底还要学什么？又该怎么学？

最近，斯坦福大学计算机系公布了 2026 年秋季的课表。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img.webp" alt="liuyubobobo" width="1200" linked=false >}}

如果对这份课表的完整版感兴趣的同学，可以参考这里：

[https://www.cs.stanford.edu/academics-courses-schedule-autumn-quarter](https://www.cs.stanford.edu/academics-courses-schedule-autumn-quarter)

我顺着这份课表，梳理了其中一些课程的公开安排与变化，找到了一些值得分享的答案。

---

先看一个直观的比例。

剔除研究、实习等课程后，这份秋季课表还剩 80 个课程条目。

其中，AI 相关课程有 24 个，占 30%；

非 AI 课程有 56 个，占 70%。

AI 课程和非 AI 课程的比例大致是三七开。

&nbsp;

我们先聊非 AI 课程。

这里所谓的非 AI 课程，基本涵盖了大家熟悉的传统计算机专业知识。

比如：编程语言、算法、数据结构、数学、操作系统、网络、数据库、图形学，等等等等。

也就是说，在 AI 大行其道的今天，这份课表里依然有七成课程，属于传统计算机专业的学习内容。

我个人觉得这是很合理的。

我一直认为，无论在哪个领域，专业和不专业的核心区别，都在于对基础的理解。

缺乏基础，就只能做一个盲目的使用者。面对 AI 生成的代码，也只能“知其然，不知其所以然”。既无法识别隐蔽的性能瓶颈与安全漏洞，也难以在程序报错或失效时定位根本原因。

更重要的是，基础知识里还藏着一个领域的发展历史和发展方向。只有理解基础，才能看清哪些问题还没解决，哪些问题更值得解决，进而推动这个领域往前走。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_1.webp" alt="liuyubobobo" width="1200" linked=false >}}

&nbsp;

让我更感兴趣的一个问题是：在 AI 时代，这些基础课程的学习内容和学习方法是否有了变化？

我总觉得，在 AI 时代，很多课程的学习方式都会发生本质的变化。

比如学习一门编程语言，记忆语法细节、熟悉各种函数的写法，还需要花那么多时间吗？学习的重心，是不是应该更多地放在理解程序的运行逻辑，以及如何把实际问题转化为程序可以解决的问题上？

语法当然还要学。但学到什么程度，怎么学，或许都值得重新讨论。

从目前看到的公开材料来说，我还没发现斯坦福对这些基础课的学习方式做出大范围、系统性的调整。大部分课程都仍在使用非 AI 时代的经典教材。

但我相信，未来很多学科的学习内容和学习重点，都会发生翻天覆地的变化。

只是这还需要时间。

&nbsp;

但在一些课程的具体的作业里，我们已经能看到一些课程正在尝试把 AI 融入其中。

比如，编程基础课 CS106A 布置了一份很有想象力的作业，叫 Infinite Story（无限故事）。

学生用函数和字典这些非常基础的知识，搭起一个冒险故事。玩家走到一个还不存在的场景时，需要用程序调用 AI，把新场景生成出来。

大家可以把它想象成一本边读边长出新章节的互动小说。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_2.webp" alt="liuyubobobo" width="1200" linked=false >}}

作为一份编程基础课的大作业，用到的技术都很基础。可它能让刚学编程的同学感受到编程的乐趣：原来，用最简单的计算机知识，也可以接入最先进的 AI 工具，借助 AI 的力量，做出一些很酷、很有创意的东西。

&nbsp;

暂时还没有那么多计算机基础课，可以这样有趣地把 AI 融合在其中。

更多基础课程讨论的是：作业能不能用 AI？能用到什么程度？

{{< color "#2563eb" >}}最常见的规定是：可以让 AI 解释概念、澄清题意，但不能让它解题或帮助撰写作业答案。{{< /color >}}

比如概率论课程 CS109。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_3.webp" alt="liuyubobobo" width="1200" linked=false >}}

涉及编程时，大多数基础课也会明确要求学生避免让 AI 生成代码。

CS107（计算机组成与系统）就是其中之一。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_4.webp" alt="liuyubobobo" width="1200" linked=false >}}

理由也很直接：{{<color "#0080ff" >}}只有掌握基础，才能评估、调试、审查代码，也才能有效地向 AI 提问。{{< /color >}}

&nbsp;

在 AI 时代，变化也出现在考核方式上。

CS147L（跨平台移动开发）和 CS107（计算机组成与系统）都引入了面试考核，不再只靠笔试或项目作业。

即使同学“偷偷”用 AI 交出了一份像样的作业，老师也能通过面试进一步确认：你到底理解了多少？
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_5.webp" alt="liuyubobobo" width="1200" linked=false >}}

在 CS144（计算机网络导论）中，老师则会用 AI 来评判学生作业的代码风格和质量。

相对“形式化”的作业审查，可以借助 AI 提高效率，老师也就能把更多精力放在更重要的知识辅导上。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_6.webp" alt="liuyubobobo" width="1200" linked=false >}}

&nbsp;

整体看下来，我觉得斯坦福对基础课的态度很清楚：

{{<color "#0080ff" >}}可以使用 AI 辅助学习，但不能用 AI 替代学习；{{< /color >}}

在大多数基础课的编程任务里，{{<color "#0080ff" >}}学生还是得有“古法编程”的能力，不能只让 AI 生成代码。{{< /color >}}

---

聊完非 AI 课程，再来看大家可能更关心的 AI 类课程。

&nbsp;

在 AI 类课程中，核心基础课程是{{< color "#ff4c05" >}}CS221，人工智能原理与技术。{{< /color >}}

这门课程的重点，并不是教你怎样使用最新的大模型，也不是怎样搭建 Agent，更不是关于配置 Skill 或者 MCP 的。

这门课程与我们每天在互联网上看到的 AI 热词，似乎没什么关系。

这门课程涵盖的内容包括机器学习、搜索、马尔可夫决策过程、博弈、约束满足、概率图模型、逻辑推理，等等等等。在我看来，它梳理了人工智能发展历史中的所有重要方法，也在追问一些更基本的底层问题：机器怎样从数据中学习？面对大量可能的选择，怎样找到好的方案？环境有不确定性时，又该如何做决策？

这门课程覆盖的范围，比大模型本身更广。

大模型只是今天解决 AI 问题的一条重要路径，但在很多专门的领域，更古老（或者说更经典）的智能算法，比如搜索、约束求解等，依然有用武之地。

学了这些基础，面对一个具体问题，我们就能知道还有哪些方法可选，各自适合什么条件。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_7.webp" alt="liuyubobobo" width="1200" linked=false >}}

这门课程的推荐教材之一，我以前在公众号上向大家推荐过，就是这本大名鼎鼎的《人工智能：一种现代的方法》。有中文版。

不过要注意，这本书属于比较老旧的大部头经典教材，没有决心认真“从头”学习人工智能的同学，不建议购买。对于大多数同学，还是从 LLM，Agent 这些概念学起比较友好。
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_8.webp" alt="liuyubobobo" width="1200" linked=false >}}
&nbsp;
比如，课程中有一个作业，是要做一个智能对话的选课助手。

最靠谱的做法，不是把信息直接喂给大模型，让它替你选课。而是先让大模型理解学生用自然语言表达的需求，生成具体的选课约束条件，再把这些约束交给专门的数学求解程序处理。

这份作业训练的，是先把问题和条件想清楚，再判断适合用什么方法。

以后无论学习大模型，还是开发 Agent，都可以带着这些问题去看新技术：它解决了哪一部分？依赖什么条件？又有哪些困难仍然需要解决？

这又回到了前面那句话：理解基础，才更容易看清一个领域的发展方向。

AI 工具会不断更新。如果学习总是围着“某个产品怎么用”打转，就很容易被一批又一批新名词牵着走。

理解这些方法的原理和适用条件，才更有可能对新技术形成自己的判断。

&nbsp;

在这门人工智能基础课之下，斯坦福有许多细分领域的 AI 课程，比如机器学习、自然语言处理、计算机视觉、机器人，等等等等。

对这些课程逐一解读，我觉得普遍意义不大，就不展开了。

但有四门课，我想着重聊聊。它们和我们每天讨论的大模型、Agent、Skill、MCP、上下文工程等话题联系紧密。

关注 AI 的同学，了解一下这些课程在教什么、关注什么，或许能从中获得一些启发。

&nbsp;

首先，我要重磅吐血推荐大家关注 {{<color "#ff4c05" >}}CS146S：现代软件开发。{{< /color >}}

不只是专门做 AI 的同学，所有想用好 AI 编程的同学，都值得看看这门课。

顾名思义，这门课程讲的是如何开发软件。不过，它把与 AI 的协作放到了核心位置。MCP、Agent Skills、上下文工程，以及把产品需求写成可执行的规格，都在它的教学范围内。

我把这门课程的教学大纲截取出来，大家可以感受一下。

{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_9.webp" alt="liuyubobobo" width="1200" linked=false >}}

这也从侧面印证了：{{<color "#0080ff" >}} 现代软件开发，已经离不开 AI 了。{{< /color >}}

AI 可以承担越来越多的代码编写工作。那么，开发者该怎样组织整个开发过程？这是这门课关心的重点。

要给 AI 哪些信息？怎样把模糊的需求说清楚？代码生成以后，又怎样通过测试和反馈继续改进？

如果让我用一句话总结，那就是：{{< color "#ff4c05" >}}会写需求，正在成为编程能力的一部分。{{< /color >}}


&nbsp;

不妨设想一个简单的练习：做一个校园活动报名网站。

你对 AI 说：“帮我做一个报名页面。”

它生成了输入框、按钮和成功提示。页面看起来是做完了。

可问题马上来了。活动只收 30 人，两个人同时抢最后一个名额，怎么办？

有人连续点击两次，算一次还是两次？

取消报名后，名额要不要释放？

这些条件没说清楚，代码就算没有一行语法错误，软件也可能把事情做错。

于是，开发者必须把需求写得更具体：一个账号只能占一个名额；满额后不能继续报名；取消报名，要释放名额；同时也得遵守人数上限；等等等等。

这里很有意思的是“同时抢最后一个名额”这个问题。它涉及典型的并发控制。如果两个请求都读到“还剩一个名额”，随后又都报名成功，就会出现竞争条件 。

{{<color "#0080ff" >}}没有相关基础，开发者自己都可能意识不到这里存在风险，更谈不上把相应的约束写进需求。{{< /color >}}

开发者怎样才能意识到这些问题？这就又回到了基础。基础越扎实，就越容易发现隐藏在业务需求背后的技术问题。

我坚信，这是未来计算机专业人才的核心竞争力，也是专业和不专业的本质区别。

借助 Vibe Coding，非专业的同学也能做出一个能用的产品；而专业的同学，才有能力把产品做得安全、可靠、稳定。

这也是为什么，这门教学生用 AI 开发软件的课程，仍然要求学生具备 CS111（操作系统）、CS161（算法）等基础课程的知识。

有 AI 参与，开发者依然需要理解自己正在做的系统。

&nbsp;

另一门让我非常感兴趣的课程，是{{< color "#ff4c05" >}} CS336：从零构建语言模型。{{< /color >}}

{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_10.webp" alt="liuyubobobo" width="1200" linked=false >}}


在这门课程中，学生从亲手实现一个分词器开始，逐步搭建语言模型的各个组件，训练一个小型语言模型。接着，还要优化训练效率、处理预训练数据。最后，通过微调和强化学习，训练模型解决数学问题。

很多同学可能都有一个疑问：我们为什么要自己实现一个语言模型？

这门课的介绍里给出了一个很好的类比：学习操作系统时，我们也会亲手实现一个简易操作系统，来理解它是怎么工作的。

（说到这里，我也想吐血推荐斯坦福的经典操作系统课程 CS140。其 4 个 Projects 的设计，可谓操作系统领域经典中的经典）

{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_11.webp" alt="liuyubobobo" width="1200" linked=false >}}

学习语言模型也是如此。完整地走一遍开发过程，才更容易看清问题出在哪里：

模型效果不好，可能是数据的问题；

训练速度太慢，可能要检查计算和内存的安排。

很多 AI 问题，最终还是要靠对模型底层的理解来解决。

也正因为如此，CS336 不仅禁止学生使用 AI 生成代码，甚至强烈建议学生做作业时关闭 AI 自动补全。

不借助其他工具，自己从零实现一个语言模型，正是这门课希望学生经历的学习过程。

&nbsp;

接下来我想介绍的这门课，就和当下的 Agent 热潮直接相关了：{{< color "#ff4c05" >}}CS329Z，AI Agent 工程。{{< /color >}}

{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_12.webp" alt="liuyubobobo" width="1200" linked=false >}}

这门课程一共有两个大作业：

第一个大作业，是从零开始搭建一个企业内部 AI 助手。学生先学习 RAG，让系统能从真实的企业邮件中检索资料并回答问题；再逐步加入工具调用、记忆等功能，一步一步扩展 Agent 的能力。

这份作业不允许使用现成的 Agent 框架，但课程中也会介绍 DSPy、LangChain、LangGraph、LlamaIndex 等工具和框架。

这其实是计算机专业里一种经典的学习方法：{{<color "#0080ff" >}}先自己造轮子，再研究业界成熟的轮子。{{< /color >}}

亲手实现过，才更容易理解框架替我们做了什么、是怎么做的。遇到问题时，也更容易找到原因。

&nbsp;

第二个大作业则完全换了一个方向。学生拿到一个已有的 Agent，要为它设计测试任务和评分办法。

哪些结果可以由程序自动检查？哪些需要让大模型充当裁判？其中至少要包含一种大模型裁判评测，还要分析出错的原因。

这份作业强调的是 Agent 开发中一个越来越受重视的环节：Evaluation，也就是评测。

学习搭建 Agent 时，我们很容易把注意力放在“怎样让它跑起来”。

至于效果怎么样、出了问题怎么检查，却未必会花同样多的精力。

但在现实中，我们不能只看 Agent 是否碰巧完成了一次任务，还要有办法检验它在不同情况下的表现。这就是评测的意义。

我们看到当下很多自媒体演示的 AI 开发的产品，很容易被一次成功的操作吸引。

但真要把它交给别人使用，就需要知道：它在哪些条件下会失败？失败发生在哪个环节？改了以后，怎样确认问题已经解决？

把这些问题解决好，一个 demo才有可能变成可以持续使用的产品。

（顺便吐槽一句：现在自媒体上，很多人展示的那些用 AI 搭出来的东西，更多还是 demo，或者叫 toy，离真正的产品还有距离。）

今年在关于 Agent 的讨论里，明显能看到越来越多的人开始提及 Evaluation 的重要性。这门课的两份大作业中，有一份专门做评测，我觉得非常与时俱进。

&nbsp;

说到评测，还得提斯坦福的另一门老牌经典课程：{{< color "#ff4c05" >}}CS224N，基于深度学习的自然语言处理。{{< /color >}}

{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_13.webp" alt="liuyubobobo" width="1200" linked=false >}}

这门课以前只介绍怎样创建一个基于深度学习的语言模型，但现在，它所涉及的内容已经从模型本身，延伸到了模型后训练、Agent、工具调用和 RAG。

近些年的各种新技术，就这样被放进了一个前后连贯的知识体系中。

这门课程的第四次作业，主题也是评测，只不过做的是大模型评测。

学生需要比较模型的表现，尝试修改提示词并检验效果。还要让一个模型充当裁判，评价其他模型的回答。

更有意思的是，作业还会要求学生亲自检查这些判分，找出自己不同意 AI 裁判的例子，并且分析这些“不靠谱”的回答产生的原因。

这里有个很容易被忽略的问题：如果我们用 AI 判断另一个 AI 的好坏，裁判 AI 本身也得接受检查。分数高，未必就意味着产品优秀，对用户的帮助大。

详细理解 AI 自身的局限性，对以后做 AI 产品是非常重要的。


---



把这些课程放在一起看，我个人觉得：

斯坦福已经在认真训练学生把 AI 纳入软件开发；

也在要求学生理解模型和系统为什么这样工作；

新工具带来的便利写进了课程；

怎样发现它的局限、验证它的效果，也写进了作业。

对普通软件工作者来说，未必人人都要从头训练一个语言模型。但随着 AI 成为开发工具和产品的一部分，理解模型的工作方式、组织人与 AI 的协作，以及评估整个系统的可靠性，会越来越多地进入我们的日常工作。

在我看来，这也是计算机教育正在回应的变化：代码之外，开发者需要理解和负责的事情更多了。

也正因为如此，我完全不认同“计算机专业会没有饭碗”的说法。


&nbsp;

最近，我正好看到一位做安全工作的人，介绍他们公司的招聘策略。

说起来很简单：

{{< color "#0080ff" >}}首先，要证明你自己能做；{{< /color >}}</br>

{{< color "#0080ff" >}}然后，要证明你会用 AI 做。{{< /color >}}

原因也很简单：{{< color "#0080ff" >}}如果你自己都不会，也就不知道 AI 什么时候错了。{{< /color >}}
{{< image src="/posts/2026/09/StanfordComputerScienceImages/img_14.webp" alt="liuyubobobo" width="1200" linked=false >}}

再回头看斯坦福的课程设计，就会发现：他们就是在让学习者留下这两种证据。

{{< color "#ff4c05" >}}第一种证据，证明你自己会。{{< /color >}}</br>

{{< color "#ff4c05" >}}第二种证据，证明你能与 AI 一起完成更大的任务。{{< /color >}}

&nbsp;

**大家加油！：）**

**P.S.**

并非所有斯坦福的课程都是公开课，有公开的课程视频可以看。

但是大部分课程的课程大纲，阅读材料，使用课本，作业信息，全部都是公开的。

这已经非常有参考价值了。

我在 5 年前写过一篇旧文 [国外公开课都没视频，怎么办？](https://mp.weixin.qq.com/s?__biz=MzU4NTIxODYwMQ%3D%3D&mid=2247487070&idx=1&sn=991de8097232e2f5bd494d115202c37c&scene=21#wechat_redirect)讲的就是这个问题。感兴趣的同学可以参考。

![公众号二维码](/posts/2026/09/StanfordComputerScienceImages/liuyubobobo.webp)

