
斯坦福有一门课,把怎样指挥AI写代码、调用工具、处理失败,直接放进作业。另一门课教语言模型,却明确要求:作业里的实现,不能让AI代做。
前一门是CS146S,The Modern Software Developer,本文看的是2026年秋季版;后一门是CS336,Language Modeling from Scratch,看的是2026年春季版。
如果只截出“鼓励用AI”和“限制用AI”,很容易产生疑问:同一所学校,怎么给出两种答案?那我们到底还要不要学基础,能不能直接从AI工具开始?
把两门课的作业打开,问题就具体了。它们要求学生交出的东西不同,想检验的能力也不同。看懂这个区别,比收集一份名校课单更有用:你会更容易判断,自己眼下该借助AI完成什么,又该留哪一段亲手练。
先看你准备学会什么
CS146S的课程介绍围绕人与编码智能体的协作展开。这里的智能体,可以简单理解为会读项目、改文件、调用工具并继续推进任务的AI。学生需要学习怎样描述需求、提供上下文、安排工作,再检验结果。
CS336的目标则是让学生经历语言模型的构建过程,理解模型怎样训练起来。模型本身就是学习对象,许多底层步骤需要由学生完成。
拿一个具体问题来说。你想做一个“上传文章,自动生成阅读卡片”的小工具,第一种训练会让你关心:需求有没有说清,AI改了哪些文件,卡片内容怎么检查,失败后怎样修?
如果你想知道生成卡片的模型为什么这样工作,训练数据怎么影响结果,模型运算哪里最耗资源,就需要走进另一类训练。
同样碰到一段难写的代码,前一种任务可能考你能不能把工作合理交给AI;后一种任务可能恰好要借这段代码,检验你是否理解一个计算过程。允许使用什么工具,要跟着这个目的走。
这个区别也会出现在我们自己的任务里。假如今天必须交付一个能用的表单,借助AI缩短开发过程很合理。假如你给自己安排的练习是理解表单校验,直接拿走完整答案,就会跳过原本要练的部分。同一个人,在不同任务里完全可以采用不同做法。没必要先选定“全都自己做”或“全都交给AI”的立场。
先确定要练的能力,再决定哪一步交给AI。 两门课给出的规则,放回各自的任务里就很好理解。它们也不能被拼成“斯坦福先禁止、后来又放开”的改革故事,这是两门不同的课。
CS146S先让学生看清AI做了什么
CS146S的第一周作业,就从一次真实的Claude Code编码会话开始。学生要运行它,捕获请求记录,再进行分析。任务须涉及至少两个文件,出现一次失败与恢复,并有明确的计划过程。
这里的执行记录,通常叫trace。可以把它理解为可供追查的工作记录:AI当时收到了什么,调用了什么工具,工具返回什么,它接下来又做了什么。
作业特别要求,行为分析必须标出“观察到的”或“推断的”,并给出记录中的证据位置。把推断写成亲眼所见,会影响得分。
这个要求值得普通使用者借鉴。比如,假设记录显示:AI运行测试,遇到报错,修改一个文件,再次运行通过。这能支持“它根据这次报错作了修改”。至于“它已经理解整个项目”,证据还远远不够。
类似的区别,每天都可能发生在我们的屏幕上。AI说“已检查”,究竟检查了哪里?它说“问题已解决”,有没有重新执行会出错的那条路径?我们如果只读最后一句总结,就很容易漏掉这些问题。
不写代码也有类似情况。AI整理一段会议材料,写出“大家已经达成一致”,而原文只有一个人提议、其他人没有回复。把原文中的事实和自己的解释分开,这个习惯同样能用上。它会让我们知道,哪些结论可以继续用,哪些还需要去问当事人。
能找到过程里的证据,是一种可以练习的能力。 这份作业没有把“AI把事情做完了”当作全部。学生还得解释哪些设计有用,哪些行为只是自己猜测。
这也是「浩哥AI实验室」这组大学课程对比文章想做的事:打开原始作业,看看一个人需要留下哪些证据,才能说自己真的学会了一点东西。
给AI装上工具以后还要检查它会不会用错
到了第二周,学生要做一个MCP服务器,把外部服务的能力变成AI能调用的工具。可以把MCP暂时理解成连接AI与外部工具的一套约定。
作业要求至少三个能串联的工具,其中至少一个会真正改变外部状态;要完成真实OAuth授权流程,使用最小必要权限,为不可逆操作提供预览或试运行,并展示失败处理和协议层测试。OAuth就是用户向应用授予特定访问权限的机制。
为什么要求会细到这里?想象我们给AI做了“查找笔记”“读取笔记”“修改笔记”三个按钮。三个按钮各自能用,不代表它们组合起来就安全:查到重名笔记怎么办?权限过期怎么办?本来只该改一段,却覆盖全文怎么办?
这时,开发者要决定返回哪些信息、允许改什么、哪里停下来确认。一个接口能连通,只能回答其中很小的一部分。
第三周的skill作业把要求推进到可复用流程。学生先手工跑一次含有判断环节的工作,再把方法写成技能说明。测试包括三个应该触发的提示、一个相近但不该触发的提示,以及在真实代码仓库中的完整运行。
假设你写了一个“检查代码改动”的技能。当用户只是请AI解释一段代码,它却启动整套审查流程,说明适用范围写宽了。正例能验证“需要时会做”,反例才有机会暴露“什么时候不该做”。这个例子是我们的理解,不是课程给定的题目。
从这些作业看,使用AI以后,学生仍要承担相当具体的工作:给工具划定范围,解释失败,设计测试,保留证据。AI生成的文件越多,这些工作越值得认真做。
CS336把亲手实现留在学习过程里
CS336安排了五份作业:基础、系统、规模规律、数据,以及对齐与推理强化学习。第一份搭起模型,后续继续处理运行效率、规模估计、数据质量和训练方法。完整安排见课程主页。
看第一份作业的2026版说明,学生要实现分词器、Transformer模型、损失函数、优化器和训练循环,交代码及书面回答。它同时限制了一些现成组件的使用。
术语看起来多,背后的任务很朴素:文字怎样变成数字,数字经过哪些计算,预测错了以后怎样调整参数。学生需要把这些步骤接成一个自己能解释的过程。
如果AI把关键实现全部写好,代码可以运行,学生却可能还不知道哪里最容易出错。比如,一个计算结果数值看起来正常,但输入维度一变就失败;或者训练没有明显报错,结果始终不改善。此时,排查需要的是对过程的理解。
这是本文对这种练习设计的理解,不能据此断言亲手写代码已经被这门课证明有多少学习收益。
课程的AI边界也要说准确。概念解释、函数签名和库接口等底层编程问答可以借助AI;作业实现不能由AI代做,编码智能体和AI自动补全都在这个限制范围内。限制的是把需要学习的实现交出去,课上并没有全面禁止接触AI。
评分安排和具体提交要求,也能帮助我们看见各自的侧重。CS146S的2026年评分安排包括期末项目50%、开源贡献30%、每周作业15%和参与5%;CS336的第一份作业则要求同时交出实现和书面理解。
一份漂亮演示能说明什么,一份能通过测试的代码又能说明什么,都取决于它后面还有没有相应的解释与检查。公开材料让我们看见课程怎样设计考核,不能让我们直接知道每个学生最终学得如何。
对自学者来说,这提醒我们分别检查作品和理解。程序今天能运行,是一个结果;明天需求换了,你能找到该改的地方,是另一个结果。前者做出来了,值得保留;后者还做不到,也不用假装已经掌握。接下来的学习,可以直接围绕那个说不清、改不动的位置展开。
普通人选课先避开两个门槛误判
第一,别把“使用AI”理解成“零基础”。CS146S的前置要求是相当于CS111、CS161的编程经验。课程FAQ也说明,它建立在软件工程基础之上。你仍要能看懂项目、运行测试,对错误作出判断。
第二,别被“从零构建模型”里的“从零”误导。CS336要求熟练Python,具备PyTorch、深度学习和系统方面的基础,并能理解微积分、线性代数及概率统计。这是对实现起点的描述,学习者本身需要已有准备。
如果你主要想把AI用于写作、研究、运营,或者搭一个工作中的小工具,我建议先借鉴CS146S的任务拆分和验收方法。遇到编程内容看不懂,再补与当前任务直接相关的基础,不必为了跟上名校课程先买齐工具。
如果你已经写过程序,想更稳地与编码AI协作,可以挑一个规模小、结果容易检查的项目,逐步练习工具调用与失败测试。不要一开始就把邮件、客户资料和真实业务账户都接进去。
如果你的目标是做模型训练、研究或底层优化,CS336更贴近方向。但值得先检查数学、张量运算和调试能力,再决定投入多少时间。
只说编程基础,也可以比一句“基础不好”检查得更具体。先找一小段已有代码,尝试读懂输入输出,运行现成测试,再独立修改一个条件。做到哪里开始完全依赖AI,就从哪里补起。看完讲解后觉得顺畅,和拿到一个小问题后能开始动手,中间还有一段需要练习的距离。
还有成本。CS336第一份作业提供低资源学习提示,包括缩小模型或数据规模的建议;这不等于整门课都能在任意笔记本上轻松完成。校外自学也不能默认享有校内工具额度。先做小规模验证,再决定是否购买订阅或租算力,会更踏实。
给自己留一次关掉AI后的练习
不准备完整修课,也可以把这两种训练放到同一个小任务里。下面是本文给自学者的建议,不是斯坦福的课程要求,更不是照着做就能达到课程水平的承诺。
选一个你熟悉、结果能核对的任务。例如,用十条虚构笔记整理一张活动清单;会编程的读者可以把它做成小脚本。材料全部自造,不需要放入真实客户信息或隐私数据。
开始前,先自己写清楚三件事:输入是什么,输出应该长什么样,遇到缺日期、重名或重复记录时怎么处理。这一步不求写得漂亮,目的是让你先作出判断。
接着允许AI协助。让它解释不懂的概念、提出方案,或者帮你实现。但每接受一项改动,都拿原先的要求检查一次。出现错误时,留下“哪里错了、依据是什么、怎样改”的简短记录。
然后关掉AI,换一组材料,故意加入一种新情况。比如,一条笔记只有“下周三”,另一条写着两个不同日期。你能不能说明该怎么处理?原来的方法哪里需要改?能否独立改好其中一小部分?
验收时,也别只让同一个AI评价自己做得好不好。你可以事先留两条材料不参与演示,最后再拿出来检查;也可以给每个结果标出对应的原文。对活动清单来说,日期有没有依据、是否漏项,比回答写得多顺更容易核实。先把检查方式定下来,才不容易被一个漂亮结果带着走。
换个输入以后还能处理,才更容易看见能力有没有留在自己身上。 如果做不到,就把卡住的那一步拿出来继续练。它可能是某个基础概念,也可能是最开始的规则根本没想清楚。
选AI课程时,不妨也用同样的问题检查课单:这门课希望我独立完成什么,用什么作业检验,我现在缺少的基础又是什么?
斯坦福这两门课提供了两种具体做法。我们能借走的,是它们把学习目标落实到作业里的方法。至于下一段代码要不要请AI来写,先看看这一次,你到底准备学会什么。
资料说明:核查截至2026年10月8日。本文比较CS146S的Fall 2026公开课程与前三周作业,以及CS336的Spring 2026公开课程和Assignment 1说明(v26.0.3)。这是两门课的教学设计比较,不代表斯坦福全校或全球大学的统一政策,也不构成学习效果验证。
原始入口:CS146S课程站;CS146S作业仓库固定版本;CS336课程站;CS336第一份作业。课程页及可变分支后续可能更新,本文不将后续大纲安排视为已经完成的课堂成果。