牛马观察日记012:「我让实习生关掉AI手写个二分搜索,结果我TM先卡壳了」
上周三下午,我让实习生小周关掉Cursor,纸笔手写一个二分搜索。
他写了40分钟,错了3次。
我正准备开口嘲笑他——
"你们这一代基本功是真的差。"
话到嘴边,我突然想到一个事:要不我也写一下。
我以为这是一个"老年程序员教训小年轻"的故事。
但结果不是。
我盯着白纸,写下"def binary_search(arr, target):"。
这是第几行来着。low = 0,high = len(arr) - 1。行,while low <= high: 没问题。mid = (low + high) // 2。这也没问题。
然后是 if arr[mid] == target: return mid。
然后是 if arr[mid] < target: low = mid + 1。
然后是 else: high = mid - 1。
写到这里,我停下来了。
return -1。
我写完了。看着挺对的。
但我盯着那段代码看了30秒,发现我不知道该怎么解释 为什么 mid = (low + high) // 2 是对的。我知道它是对的。我用了十年。但我现在写不出来——不是写不出来,是写不出"为什么这样写"。
更准确地说,我脑子里冒出来的第一反应是:
"等下让Claude帮我解释一下。"
我赶紧把这个念头压下去,告诉自己:这是你问的问题,不是AI的问题。
但我心里清楚——这一秒钟的"等下问AI",就是问题本身。
我已经3年没手写过循环了。
小周看我停下笔,小心翼翼地凑过来:"哥,我写的是这样的——"
他递过来他的草稿。错的地方是边界条件——high = mid - 1 他写成了 high = mid,if arr[mid] < target 他写成了 if arr[mid] <= target。
我说你这个是off-by-one错,思路是对的。
他点点头,但眼睛里明显是「虽然你说思路对,但我没听懂为什么off-by-one」的茫然。
我突然有点慌。
因为我意识到——
他错的地方,正是我已经写不出来的地方。
他不是不愿意动脑,是没有人教过他怎么动脑。我们这一代(30+的老牛马)刚毕业那会儿,写代码是要先在草稿纸上画流程图、列case、讨论边界条件,然后再上机敲的。这个"卡壳-死磕-想通"的过程,是学习本身。
而他们这一代,刚上来就是Copilot的灰色提示,Tab一下就出整段代码,错就错了,反正跑起来能work就提PR。没有卡壳的肌肉记忆,所以也不会有"想通"的快感。
我回办公室,打开The Daily Californian,看到一条新闻:
UC Berkeley 计算机系入门课 CS 10(《The Beauty and Joy of Computing》)的挂科率,从过去两年的不足10%,飙到了 35.3%。
35.3%。
每三个学生里,就有一个挂。
我以为我看错了。再看一遍。35.3%。
教授Dan Garcia接受采访时说:
"Some of the numbers that you saw from the number of students who receive failing grades were because we caught them (cheating) and are prosecuting them … But in other cases, it's students who are leaning a little too hard on LLMs to do their work for them, and then at exam time just really aren't ready."
CS 10 抓了 30 个学生学术不端,全部送到学生行为中心处理。剩下一部分是真的在裸考。
另一门核心课 CS 61A(《The Structure and Interpretation of Computer Programs》)的挂科率也飙到了 10.6%,是正常上限。再上一层的 EECS 127(优化模型)挂科率 16.8%。
全在飙。CS专业,全美第一梯队的伯克利。
Garcia教授说了一句我反复看了三遍的话:
"I used to have full office hours, and for the first time, I was having nobody come to my office hours. It was just so surprising to sit in my office alone."
这学期第一次,office hours没人来。
他说了一个词叫「confusion is the sweat of learning」——困惑是学习的汗水。
"Most students, I think, are not putting in the sweat."
我继续看。1300多名加州大学系统的教职员工联署请愿,要求恢复SAT/ACT作为STEM专业的录取标准。
他们列举的理由是:学生的数学准备严重不足。线性代数、向量微积分、数学证明——这些CS专业的地基——学生上来就崩。
还有一位学生告诉The Daily Californian,他上的那门线性代数课,老师直接说了:「这门课是开卷、开网、开AI政策。」
开AI政策。
你以为是教AI怎么用,结果是默认你会用AI。
一个CS专业的大学生,线性代数课的开卷开AI政策,直接对应我刚才写不出来的那30秒——不是因为难,是因为我已经3年没被迫「卡壳」了。
我把手机放下,看了一眼小周。他正对着电脑,用Copilot写一个新需求。
我凑过去看了一眼他的提示词: "Write a function that calculates the optimal pricing strategy for our SaaS product based on user segments."
Copilot哗哗地输出了80行代码。
他看都没看,直接commit了。
我突然有点想笑,又有点想骂他。
但转念一想——
他没做错任何事。他只是按照他的世界里最有效率的方式在干活。
只是他不知道,他为了「跳过思考」而省下来的那20分钟,正在以「10年后你debug一个线上事故要花3天」的形式,悄悄收回来。
我做了个决定。
我让小周今天不准用AI,把手头那个ticket纯手写。他有抵触,但同意了。
我打开PyCharm,把所有插件都关了——Copilot关了,Cursor Tab也关了,chat panel折叠到看不见。
我打算陪他一起写。
我们俩坐在工位上,面前各一张草稿纸。
我写一个稍微复杂点的数据处理pipeline,要按用户分群计算ARPU,然后按月聚合。
我写了10分钟,发现卡在「怎么优雅地处理空值」上。
第一反应还是——"等下问Claude"。
我把笔放下,深呼吸一次,然后手动想了5分钟。
最后用了一个很丑的 if x is None: continue 解决。
不优雅。能用。5分钟想出来的。
小周那边,他写了30分钟,写完一个排序函数,错了一个边界条件,然后又开始抓头发。
我过去看了一眼——他还是错在high = mid - 1 这一行。
我说你想想为什么是 mid - 1,不是 mid。
他想了大概1分钟(已经很久了,AI时代这1分钟够他跑20次Copilot),突然眼睛亮了:
"啊——因为mid已经比较过了,所以下次的high应该是mid-1!"
我拍了拍他肩膀。
没有说"看到没,这才叫真正的学习"这种爹味话。我什么都没说。
晚上回家的路上,我又看了一遍那条新闻。
35.3%。10.6%。16.8%。
Garcia说"困惑是学习的汗水"。
我在地铁上,看着玻璃里自己的脸,突然意识到——
我不是来嘲笑小周的。我是来嘲笑自己的。
我刚才那5分钟的"卡壳-死磕-想通",和Garcia说的"困惑的汗水",是同一种东西。
这种东西,过去12个月我用AI的频率越来越高之后,基本不发生了。
我以为我在"提效"。
其实我在把自己的"卡壳能力"外包出去。
35.3%的伯克利学生和下午3点写不出二分搜索的我,得的是同一种病。
手机又推送了一条消息:Cursor 1.4 发布,「Agent 模式可以独立完成中等复杂度的开发任务」。
中等复杂度。
我想了想——如果我让Cursor独立完成一个我「大概知道怎么做但需要想一会儿」的任务,它做完之后,我是不是变得更不会做了?
答案是:是。
但我下次还是会用。
这就是35.3%。
这就是「困惑的汗水」没人再流的原因。
不是因为AI太强。是因为「跳过汗水」这件事太容易了。
本文为虚构故事,不涉及真实公司人物。
评论区