令软件开发人员夜不能寐的事情比比皆是。如今,他们最关心的问题不再是如何用自己喜欢的语言(C、C++、Erlang、Java 等)表达最新的算法,而是人工智能(AI)。
本文中,我们将介绍AI编写代码的过程,并回答这个问题:AI会取代程序员吗?
什么是AI代码生成?
近年来,生成式AI的应用呈爆炸式增长,这主要因为现在有足够的计算能力来运行深度学习算法,而且训练机器学习模型所需的海量数据也在增加。
AI代码生成是指使用生成式AI和机器学习编写计算机代码的过程。
生成式AI编码工具正在改变软件开发过程,但这种进步也带来了不确定性。通过AI编写代码,对软件开发人员到底意味着什么?
AI编写代码的未来
生成式AI的潜力已初露端倪。AI正在改变各行各业,并有望加速创新。OpenAI最近进行的一项研究估计,生成式AI工具可能会影响47%的任务,从而大大加快软件开发的过程。
在埃文斯数据公司(Evans Data Corp)进行的一项调查中,550名软件开发人员被问及他们职业生涯中最担心的问题。其中,29%的人担心:“我和我的开发工作被AI所取代”。
美国能源部橡树岭国家实验室(U.S. Department of Energy's Oak Ridge National Laboratory)的一个研究小组对此表示赞同。到2040年,机器学习和自然语言处理技术将非常先进,能够编写更好的软件代码,而且它们会比最好的人类开发人员写得更快。
牛津大学的“未来就业”(The Future of Employment)研究警告说,随着机器学习的发展,软件工程师可能会变得计算机化,软件设计选择将通过算法进行优化。
软件开发,特别是在安全关键型行业,需要确保高质量的代码,以满足功能要求。
因此,如果AI正在开发代码,该代码应该是没有错误和问题的。这也包括软件测试中的AI,因为它能够“以人类难以企及的可靠性”检测编码错误。
如果您正在用AI编写代码,请务必使用静态代码分析器验证代码是否安全、可靠。
AI编写代码可能吗?
AI可以编写代码。
早在2015年,Andrej Karpathy 就运行了一个使用递归神经网络(Recurrent Neural Networks,RNN)生成代码的项目。他获取了GitHub的Linux存储库(所有源文件和头文件),将其组合成一个巨大的文档(超过400 MB的C代码),并用这些代码训练RNN。
以下是它产生的结果:
/* * If this error is set, we will need anything right after that BSD. */ static void action_new_function(struct s_stat_info *wb) { unsigned long flags; int lel_idx_bit = e->edd, *sys & ~((unsigned long) *FIRST_COMPAT); buf[0] = 0xFFFFFFFF & (bit < < 4); min(inc, slist- >bytes); printk(KERN_WARNING "Memory allocated %02x/%02x, " "original MLL insteadn"), min(min(multi_run - s->len, max) * num_data_in), frame_pos, sz + first_seg); div_u64_w(val, inb_p); spin_unlock(&disk->queue_lock); mutex_unlock(&s->sock->mutex); mutex_unlock(&func->mutex); return disassemble(info->pending_bh); } static void num_serial_settings(struct tty_struct *tty) { if (tty == tty) disable_single_st_p(dev); pci_disable_spool(port); return 0; } static void do_command(struct seq_file *m, void *v) { int column = 32 < < (cmd[2] & 0x80); if (state) cmd = (int)(int_state ^ (in_8(&ch- >ch_flags) & Cmd) ? 2 : 1); else seq = 1; for (i = 0; i < 16; i++) { if (k & (1 < < 1)) pipe = (in_use & UMXTHREAD_UNCCA) + ((count & 0x00000000fffffff8) & 0x000000f) < < 8; if (count == 0) sub(pid, ppc_md.kexec_handle, 0x20000000); pipe_set_bytes(i, 0); } /* Free our user pages pointer to place camera if all dash */ subsystem_info = &of_changes[PAGE_SIZE]; rek_controls(offset, idx, &soffset); /* Now we want to deliberately put it to device */ control_check_polarity(&context, val, 0); for (i = 0; i < COUNTER; i++) seq_puts(s, "policy "); }
AI在一夜之间就生成了代码,包括函数和函数声明。它有参数、变量、循环和正确的缩进。括号也是完成的。甚至还有注释。
但是,AI生成的代码存在语法错误。它没有跟踪变量名称。有时,变量被声明但从未使用过。还有一些时候,变量被使用了,但未定义。代码示例中的第二个函数比较了tty == tty。
生成式AI会取代程序员吗?
AI不会取代程序员。但AI已经在帮助开发人员编写代码。像ChatGPT、Github、CoPilot和OpenAI Codex这样的AI驱动的编码助手都是可以使用的工具,可以帮助嵌入式开发人员更快地编写出更好的代码。AI代码生成器现在可以快速生成高质量的代码片段,识别问题和缺陷,并对代码片段提出改进建议。当然,AI需要时间才能创建跨越几行实际的、具有生产价值的代码,而这些代码的跨度不会超过几行。
AI在不久的将来如何影响软件开发?以下是一些可能的趋势。
▎AI将不断进步
它将有效地实现任务自动化,帮助开发人员了解他们的选择。另外,它将让人类决定如何在AI无法理解的情况下进行优化。
▎AI将成为编码伙伴
软件开发人员将使用AI作为编码伙伴来编写更好的软件。这种情况如今已经出现,而且随着AI学会一次编写多行代码,这种情况将继续普及。开发人员将在集成开发环境中加入AI配对程序员工具。与人类配对编程类似,AI工具将根据提示执行编码任务,然后开发人员将审查代码。过去,这一过程需要耗费更多的人力,但AI工具可以比人类开发人员更快地完成SDLC的某些部分,从而让开发人员能够专注于更复杂的任务。
▎但程序员依然重要
程序员的真正价值不在于知道如何构建,而在于知道要构建什么。
AI还需要更长的时间才能学会如何解释每个功能的商业价值,并向您建议首先开发哪些功能。人类程序员的作用始终存在。
如果AI编写出可靠的代码会怎样?
这是一个很大的假设。大多数人都写不出可靠的代码。而AI只是一种分析大量人类编写的代码的应用程序。因此,AI不太可能写出可靠的代码。
大多数程序员都同意这一点。在CodeSignal最近的一项调查中,全球1,000名开发人员被问及他们对AI编码助手工具的使用情况。虽然81%的开发人员表示他们使用了AI驱动的编码助手,但55%的受访软件工程师表示,他们对AI生成代码的质量感到担忧。
因此,AI并不是提高代码质量的答案。
如何提高代码质量?
您现在就可以提高代码质量,但不是通过AI取代程序员,而是利用静态代码分析工具。
静态代码分析工具可以确保程序员编写的代码符合编码规则,并能够扫描代码,找出潜在的错误和安全漏洞。它还能发现在代码审查和软件测试中经常被忽略的错误,从而提高代码和软件的整体质量。
提高代码质量最简单的方法之一,就是使用静态代码分析工具。
Perforce静态代码分析工具Helix QAC和Klocwork,因提供其他工具所无法提供的准确诊断而备受推崇。使用Helix QAC和Klocwork,您将收到按风险严重程度确定优先级的编码问题诊断,以及有关如何修复代码的建议,帮助您确保代码合规,提高代码效率和质量。
- END -
文章来源:https://bit.ly/3V0921H
作者简介:
Stuart Foster,Klocwork 和 Helix QAC 产品经理,Perforce
Stuart Foster在移动和软件开发方面拥有超过 17 年的经验。他负责管理消费者应用和企业软件的产品开发。目前,他负责管理 Perforce 市场领先的代码质量管理解决方案 Klocwork 和 Helix QAC。他相信开发适合客户业务需求的产品、特性和功能,并帮助开发人员生成安全、可靠和无缺陷的代码。Stuart 拥有卡尔顿大学的信息技术、交互式多媒体和设计学士学位,以及阿冈昆应用艺术与技术学院的多媒体设计高级文凭。
审核编辑 黄宇
-
AI
+关注
关注
87文章
30098浏览量
268372 -
代码
+关注
关注
30文章
4742浏览量
68333 -
机器学习
+关注
关注
66文章
8375浏览量
132398 -
代码分析
+关注
关注
0文章
5浏览量
5640
发布评论请先 登录
相关推荐
评论