今年1月的时候,GitClear发布了一篇名为《Coding on Copilot – 2023 Data Shows Downward Pressure on Code Quality》的报告,从代码质量的角度分析了过去几年之间,AI辅助编程对代码的影响,发现随着AI辅助编程的使用,代码的数量在上升,代码的质量在下降。然后这几天InfoQ编辑转载的时候,标题就变成了《GitHub谎报了Copilot的统计数据!两年了,我们还是没办法证明AI编程助手能提高代码质量》。
过去两年,我自己也在使用Github Copilot,整体感受和上面的结论是一致的。AI辅助编程能很好地解决基本的常见的知识检索及合理应用的问题,极大地提高了初级知识的学习效率,对于上手不太熟悉的领域非常有帮助,比如可以基本无障碍地直接使用任何编程语言去编写程序而不需要前置学习,这对提高下限的效果比较显著。而AI辅助编程对上限的提高就很有限,往往受限于使用者自身的水平 ,问不出高水平的问题,或者问的问题根本就不在点上,那Copilot其实也无法给出好的回答;然后,当你真正问了个高水平的问题,这个问题的水平高到业界没有多少现成的资料,那AI其实也给不出多好的回答(因为超过AI的认知边界了),这时候它就只能帮你拓展思路,高水平的答案还是需要自己去归纳、总结、发现。总而言之,不要期望Copolit能提高程序员的自身素养。
一般而言, 整个编程过程涉及到这样几个步骤:定义问题、找到方案、编写代码、测试验证与整合。这里的整合包括系统之间的集成及新功能与现有系统的有机集成两个层面。现在的AI辅助编程,对于明确问题之后的“找方案”和“编写代码”两个环节有比较大的帮助。但真正对代码乃至整个项目的质量产生关键影响的,是第一阶段的问题的定义以及最后的整合两个环节,而并不是“编写代码”。所以,对Copolit能提高项目质量的期望,也是不切实际的。
Copolit能提高的,是工作效率。通过效率的提高,它会放大使用者自身的优点和缺点。使用者原本就不在意代码质量和可维护性的,使用AI辅助编程也并不会给这位使用者带来这方向的改进。反而由于产出代码的效率更高,会促使此类使用者产出更多的低质量的代码。这也是从GitClear数据统计中可以印证的。
GitClear的统计数据背后,其实还隐含着这样一个事实:在统计范围内的那些项目,AI Copolit对产出的速度的贡献大于对产出的质量的贡献。至于说,到底是参与这个项目的程序员的自身素养不足,不关注质量,还是项目本身就要求产出效率而非产出质量,就不得而知了。但是无论如何,都不应该把产出低质量代码的责任归于Copilot,它只是一个工具。工具用得好坏,取决于用的人,而不是工具本身。
在Copolit诞生之初,就有人在畅想一个不需要程序员的美好未来。在那个未来,产品、业务方、甚至CEO本人,只需要口述需求,就有一个7*24小时在线的AI程序员把这些需求转化成程序。只有你想不到或者说不清,没有程序员做不出。而且这个程序员不会抱怨,不会疲劳,甚至不要工资,只要一点点电费。
我也非常期待这样的一天,希望能在我有生之年到来。