程序员分享删除和重写 AI 生成代码的学习经验,强调深入理解代码的价值超过快速交付。
在我们深入之前的快速提示——我知道最近我偏离了 iOS/Swift 系列。我只是有很多想法需要先理清思路。我承诺这个系列将在下一篇文章回归。好吧。现在。开讲故事。
我想给你们讲述我花费一个下午删除代码的经历,意外地学到了比整整一个月生成代码所学更多的东西。
这不是我预期要讲的故事。我进去时以为做的是快速清理。我出来时已经成了另一个人。略显谦虚,深深被咖啡因唤醒,一个文件中减少了 200 行 Swift 代码,而这个文件现在竟然运行得更好了。让我解释一下。
几周前,我在一个项目上快速推进。快得令人尴尬。生成、测试、接受、继续。生成、测试、接受、继续。AI 生成的代码能编译并做我要求的事情,我就是...让它这样了。没有仔细阅读。没有提出问题。只是跟着感觉一个接一个地推进功能,就像一个肯定不会之后后悔的人。
读者,我之后确实后悔了。
不是因为它坏了。这才是真正令人沮丧的部分——代码是好的。它运行。功能工作。没有人抱怨。但每次打开那个文件,我都会感到一种无法名状的低级焦虑,就像走进一个你通过把所有东西塞进壁橱里清理过的房间。技术上整洁。精神上错误。
所以有个下午我就...开始删除东西。没有计划。只有我、一个删除键和越来越强烈的感觉,我接受了很多我根本不理解的代码。
这让我吃惊。我不容易被代码吓到。但我一直在犹豫,"好吧,但如果这是把一切联系在一起的东西呢,而我只是还不知道。"
那种感觉?这正是我自己写代码时从不会有的感觉。当你写东西时,你心里有地图。你记得那晚你添加了那个防御性的 nil 检查,因为什么东西在测试中爆炸了。你记得为什么函数是这样结构的,因为你重新结构了两次。你有上下文。
对于生成的代码,代码到了但上下文没有。AI 做了决定——其中一些是真的很好的决定——我接受了它们而没有理解为什么这些是决定。所以现在六周后我站在这里,看着自己的项目就像看陌生人的项目,试图弄清楚哪些部分是承重的,哪些只是装饰。
这和听起来一样令人不适。
在删除任何东西之前,我开始问自己:好的,如果我删除这个,我认为什么会坏?不是理论上什么可能会坏。我认为会发生什么,具体来说。
我的一些预测是正确的,删除那东西证实了它是冗余的。好。简单。
我的一些预测错得很有意思。有一个函数我绝对确定没有做任何有用的事——看起来像模型只是出于习惯添加它——当我删除它时,一个我半忘记的流中的一个非常特定的边缘情况悄悄瓦解了。结果函数是处理一个 nil,它只能在我没有立即记起构建的特定用户操作序列下出现。
那个函数教了我一些我不知道我不知道的东西。这是最令人烦恼的学习类型,但也是最有用的。
200 行消失了。其中一些真的是冗余的——重复的逻辑、对实际上不可能发生的情况的防御性检查、一个恰好调用一次的辅助函数,它可以只是它被使用的地方的一行。这种东西是由某件事很彻底而添加的,不是由知道你的具体项目实际需要什么的东西添加的。
其中一些我从头重写了。不是因为原始的是错的。因为重写它意味着我最终拥有了它。管理的代码和你理解的代码之间有区别,我需要在相信自己能正确处理它之前关闭那个差距。
其中一些我保持原样。因为在我试图删除它后看着空白区域让我意识到它在做我实际需要的事情,我只是没有足够关注来欣赏它。实际上,那些是最有用的删除——我试图摆脱某些东西而项目说"不,你需要那个,让我向你展示为什么"的那些。
这是没人告诉你关于快速生成代码的事:速度是真实的,但它有一个代价,在你交付功能的那天不会出现。它稍后出现。当你需要改变什么、调试奇怪的东西、向别人解释事情,或只是六周后打开文件并感到满壁橱垃圾的焦虑时出现。
每一行你没有理解就接受的代码都是一笔小贷款。利息悄悄复利,直到你需要再次接触这件事。
删除代码——实际上仔细阅读它到足以对它是否应该存在有意见——是偿还那笔债务的最奇怪和最有效的方式之一。你不能在没有充分理解的情况下删除某些东西来为或反对它辩论。这意味着到你完成时,你被迫实际学习了你认为已经知道的代码库。
我进来做清理。我得到了教育。有点违背我的意愿,但还是。
我没有停止使用 AI 生成代码。那会是戏剧性的过度反应,而且我有截止日期。但我开始把接受的建议当作我选择承担的债务,而不是我写的代码。因为我需要再次接触它的那一刻,我需要理解它——如果我从不仔细读它,那种理解就不存在,仅仅因为我在生成时在房间里。
所以现在,我偶尔打开我快速生成且之后没有仔细看过的文件。我读它就像它是别人的代码。我尝试删除东西。我对我认为会坏的东西做预测,然后看我是否正确。
有时我是。有时我错得正好教会我什么。
不管怎样,我出来时对代码库的了解比我进去时更好。
这真的比我为生成它的下午所能说的更多。
AI 工具用于帮助语法和结构。
某些评论只对登录访问者可见。登录以查看所有评论。
如需进一步操作,你可以考虑屏蔽此人和/或举报滥用。