李博!上周我们组新来一实习生,天天用Copilot写代码,产出速度比老员工还快,搞得我们技术lead都有点焦虑了。
哈哈,这个太正常了。不过你有没有注意到,他写完之后code review被打回来多少次?
诶你还真说对了,打回率挺高的。所以我就一直想搞明白,AI写代码到底是个什么原理?它是真的学会编程了,还是说……
我先抛个结论啊——AI根本不会编程。至少不是以人类理解的方式在编程。
真的假的?那它怎么能写出能跑的代码?
你这么想啊,它本质上就是个超级记忆体加模式匹配器。训练的时候,它读了GitHub上五千多万个公开代码仓库,Stack Overflow上几千万个问答,各种技术文档、博客全都吃进去了。
然后它学会的是什么呢?是'当出现这样的需求描述时,大概率应该输出这样的代码'。注意,是概率,不是理解。
等会儿让我想想……就是说它其实是在做一个超大规模的条件概率计算?
对!你可以这么理解。它底层用的是Transformer架构,核心是自注意力机制。简单说就是,它在预测下一个代码token的时候,能回看前面所有的上下文。
包括你的函数定义、变量声明、注释,全都会影响它接下来输出什么。但它并没有在脑子里跑一遍程序。
这个类比我懂了。就像一个人背了一万篇作文,你给他一个题目,他能拼出一篇看起来不错的文章,但他不一定真理解自己写了什么。
完美类比!学术上有个说法叫——AI有语法能力,但没有语义理解。人类程序员写代码的时候,脑子里是有执行模型的。
执行模型?
就是你知道变量在内存里怎么变、函数调用栈怎么走、并发的时候状态怎么同步。AI不具备这种心智模拟能力,它就是在高维向量空间里做数学运算。
我靠,那它生成的代码能跑其实是因为……它见过太多类似的正确代码了?
Bingo!所以标准化任务它贼强——排序算法、文件读写、API调用这种,几乎一次给对。因为训练数据里这类代码太多了,模式太明确了。
那它什么时候会翻车?我需要知道这个,好跟我们团队说。
三个场景最容易翻车。第一,复杂业务逻辑,多模块交互那种。第二,边界条件,它经常忽略异常处理。第三,性能优化——它给你的是能跑的代码,不是最优的。
哎这不就解释了为什么实习生的代码能跑但review过不了嘛!
对啊,因为竞态条件、内存泄漏这种问题,AI压根发现不了。它没有运行时的心智模型嘛。
行行行,你又开始学术了。说点实际的——
你们产品经理就知道要实际的!
废话,我得落地啊!那怎么才能让AI写出质量更高的代码?
Prompt工程,这个是关键。GitHub官方数据说,Copilot生成的代码接受率才30%左右,70%都要改或者直接拒绝。但是如果你Prompt写得好,准确率能提升30%到50%。
差这么多?!具体怎么写?
举个例子,别说'写个登录功能',要说'用Python Flask框架写用户登录接口,JWT身份验证,包含密码加密和错误处理'。越具体越好。还可以用Few-Shot,给它几个示例让它学模式。
还有个技巧叫Chain-of-Thought,让AI先分步思考再写代码,出错率会低很多。
这我有体感,我之前让ChatGPT帮我写数据处理脚本,给了详细约束之后质量确实好太多了。所以本质上是——你得比AI更懂需求,才能驾驭它。
你这句话总结得比我好。说到底,AI是工具,判断代码好坏、设计架构、处理复杂调试,还是得靠人的编程功底。
所以与其焦虑AI取代程序员,不如学会怎么跟它协作。
对,它是超级助手,不是替代者。但你得有足够的判断力才能用好它,不然就是你那个实习生的状态——产出快,翻车也快。
哈哈行,我回去就把今天聊的整理一下发给我们技术lead。李博,下次请你喝咖啡。
记住了啊,美式不加糖。