快速阅读: MIT有门课专门教CS学生那些“没人教但天天要用”的东西:命令行、版本控制、调试工具、代码质量。2026年新增了AI辅助编程内容。这门课在网络上引发广泛讨论,核心争议是:这些基础工具技能,到底该不该系统教?
---
MIT有门叫“Missing Semester”的课,名字起得很直白:这就是你CS教育里缺掉的那学期。
操作系统原理、机器学习算法,高校教得很系统。但Shell怎么用、Git怎么用好、怎么写有意义的commit message——这些东西学生要么自己摸索,要么毕业了才发现自己根本不会。
有网友专门提到代码注释这件事,说得相当到位:读代码本身能告诉你“做了什么”,注释应该解释“为什么这么做”。`i+=1; /- 增加i */` 这种注释毫无价值,真正有用的注释是:我在循环中途自增i,是为了能提前看到下一个值来判断是否需要交换。
用给外行讲解的语气写注释,代码才能活得更久。软件的大部分生命周期和大部分成本都在维护阶段,这一点很多人从来没认真想过。
Git的讨论占了评论区相当大的篇幅。
有观点认为,大量所谓“高级工程师”、“可靠性工程师”,遇到git出问题的第一反应是删掉重克隆。提交信息永远是`changes`或者`try fix`,git bisect/blame/revert根本不知道怎么用,更别说用这些工具还原一段代码演变的故事。
反驳的声音也很强:这不完全是工程师的问题,Git的设计本身就不友好。接口反直觉,抽象层到处漏,一旦出了问题,不熟悉内部模型的人根本不知道怎么脱身,而能把自己搞进那个处境的人,往往也没能力出来。有人用电锯打比方,也有人回说:正因为我们做的是软件,不受物理定律限制,我们完全可以造出一把不会切断手指的电锯。
Mercurial当年输掉的那场仗,到现在还有人觉得可惜。
有一句话值得单独拿出来品品:如果你把commit历史维护好,让它讲个故事,代码审查是一种享受。如果你往上堆26条`try fix`,最后留下一团烂泥,那是折磨。
提交历史是写给未来的自己看的。很多人到现在还没意识到这一点。
2026年这版新加了AI辅助编程的内容,有人直接说应该删掉,理由是学生会产生依赖、反而学不到东西。也有人觉得这个方向对,甚至建议专门加一节“自己动手写一个agent”,说代码不复杂,几百行就能搞定,但能建立非常扎实的直觉。
还有人问得很直接:现在还有必要学CS吗,AI不是把这些都替代了?
有一个回答说得很清楚:agent很擅长解决“被解决过很多次”的问题,但无法用洞察力重新定义问题本身。他举了Flying Edges算法的例子——那是对Marching Cubes的一次根本性重构,换了底层思考框架。AI能模仿形状,但不能产生这种跃迁。
工具学得再好,不理解自己在构建什么,迟早会遇到那个时刻。
---
简评:
这门课真正在教的不是命令行,是手艺人的尊严。
算法是屠龙术,Git是磨刀石——CS教育培养的是会想象巨龙的人,却忘了刀钝了连猪都杀不死。
那个写i+=1; /*增加i*/的人,和在博物馆油画前挂个牌子写“这是一幅画”的人,本质上是同一个人。代码注释的真谛是留下思考的温度,让后来者知道此刻你为何如此抉择。
有趣的是Git的争论。有人说电锯危险怪使用者,有人说软件不受物理限制、完全可以造不伤手的锯子。这恰恰暴露了程序员的傲慢与天真:我们总以为自己是造工具的人,却忘了大多数时候我们只是被工具塑造的人。
提交历史是写给未来的遗书。可惜多数人写的是changes、fix、try again——像极了人生最后只留下“来过”两个字。
---
课程主页:missing.csail.mit.edu