AI无法取代编程技能 | AI生成和翻译

Home 2025.07

https://weibo.com/6347862377/5183583601819943


如今网络上的虚假信息实在太多,说什么AI(LLM)编程能力超强,不用写一行代码就能完成项目。根据我长期使用ChatGPT,Claude,Copilot,以及最近Cursor的大量实践经验,不懂编程的人想用AI完成项目几乎就是幻想。

就算是会编程的人,如果对计算机科学没有深刻理解,不能写出极其简单,逻辑严密的程序,那也不可能用AI写出“王垠水平”的代码。有人吃惊王垠也用AI?当然了,我为什么不用?我用的还挺多,而且比一般人用的更有效。去年计算机科学基础第五期后期,我就给学员演示过用Copilot完成代码。但我不建议班上的学员使用这些工具,因为他们没有能力分辨正在生成的代码质量如何,使用AI显然会阻碍他们的思考和进步。但我能控制它,所以我可以用。

过去一个月,Cursor为我生成了超过6万行代码。猜猜我接受的有多少行?不到5千行。它经常跑偏,不理解抽象所以重复同样的逻辑,甚至把我手工调整过的部分又“纠正”回去,把之前纠正的错误又改回来。它写很多复杂的测试,它自己都看不懂,最后无法理解测试为什么“不通过……”

前几天我新建一个项目,花掉我20多个小时对它进行“讲解”,生成了超过2万行代码。最后它变得无比复杂,无法修复,我只好决定完全重来。它居然还欢呼“成功了”,一条一条列出“成果”,完全无视那些根本性的,毫无意义的错误。我反复指出问题,它不停地回答“哦,我明白了!”,“这次我找到问题的根源了!”,然而都是空话……因为无法纠正,就只能自欺欺人?

我使用的模型是最新的Claude 4 sonnet。GPT 4.1 还要糟糕一些,几乎无法用于修改代码。Claude opus 太贵太慢,而且我试过似乎并不比sonnet好多少。有人提供Cursor配置“指南”,说只需要把这些写进.cursorrules。我当然试过了,没有用的。你要求什么它不满足什么,就连我刚提出过的要求有时候都无视。人们以为AI能看懂大量复杂的代码,然而一次又一次的经验告诉我,它不能。

没有人能看懂混乱的代码,王垠也不能。你给AI提示几次,生成的代码组合起来,它就开始重复和混乱。AI不能理解这代码里的规律和相似之处,它可能有些代码根本没看过。所以它无法简化这样的代码,甚至看不出哪里可以简化。有几次我明确标出行号,指出“这部分可以简化”。它回答:“是的!我来帮你简化!”结果最后它的理解完全是另一回事,它跑去把本来正确的部分给纠正了,代码根本没有简化。

别误会,用AI做事并不是总是失败,其实小规模经常成功。有时候它还真能把事情搞定,但你得知道如何控制它。我举这个例子只是想说明,就连王垠用AI写代码也经常失败。它显然不像广告里说的那样,你只需要告诉它做什么。我描述的已经非常细致了,它仍然做不好。王垠的描述能有多细致?看看王垠的文章就知道了。

有人说不要目标太高太快,要有策略。我当然知道了,我是很有策略的。你以为我之前的成功项目都是没有智慧和策略就能做出来的?所谓策略,就是知道先做什么,后做什么,什么该做,什么不该做,什么暂时不该做。我可以说是这种策略的大师。很少有人知道我是怎么做事的,他们只知道最后的结果。

我做了PySonar之后,Google一个团队花了两年时间,想做出超越PySonar的项目,最后却一事无成。为什么呢?因为他们的策略从开始就错了。他们想用Prolog这种逻辑式编程语言来实现类型推断。我一听就知道这注定失败。我为什么知道?因为我早就试过了,我知道Hindley-Milner系统和Prolog的局限性。知道什么不该做,什么注定失败,其实是非常重要的智慧和策略。很多人缺乏这种智慧。

扯远了。总之我后来发现,我平时编程的策略可以用来指导AI写代码,比如从最基本的小函数开始,逐步进展。这样指导它能做对吗?我发现它连小段代码都写不好。有些小函数才几行代码,需要我纠正好几次它才能写对。然后呢,不知道什么时候它又给你纠正错了,所以你得检查它修改过的每一个地方。你得知道什么样的代码是好的,什么样的是垃圾。也就是说,你几乎得审查它写的每一行代码,否则很容易失控。

你自己不会写代码,怎么能审查别人的代码?知道什么是好的,正确的代码,是最难的。没有深入的研究和大量的经验,是不可能分辨出来的。是的,AI现在成了码农,我成了VP。可是不懂计算机科学的VP,带领一群码农写意大利面条代码,能做出什么好东西?呵呵,我了解很多公司的类似现象。他们不知道手下在做什么,谁是对的,下一步该做什么。我知道多少VP在摸黑,在坑蒙拐骗。

所以没有能力的人有AI仍然做不了事,因为他们控制不了它。他们是没有资格做VP的。因为世界上大部分代码都是平庸的意大利面条代码程序员写的,训练数据就是那样的,所以AI很难写出“王垠水平”的代码,可想而知。我发现把我写好的代码交给AI,它确实能进行一些有用的分析和改进。但如果从零开始让它写,AI确实很吃力。几乎每一个小函数,都需要我纠正好几次,才能达到我期望的那种简洁和可理解性。

我计算机课上的代码都是极其深刻的,跟公司代码和开源项目完全不一样。所以上我课的人,基本别想用AI来完成练习。因为数据量太小了,没有训练数据,所以AI可能永远达不到这种深刻程度。当然毕业之后,学员的水平远超AI和那些平庸的,作为AI训练数据来源的程序员。这就是为什么我的课叫“计算机科学”而不叫“编程”。计算机科学家和程序员/软件工程师是有巨大差别的。

AI也许能替代普通程序员,却永远不可能替代计算机科学家。它只能被计算机科学家当做工具来使用。别误会,其实我觉得AI是个好东西,是真正伟大的发明。我发现LLM真的能理解人类的语言,而且似乎有很深的“思考”,这已经是很了不起的成就了。我之前对AI的评价大部分都是正确的,比如“自动驾驶汽车”注定失败的预测。只是LLM的能力有点超出我的预期。

然而目前LLM的编程水平显然远低于我。使用AI的时候我发现,解决问题的速度快了很多,因为很多繁琐的事情不需要我亲自去管,可以更加专注于核心的部分。总之我让它做我不想做的“脏活”,它毫无怨言。这就是为什么经历了这么多失败,我仍然继续使用它们,甚至付费使用。因为这世界上的脏活太多了,太多复杂而设计拙劣的文档,我需要这样一个工具来帮我应付。但核心的想法仍然必须来自我,AI在这方面无能为力。


Back Donate