最近几个月一直在尝试用用agent辅助coding,网上有很大声音说AI要取代人类去编程。或者说,软件工程师成了Yes工程师。总得来看,具体什么情况还是比较模糊的。
1.国内外的agent用了好几个,能力差异还蛮大的。或许每个agent有细分差异吧,我这里也没能力总结出来每家细分在哪里。
2.我当前在开发的项目大概20万行代码。用c#完成。以这个项目为例,当前暂时选择codex。
3.选择codex不是因为它最好,也不是因为它能力最强。仅仅是因为,其他要么已经证明不好使,出错率高;要么使用起来麻烦。当前也只是试到这个agent还能不错的工作。
接下来以codex+deepseek为例。说说具体感受吧。
1.让它查代码中的bug和高风险,只能模糊查出最明显的一些类型。并不能全面且深度排查。
2.让它做3万行的代码迁移工作。几乎完全干不了。
3.明确指出哪些函数块,变量放一块进行明确迁移,该工作可基本完成。某些功能块迁移量大概在2-4千行。它做的虽然不优美,但基本够用,出错率不高。
这一点就很能震惊到我了,因为,和人比起来它速度虽然也不是很快;做的也不是没有瑕疵,甚至没办法自行调整发现问题。但它确是可以做。就这一点,找到一个合适工程师去做,都不是那么简单的。何况,AI是不会累的;而人是会累的。
但是,这里需要注意的是,如果工程师如果本身水平有限,无论你用任何Agent去拆解迁移这些功能块,几乎都无法完成。甚至干的结果并不会很理想。越干越糟糕是更有可能得。
4.让Ai去做一些UI方面的设计和修改工作。AI在这方面几乎是个小能手。你把想法大概描述清楚,形态,颜色,大小等等细节。它基本会做出一些大概还能使用,但并不是非常适当的结果。这点也很厉害了。要知道,很多产品根本不会花钱请人做设计,大多人会感觉够用了。
这一点我最大的感受就是,互联网前端为代表的工程师,应该冲击很大。但同时效率直接拉满。
5.让它参考一些类似功能做一些功能整体搬迁工作,同时涉及ui,数据库,数据结构,逻辑控制等。虽然不足够优美,它基本能做。
这点也有点让我惊喜。这部分代码虽然总数不过两千行左右。但,涉及层面很多。它能够干出结果,这方面水平那就有点相当可以了。
这个功能和上述提到的几万行的拆解和迁移不同。复杂程度和困难点不在同一个点上。
6.让它帮我写一些数学算法。比如,处理一组数据,要求自行找特征点。它干出的结果基本不能用。
然后,我就给他明确提示,这个特征点应该具备那些明确的特点。或者说,使用那些具体数学计算方式去描述和判断。在数次不断具体提示下,效率很高的完成了。结果就是,测试下来,基本能用。
这点说白了,难点还是卡在工程师本身的能力上。如果自己完全不懂,很难与AI形成合力。
但这点又让我非常震惊,它居然能根据你的具体信息和要求生出你大概想要的东西。这可是算法啊,这可是数学啊!我自己写这样一段代码加上测试可能要几个小时,但在它的加持下,几分钟就完成了。
7.我给它一个明确清晰的需求,同时比较复杂。但是数量比较大。大概涉及数万行代码的编辑和修改。它几乎完全不能执行好。
这点反倒让我心态稳了一些,如果这个工作它能做,那他就是一个神仙了。
8.我接着把预期值调低。让它辅助编写涉及数个线程,但在同一个对象下面。但控制起来流程稍微复杂,涉及状态机等。大概涉及代码有一万行。我已经把主要的功能块写出来。就差拼图组合和调用了。结果,它完全做不了。
这点反而让我安心了。因为,我已经把逻辑写的足够清晰了。为了防止它理解错误,我修改数次,一条一条极为明确可理解。而且,需要AI做的只不过是调用而已。说白了也就是几百行的任务。
这部分工作对人来说,拼图调用说简单也简单,理清楚功能块和思路,明确目的。修改,调用,调试,只要工程师能力还可以,一小时内会有结果的。但,工程师如果自己理解不了,那肯定无从下手。
9.然后我把期望值再度降低。也就是我把调用写出来,运行起来。让AI分析运行中的一个小bug,但来来回回干了一个小时也没有结果。最后还得人去修改。
这一点让我感觉,AI并不擅长做一些复杂程度较高的工作。即使这部分工作涉及的代码量其实并不大。核心相关几千行而已,但只要足够复杂,就不能有结果了。我在想,我已经明确到几个具体函数了,更为核心代码也只有数百行,写的要求和提示信息已经非常详细。如果是人去做的话,只要上点心,应该还是会有结果的。
10.我让AI改一些牵扯面比较广,但要求极为简单的工作,它做起来飞快。比如替换,插入,删除,修改等。因为,不涉及任何逻辑判断和交互。相当于复制粘贴删除等操作。
也就是说,ai擅长做简单程度高的工作。即使这部分工作涉及的代码有上万行。对他来说难度一样。
11.开发中,总是会遇到一些自己的疏忽。一些异常不可避免,总得来说,AI可以快速帮助人去检查是不是忘记初始化,复原,等。虽然这部分工作简单,但是工程师自己累的时候,也是会自行忽略的。AI在这个时候反而成了帮助你客服低级错误的小能手。
12.让它帮助我修改驱动模块或者通信协议。那动作也是相当可以。
这时我想起,如果用AI来修改STM32这种套路极为固定的单道程序,那还不是小菜一碟。因为,单片机几乎不存在复杂控制,最多不过是中断嵌套。用哪些硬件端口,初始化什么样子,协议具体什么样子,中间需要做那些具体转化。这些代码本身数量就很小。超过两万行的项目都少,而且大量代码还是写数据处理功能而非对硬件驱动的控制。硬件驱动控制极为固定。所以,这对单片机开发人员来说,是双重影响。不仅让工作带来飞升,也让技术门槛变得没那么高。
13.后来,我用AI单独写一些编译脚本,这个问题不大,但并不是完全没问题。而且会埋一些雷,但比较好解决。
14.用AI去写一些独立功能块,输出输出明确,逻辑不复杂,简单清晰。一步步来。这个是基本能用的。
这一点其实很有用了。因为,开发工作大部分都是这种复杂程度不高,关联性不高的模块编写。甚至很多人的工作都是这样的。真正涉及复杂框架设计和控制的任务其实对于很多人来说,基本从来没干过,即使干,也就一年有那么一两次就不错了。
这点也可以理解。框架性的东西在最初就要设计和搭建好。怎么可能会在后面来回开发呢?通常是修修改改变得更复杂而已。但这部分工作只集中于1个人而已。而且,后续开发的工作,即使复杂程度高,或者比较重要,估计还是这个人去完成。也就是,真正轮到更多工程师的任务,其实真的没那么难了。这点是公司分工决定的。
15.有人说,让AI写贪吃蛇这种游戏。很快完成。我试了,确是很快,也能简单修改内容和需求。但需要只要稍微复杂一些。能完成贪吃蛇修改的agent就很少了。也就是,真的没有那么神。甚至工程师可以用这个方法来判断这个agent编码能力都行。因为贪吃蛇可是有些agent重点学习的一个标杆性展示。
16.有人用它做了一些小程序。比如用户登记系统。财务管理系统等。说是感觉还不错。我自己也试了一下。需要把要求写的很清晰。这些开发工作本身也不是很复杂,只是任务量不小。说白了还是几张表搞来搞去,稍微加个状态机流程。应该说,这都不算是状态机,应该是标记。
同时,如果需求不是很清晰,基本也不会有更好的结果。也就是,复杂程度虽然不高,但需求仍要每一页,内容,功能要清晰。做起来那真的快多了。我想,很多把AI说成神的工程师,这里应该有可能出现。
也就是一个app的编写,一个微信小程序的开发,一个小应用的开发等。ai几乎可以帮你手搓。只需要你把项目经理的要求详细告知ai,然后,去楼下抽根烟回来看结果。
17.我尝试用它给儿子做一个英文单词学习软件。我花了两小时吧,时间太短。能做出来,但效果一般。但如果给我一周,结果大概就有点东西了。从这一点就能感受到,如果逻辑不复杂,只是代码模块的堆叠代码量的堆叠,那AI真的是好帮手。
当然,最终一定需要人去调试,修改。毕竟AI也不可能一点问题不出。
18.ai经常对同一个问题,同一份材料给出不同答案。这点可以理解,毕竟,人都有肯能是这样。想到了多个解决方案说明它也不确定哪个更适合你。
大概就先总结这么多条吧。毕竟,我自己也没完全用好摸透,估计还得一段时间的磨合期才好。
还是归纳一下吧。
1.总得来看,ai非常善于解决具体、简单、明确的要求。
2.不善于分析解决开发复杂,框架性的东西。
3.AI擅长对代码进行简单漏洞查找,分析;代码迁移。但复杂一些又不行了。
4.不同行业影响应该区别很大。但总得来看,效率都有很大提升。
5.AI再厉害,也取决于用它的人本身能力。只不过在工程师本身能力基础上进行效率性的放大。
6.原来编程,需要从语法一点点进入,然后长期增添删改写功能块。现在,几乎跨越式成长,语法学好后,简单写看,然后直接可以用ai编程了。
原来一年培养出来,现在一个月?不确定。但速度肯定很快,只不过经验还不足罢了。
7.有人用ai来分析代码,帮助看代码功能。咋说呢,复杂的分析完你敢信?也不容易看的懂。简单的,分析意义不大。
8.想要做复杂功能,还是得自己想,然后实现。只不过,ai在这个过程中可以一步步帮你。但很难你告诉它,然后它直接一步完成。
夜雨聆风