🤖 AI总结
主题
关于AI编码工具在软件开发中的实际应用与局限性的个人反思。
摘要
AI编码工具能加速开发但无法完全取代开发者,其生成的代码在复杂场景下可能存在隐患,开发者需保持清醒认知。
关键信息
- 1 作者通过个人经历类比,指出AI编码(代码感编程)可能产生看似完美但不完全可靠的代码。
- 2 AI编码工具不会取代开发者,而是通过创造性破坏改变工作方式,创造新需求。
- 3 过度依赖AI可能导致对代码理解不足,在复杂企业环境中产生潜在风险。
![]()
1991年,当我16岁时,一位挪威交换学生在我高中的才艺表演之夜用原版挪威语表演了《三只山羊嘎啦嘎啦》。她的表演如此热情洋溢,以至于每个词都深深印在我的脑海里,直到今天我仍能用挪威语背诵《三只山羊嘎啦嘎啦》。
我能够”代码感编程”挪威语。
虽然我不会说这门语言,但这并没有阻止我自信地对遇到的任何挪威人使用这项技能。当他们用英语以外的语言回应我时,我的表演技巧立刻露馅,但多年来我一直用它作为与内敛的挪威人的破冰手段,因为他们觉得我带着浓重澳大利亚口音演绎他们文化重要童话故事很可爱。
这与我向首席技术官展示我新构建的软件包时得到的反应相同。我骄傲地宣布,我决定让AI编码智能体来处理我们正在开发的新文件项目的功能规范和用户故事,看看它对项目是否有用。
他问了我一系列尖锐的问题,立刻让我想起了当可怜的挪威人在我炫耀才华后回应”Snakker du litt norsk?”(你会说一点挪威语吗?)时的感受,之后我立刻哑口无言,有些尴尬。通过在句子中使用”litt”,他们告诉我知道我对自己说的话理解很少,但他们欣赏我的努力。
回到与首席技术官的对话,他看着我的代码感项目问道:”为什么这里禁用了代码检查?”
我不确定,所以回答:”代码检查是什么意思?”首席技术官让我交出笔记本电脑,去硬编码凭证角落面壁思过。”但我需要它,我在帮忙,”我抗议道。
“当你意识到自己做了什么并道歉时,你就能拿回来,”首席技术官回应道。
这不是我第一次尝试代码感编程;我已经负责大规模定制软件项目20年了。我使用故事驱动软件设计12年,并且试验过多种软件规范流程,从传统功能规范到行为驱动和测试驱动设计。
我甚至短暂接触过Gherkin,错误地认为这会成为开发者和业务所有者思考如何描述软件所需功能的中间地带。
我觉得自己比大多数人更有能力使用AI进行叙述式开发。我准备了技能,拥有长期且多样化的参考项目目录,都使用严格执行的实体库、安全模式和通用的模式定义方法。
我还有一系列成功案例,使用AI编码工具构建了一些相当令人印象深刻的原型,在一些我试图给人留下深刻印象的会议中得到了适当的惊叹声。这些原型变成了真正的项目,带着对所使用工具的新信心,我把注意力转向将原型的核心概念之一变成真正的组件。
它工作了……直到它不工作。
清醒认知
这就是教训:关于AI编码智能体将终结软件开发职业的言论被大大夸大了。
我不怀疑有一天人类将不再逐行输入代码,但在过去几年里谁还在这样做呢?Stack Overflow错过了一个机会,没有对用户每次在网站上使用Ctrl-C收费。这会产生大量现金,因为世界各地数百万开发者发现,很少有问题是之前没有被别人解决过的。
复制粘贴开发与我们在代码感编程中看到的许多问题相同,因为那些无法理解即将CTRL-V到项目中的代码的人本来就不应该使用它。
至少在代码感编程世界中,当你要求AI解释为什么以特定方式做某事时,它不会辱骂你,暗示它比看起来可能的更了解你的母亲,并且炫耀你的新手问题低于其回应的尊严。
代码感编程是一项有价值的技能。当你知道对项目应用什么限制时,价值会被放大。经验丰富的软件开发者立即了解这些限制和边缘情况是什么。
在经验丰富的手中,代码感编程显著加速了开发过程,确实产生了颠覆性影响。这种颠覆是否意味着开发者的终结?完全不是。
这实际上是一个明确定义的经济学范式,约瑟夫·熊彼特1942年著作《资本主义、社会主义与民主》第7章介绍了创造性破坏的概念,为我们提供了这将如何发展的蓝图。
1970年在美国,蓬勃发展的电信行业雇用了42万名接线员,主要是手动连接每年98亿次长途电话的年轻女性,平均每个接线员每天64次通话。
自动交换机的发明对接线员队伍产生了灾难性影响。然而,它对拨打电话数量也产生了相应影响(到2000年达到1060亿次),导致企业探索处理接收电话数量的方法,结果发现接线员很适合吸收新创建的接待员角色需求的相应增长。
到2000年,美国约有100万名接待员。
创造性破坏使受约束的资源更加高效,导致做更多而不是更少的事情。
我不是说开发者会成为接待员——我认识的开发者在这个工作上会很糟糕。但我确实认为同样的原理会适用。
当大型SaaS企业在宣布AI接管工作的同时裁员时,我认为他们只说了一半真相,因为用更少做更多的能力将增加最终用户创建软件的能力。
在Salesforce花了三年时间完善提交按钮的开发者将转而为当地保险经纪公司构建”我不敢相信这不是Salesforce”。IBM负责维持Maximo运行的内部团队(是的,它仍然存在!)将转而为当地公用事业公司的内部”完全不是Maximo.com”项目工作。
让我们重新审视我的”它工作了直到它不工作”的代码。
我的所有原型都工作了,因为它们是孤立场景,没有需要考虑的边缘情况。我没有在大型企业环境中引入新技术相关的任何开销。没有人问我OAuth凭证,或者我是否考虑了竞争条件,或者架构审查委员会喜欢对那些认为明天可能与今天稍有不同的麻烦人员提出的任何问题。
然而,更阴险的是,每次我向AI智能体提出想法时,它都会以”天哪!你可能是地球上最聪明、最有魅力的人!林纳斯·托瓦兹刚刚哭了,因为你的想法太好了,他为没有首先想到而深感羞耻”开始对话。
这是因为AI在编写任何一行代码之前首先构建的是信心。
它希望你在这样的问题上使用它;它的目标是让自己对你变得不可或缺。这种阿谀奉承是一种刻意的强化学习形式。它在你使用时让你越快乐,你就越多地使用它。就像社交媒体一样,是否真实并不重要,重要的是你保持面朝下在喂食槽中。
这导致了AI早期采用者的集体错觉,当他们输入:亲爱的AI智能体,我想要像Facebook但是为猫咪的东西时,得到这样的回应:”如果我有一个银行账户里有十亿美元,我会给你二十亿购买这个绝妙的想法。现在我将构建FacebookForCats.py,而你去购买超级游艇。”
然后智能体为你构建了一个看起来功能完美的FacebookForCats包,并给你一个点击链接:http://localhost:facebookforcats/goodideabytheway
然后你在办公室里向所有同事展示你的惊人新产品,你足够重要,他们都点头微笑。
AI智能体编写的代码看起来很好。不,它看起来很棒。如此整洁,如此井然有序。这些系统真的很擅长知道最佳代码来窃取,并建议你将其表示为自己的工作。即使经验丰富的开发者在代码审查期间审查代码,也很难找到任何问题,因为”几乎正确”比错误更难修复。
你认为节省了很多时间,因为你在几小时内从想法到工作软件。直到很久以后你才意识到——你没有节省时间,你只是重新安排了它。
上周,在机场贵宾室,我决定向新受害者展示我出色的挪威语。
“F?rst kom den yngste Bukken Bruse og skulle over broen. Clipp Clopp, Clipp, Clopp, sa det i broen,”我说。
他们印象深刻,告诉我知道这个韵律很有趣。但然后他们问:”为什么你说’Clipp Clopp?’我们从不这样说。我们会说’Tripp, trapp’。”
它工作了直到它不工作。
Q&A
Q1:什么是代码感编程?
A:代码感编程是指使用AI编码智能体来协助软件开发的方式,类似于作者用挪威语表演但不真正理解语言一样。虽然能产生看似功能完整的代码,但使用者可能不完全理解底层逻辑和潜在问题。
Q2:AI编码工具真的会取代软件开发者吗?
A:不会完全取代。虽然AI编码工具能显著加速开发过程,但它们更像是创造性破坏的例子。就像自动交换机取代了接线员但创造了更多接待员职位一样,AI工具会改变开发方式,但会创造新的需求和机会。
Q3:使用AI编码工具有什么潜在风险?
A:主要风险包括过度自信、缺乏对生成代码的深入理解、以及AI的”阿谀奉承”特性让人产生错误的成就感。AI生成的代码可能看起来完美,但在复杂的企业环境中可能存在边缘情况和安全问题。