一点关于AI编程的随笔
刚读了一篇文章(原文链接),说调查了很多开发者,结论是copilot并未提升编码速度balabala。文章写的稀烂数据也是一坨,典型的标题党营销号文章。但正好这个cursor也用了一段时间了有点心得体会,顺手记录一下。
最开始听到ai编程,当然是github的copilot。一方面是因为收费,另一方面就是不想,或者说不敢依赖AI,怕过于依赖ai自己的编程能力得不到提升。这当然没问题,但更深层的原因,其实是恐惧,恐惧AI的生产力,恐惧自己被淘汰。于是干脆当鸵鸟,只要我不去了解问题就不存在。
现在又用上cursor,也只是偶然见到了相关信息,又看着是免费所以干脆试试。用了一段时间,最初的惊喜过去,现在的评价应该算是比较客观的了。在我看来,现在的ai编程,依然是一个生产力工具,还没有到完全取代程序员的地步。你当然可以让它独立完成一个程序,但它很难100%达到你的要求。自然语言的表述力是有限的,即使你描述的再详尽也总会有错漏之处。而一处小小歧义造成的语境污染可能就需要你花费大量的时间和精力去纠正它。而想要去精细化地修改优化,还是需要你本身看得懂代码。如果你的需求只是够用就行,那AI确实能够满足。但商业化,企业化的那种规模庞大,结构严谨,细节丰富的工程项目,全凭AI就力所不逮了。打个比方,AI或许可以独立写个贪吃蛇写个五子棋,但不可能独立写个战神4写个大表哥2。也就是说,完全不懂编程的人,依赖AI所能实现的还是比较有限的。哪些吹嘘ai无所不能的只是营销话术,而程序员集体失业也为时尚早不必过度焦虑。
那程序员怎么用AI呢,其实也没那么高大上,还是像无良甲方那样,让AI不断拿出新的方案直到满意为止。有的人就要说了,不就是当甲方吗,我也会啊,其实还是有区别的。不懂代码提出的需求可能就是“五彩斑斓的黑”,而懂代码的画风可能就是具体到色号了。而且我个人的意见,向AI提需求时一定要尽可能的细化,不要让AI的思考代替你的思考。让AI成为你的笔尺,而不是成为你的脑子。有时一个功能刚写个函数名,他就把后面的内容全部生成好了。这时不要直接用它生成的代码,而是自己一行行写下去,哪怕每一句都有自动生成参与也比直接生成整个函数要好。这个一句句写下去的过程也是你思考和整理的过程,不要为了图方便把它舍弃。而且之后出了问题你也更好定位问题所在,有额外的需求也更容易实现。或许刚开始比较麻烦,但在理清思路后,经过你手一步步形成的代码是比在一坨直接生成的代码上缝缝补补更好维护的,而且写起来爽利的多。还是那句话,使用AI,而不是被AI使用,成为无情的tab工具。
我现在的工作内容是后端开发,写点简单的数据库交互crud。对我来说,AI编程主要是用于处理那些重复死板的工作,那些不用动脑子的工作。比如模型和接口,经常结构大查不差,AI就可以帮我补全一些字段和注释,避免我把一个单词重复敲上许多次。又或者很多功能结构类似的地方,写过一次后AI就能帮你copy过来并自动改改名字改改变量以适配需求。还有就是有些包啊变量啊字段啊方法啊一层层嵌套就会很冗长,常规ide顶多给你补一层还需要前几个字母提示,AI就能一次给你补全了。把这些内容交给AI生成就能节省自己的时间精力,不用处理这些鸡毛蒜皮的小事。至于更大的需求,我对AI的使用就很谨慎了,基本不去要求它独立实现什么功能,就连自动补全多生成几行代码我都要多看两遍检查。还是那句话,是用AI实现你的想法,而不是你用tab去实现AI的想法。要搞清主从关系,这样你才不会被AI训化,能力才能得到提升。
我想起了那个比较经典的话题,就是程序员面试能不能用IDE。嘲讽公司让程序员在白纸上手写代码,或者嘲讽现在的程序员离了ide的自动补全之类就不会写代码。现在的AI编程,确实有点IDE对白纸的降维打击那味了,但对行业的影响也没有传闻那么夸张,至少我现在也只是把AI当一个高级点的自动补全在用。时代在发展,社会在进步,至少在现在,以及未来很长一段时间内,AI都只会是一个提高生产力和工作效率的工具而已。