2026年11月08日 欢迎访问 读到
首页 / 小说书库 / AI辅助编程实战 / 正文
点评
第1章 AI打开开发者的新世界

2011—2016年,Andrej Karpathy不仅在斯坦福大学深耕密集神经网络架构和像素处理计算机视觉的研究,同时还在Google做兼职工作。在Google期间,他持续优化YouTube视频系统,并成功开发出一套先进的特征学习系统。随后,他选择加入OpenAI,成为其创始成员之一。紧接着,他加入特斯拉担任人工智能高级总监,领导团队成功构建了自动驾驶系统。

Karpathy无疑是世界上顶尖的开发者之一,不仅如此,他还擅长文字创作,其推特账户上拥有近80万粉丝。当ChatGPT这一创新技术问世时,他发表了一条引人注目的推文:“最热门的新型编程语言是英语”(The hottest new programming language is English)。他的话绝非戏言,这既是对编程艺术的深情颂歌,也是对未来的瑰丽憧憬。展望未来,只须通过自然语言输入简单的提示,就能轻松调用任意编程语言的代码。你的计算机仿佛被嵌入了一个精通双语的“精灵”,它能够随时将你的英语指令转换为精确的代码命令,实现编程愿景。

随后,他的另一条推文道出了许多开发者的心声:“Copilot极大地提升了我的编程效率,让我不想回到过去‘手动编程’的日子。尽管我还在不断熟悉和学习如何充分利用Copilot的功能,但它已经为我自动生成了大约80%的代码,且准确率高达80%。我感觉自己不是在编程,而更像是在与Copilot进行高效的协作,我只需要提供必要的提示和进行精细的编辑即可。”

Karpathy向微软的GitHub Copilot致敬,这一创新举措标志着AI辅助编程新时代的到来。紧接着,诸多类似工具如雨后春笋迅速涌现,创新的步伐之快令人惊叹。

对于广大开发者,眼前呈现的是一片生机勃勃、充满活力的编程丛林。这片丛林中的AI工具为我们打开了一个怎样的新世界?它们有哪些闪光点让人惊艳,又有哪些挑战需要我们正视?你该如何在这片丛林中披荆斩棘,成为一名游刃有余的AI辅助编程专家?

本书将为你揭晓这些疑问的答案,甚至更多。我们将深入探讨如何利用这些智能工具加速编程过程,使代码编写更加高效、智能且充满乐趣。现在就让我们挽起袖子,共同踏上这场充满挑战与机遇的AI辅助编程之旅吧!

编程语言发展的核心驱动力之一是抽象化,这是一种独特的方法,它极大地简化了开发者与系统之间的交互。抽象化通过后台处理了烦琐的细节,使开发者能够更专注于核心任务的实现。这一进步一直是推动技术创新的关键力量,为互联网、云计算、移动互联网及AI等领域的突破性发展提供了坚实的支持。

图1-1直观地展示了近几十年来抽象化概念在编程语言中的演变过程。

图1-1 近几十年来抽象化概念在编程语言中的演变过程

我们从20世纪40年代开始详细回顾一下。

从机器语言到汇编语言

在计算机时代的早期,开发者不得不与0和1搏斗,让机器按照他们的意志运转。后来,汇编语言出现了。它提供了字母与数字指令,使编程变得更容易,也显著降低了出错的可能性。

高级编程语言

20世纪50年代,Fortran和COBOL这两种高级编程语言诞生,它们允许程序员通过DISPLAY、READ、WRITE和IF/THEN/ELSE等简单的英语指令编写代码。编译器则负责将这些代码转换成计算机能够理解的二进制代码(0和1)。同时,这些高级编程语言使得没有技术背景的人也能较好地阅读代码,理解程序的工作流程。高级编程语言的出现无疑极大地推动了计算机革命的进程。

面向过程编程语言

随着C和Pascal等编程语言的兴起,面向过程编程的概念开始普及。这些编程语言通过引入函数的概念,将复杂的编程任务分解为一系列整齐的小模块。这种抽象化的编程方式不仅提高了代码的可重用性和可维护性,还使得管理庞大的软件项目变得得心应手。

面向对象编程语言

在面向对象编程领域,C++和Java等编程语言脱颖而出。这些编程语言引入了全新的抽象化,允许开发者使用类和对象来模拟现实世界中的实体,并封装数据和行为。面向对象编程极大地促进了软件开发的模块化,使得解决问题变得更加直观。

脚本语言

Python、Ruby和JavaScript等脚本语言的出现,为编程领域带来了新的活力。它们通过抽象许多与编程相关的底层任务,提供了大量的库和内置数据结构,使得常见的编程任务变得更为简单。这些编程语言极大地减少了完成任务所需的代码量。

机器学习和AI

随着机器学习和AI技术的快速发展,TensorFlow、PyTorch等框架和专业库应运而生。这些框架和库通过抽象出许多复杂的数学编程细节,使得开发人员能够专注于模型架构的设计和训练过程的优化。

最新的抽象化里程碑无疑是AI辅助编程。GPT-4和其他大语言模型(Large Language Model,LLM)如同智能助手,随时准备在开发者的命令下生成代码。

让我们来看一个简单的例子。在这个例子中,我们使用具有强大编程能力的ChatGPT。我们将使用一段提示语来引导ChatGPT完成特定的编程任务。假设我们给出的提示如下。

提示:用Python编写一个程序,检查给定的整数是偶数还是奇数,并打印结果。

图1-2展示了来自ChatGPT的响应。

图1-2 当ChatGPT被要求创建代码时,它的回复不仅包括代码,还包括代码注释

我们成功地获取了ChatGPT生成的代码,这段代码不仅包含了实用的代码注释,还附带了关于程序运行机制的详细说明。只需要单击图1-2右上角的“Copy code”(复制代码)按钮,即可将这段代码轻松粘贴到集成开发环境(Integrated Development Environment,IDE)中,并加以运行和测试。

在深入剖析AI辅助编程工具的工作原理之前,我们首先需要对其基石——生成式AI(Generative AI,或称为GenAI)有一个基本的了解。生成式AI作为人工智能领域的一个重要分支,专注于生成创新且独一无二的内容。为了更直观地理解这一概念,请参考图1-3,它清晰地描绘了AI系统中各部分之间的关系。

图1-3 以生成式AI和LLM为中心,用嵌套子集的形式表示不同类型的人工智能

人工智能是一个十分广泛的领域,它涵盖了所有能够模拟人类智能以完成任务的系统。在这一宏大领域中,机器学习(Machine Learning,ML)占据了至关重要的位置。机器学习系统通过对海量数据进行分析来提炼深层次的见解。它通常以复杂的算法为基础,不需要硬编码即可进行预测或决策。

深度学习(Deep Learning,DL)作为一种特殊的机器学习技术,通过构建多层次的神经网络(这正是“深度”一词的来源),实现了对数据更深层次的抽象和表示。深度学习在图像识别、语音识别等领域取得了令人瞩目的成果。

生成式AI通过学习和分析训练数据,能够创造出反映这些数据特征的新数据。

生成式AI中最引人注目的则是LLM,如GPT-4、Gemini、Claude和LLaMA 2等。这些被称为“基础模型”的强大工具,基于先进的算法和海量数据的训练,能够生成与人类语言高度相似的文本。

然而,生成式AI并不仅限于LLM。生成式AI还具备多模态能力,即能够生成图像、音频和视频等多种类型的数据。

第2章将深入剖析生成式AI的工作原理和机制。在此之前,我们先了解一下AI辅助编程工具的优缺点。

AI辅助编程工具旨在为开发者赋能,使他们能够摆脱单调任务和复杂代码细节的束缚,从而专注于解决高级问题和实现创新。GitHub选择“Copilot”(副驾驶)这一术语,恰如其分地描绘了这些工具的角色——它们如同驾驶舱中值得信赖的伙伴,为复杂且枯燥的编程工作提供导航,让开发者能够专注于真正重要的事情。

在接下来的内容中,我们将深入探讨这些强大的AI辅助编程工具的独特优势以及它们在现实世界中的广泛应用。

开发者时常会陷入数字迷宫,追踪棘手的软件错误或解密复杂的代码逻辑。面对困境,他们通常会求助于Google或Stack Overflow,输入代码片段进行搜索,然后迅速返回IDE中继续工作。

但有些时候,搜索过程仿佛一场漫长的马拉松。Stack Overflow上的讨论可能令人一头雾水,即使不断搜索,似乎也找不到正确的答案。然而,偶尔会有某个讨论给予启发,于是深入研究相关主题,甚至可能在YouTube上观看教学视频。经过30多分钟的苦苦思索,最终找到解决方案。

所有开发者都经历过这种挑战。事实上,Stack Overflow在2022年的《开发者调查报告》(涵盖70000多名开发者)中强调了搜索答案的挫败感。该报告显示,62%的受访者在搜索答案上每天花费超过30分钟,而25%的受访者更是超过1小时。对于一个拥有50名成员的开发团队,每周因搜索答案/解决方案而损失的时间达到333~651小时。

现在,如果有一种方法可以穿越耗时的搜索,迅速找到解决方案,那会怎样呢?我们的闪亮算法骑士——AI辅助编程登场。微软的研究证明:90%以上使用GitHub Copilot的开发者能以更快的速度完成任务。

为了验证这一点,微软进行了一次编程实验。他们招募了95名专业开发者,并将这些开发者分为两组,要求他们用JavaScript开发HTTP服务器。结果显示,使用GitHub Copilot的开发者完成任务的速度比不使用该工具的开发者快55%。

不仅是微软,麦肯锡公司也进行了一项研究。他们调查了来自美洲和亚洲的40多名开发者,这些开发者的经验和背景各不相同。在数周内,他们完成了3项常见的软件任务——代码生成、重构和文档编写。

研究结果表明,在保持文档和代码的整洁性方面,AI辅助编程工具表现出色,所需时间减少了近一半。而在编写新代码和重构代码方面,使用AI辅助编程工具所花费的时间与传统方法几乎相同。然而,对于特别复杂的任务,AI辅助编程工具的优势并不明显,仅缩短了不到10%的时间。

有趣的是,研究还发现,尽管AI辅助编程工具缩短了完成任务的时间,但并未对代码的整体质量(如错误率、可读性和可维护性)产生负面影响。实际上,随着开发者逐渐熟悉并使用这些工具,代码质量还得到了边际提升。

麦肯锡公司的研究为我们揭示了AI辅助编程的潜力,并为未来开发提供了一些宝贵的启示。

优化日常任务流程

AI辅助编程工具极大地简化了琐碎任务的处理,如自动填充代码、实时提供代码建议以及自动生成代码文档。通过这些方式,它们为开发者释放了宝贵的时间,使他们能够更专注于解决复杂的业务问题,并加速软件功能的部署。

激发代码创作的灵感

面对空白的代码编辑器,许多开发者可能会感到无从下手。然而,借助AI生成工具,开发者可以在IDE中,或仅仅通过简单的提示,迅速获得有价值的代码建议,从而激发创造灵感,迅速进入高效的编程状态。

高效调整与优化现有代码

通过智能提示,开发者能够更迅速地对现有代码进行调整和优化。他们可以轻松地从在线库中检索代码片段,输入提示框中,并基于特定标准请求AI进行迭代性调整。

增强对新挑战的适应力

当面对新的编程环境或编程语言时,AI辅助编程工具就像一位经验丰富的导师,可以帮助开发者快速熟悉并掌握新知识。它们能够清晰地解释新概念,分析各种代码库,并提供全面的框架使用指南。

整合多种工具以提升效率

研究表明,结合使用多种工具能够显著提升工作效率。例如,开发者可以使用一款工具进行代码提示或聊天交流,同时将另一款工具作为代码库的一部分,由其提供智能自动完成选项和建议。这些工具在协作中展现出惊人的能力。在代码重构过程中,第一款工具因其灵活的对话特性,在处理查询时表现出色;而第二款工具则在生成新代码方面表现高效,并能与IDE无缝对接。当这些工具协同工作时,开发者观察到的时间效率提升高达1.5~2.5倍。

通过ChatGPT,你可以就不同场景下的开发活动寻求建议。下面是一个实用的提示。

提示:为了在编程时最大限度地减少搜索时间并提升工作效率,请提供详细的技巧和最佳实践。要求涵盖与代码组织、文档、工具和思维方式相关的策略。

ChatGPT的响应如图1-4所示。

图1-4 ChatGPT给出的有关编程任务的建议

与IDE的无缝集成对于AI辅助编程具有举足轻重的作用。这种集成确保了开发流程的流畅进行,避免了掌握新平台所带来的额外学习负担,从而节约宝贵的时间,使开发者能将更多精力专注于编写代码,减少在不同平台或工具之间切换的次数,显著降低操作的摩擦,让开发体验变得更加流畅。

实时反馈机制更是与IDE集成的亮点之一。当开发者编写或修改代码时,集成工具能够即时指出潜在错误,提供修正建议或推荐更优的编程方法。这种即时反馈如同一位时刻陪伴在侧的友好教练,引导开发者编写出更为简洁、高效的代码,而无须进行烦琐的人工审核或外部检查。

此外,AI辅助系统还能通过深入洞察更广泛的编程领域来优化IDE的使用体验。它能够理解变量类型、方法签名及项目结构的深层逻辑,从而为开发者提供与项目高度相关的代码建议。这凸显了AI在编程辅助中不仅具有强大的代码生成作用,更在于其能够深入理解并优化整个开发过程。

表1-1展示了一些流行的AI辅助编程工具及其支持的IDE。

表1-1 一些流行的AI辅助编程工具及其支持的IDE

根据微软的一项深入调查研究,高达88%的GitHub Copilot用户反馈,在使用此工具后,他们的挫败感显著降低,同时注意力也更为集中。其中一个尤为显著的原因是,GitHub Copilot帮助他们在IDE中减少了搜索时间,这极大地促进了开发者持续处于高效的“心流”状态。

在编程领域,一些先进的AI辅助编程工具被精心打造,旨在与特定的开发环境无缝对接。这些工具不仅具备强大的适应性,而且能根据开发者的微调,深入理解项目的内部库、API(Application Programming Interface,应用程序接口)、最佳实践及架构蓝图。通过这种方式,它们提供的代码建议不仅在技术上无可挑剔,而且能精准满足项目的独特需求。

定制功能进一步确保了生成的代码建议与组织既定的编程标准、质量指标和安全协议高度一致。在追求高质量代码的道路上,这样的工具能够帮助团队避免使用过时或不被推荐的代码片段,从而保障代码库的鲁棒性和可维护性。

此外,对于新加入开发团队的成员,这些能够适配代码库的智能工具更是一大福音。传统上,新人需要花费大量时间适应新的代码库,包括浏览代码、查阅文档以及学习编程规范。然而,借助AI辅助编程工具,这一过程将大幅缩短。

代码完整性是高质量软件开发的基石,它体现了源代码执行预期功能时的稳定性与可信度。它如同一面精密的透镜,透过它可以审视代码的完整性、准确性、一致性和安全性。任何瑕疵都可能为系统埋下安全隐患,导致潜在的漏洞和数据泄漏风险。

影响代码完整性的关键因素众多,包括但不限于代码的精确性、完整性、统一性、安全规定及维护的难易程度。为了提高代码的完整性,开发者可以采用多种方法,如执行单元测试、集成测试、进行同行代码审查、进行静态代码分析和严格的安全评估等。

随着技术的不断进步,越来越多的AI辅助编程工具涌现,它们正致力于强化代码完整性。这些工具能深入剖析代码的每个细节,生成精准且富有洞察力的单元测试和边缘案例。

部分先进工具还配备了“修复”建议功能,这些建议均经过严格审核,确保在提供给开发者之前不会引入新的问题。开发者可以在IDE中直接查看和采纳这些建议。

此外,AI辅助编程工具的一大优势在于它们能够快速分析拉取请求(Pull Request,PR),简洁明了地总结代码变更。它们还能自动生成发布说明,为记录软件版本的演进提供便利。

虽然文档常被低估,但其在软件开发过程中扮演着至关重要的角色。它是确保代码库具备高可读性、可维护性和可扩展性的关键因素,尤其在当前团队协作频繁、项目复杂度不断提升的背景下。然而,编写和更新文档往往被视为一项烦琐且耗时的任务,有时甚至被置于次要地位,这在一定程度上削弱了文档应有的价值。

幸运的是,随着人工智能技术的快速发展,AI辅助编程工具为文档编写带来了革命性的改变。这些智能工具如同数字抄写员,能够在极短的时间内高效生成大量文档,且内容质量上乘,表达清晰。之所以能实现这一点,是它们依赖于LLM这一核心技术。LLM在处理自然语言方面展现出卓越的能力。

2011年,Marc Andreessen在《华尔街日报》上发表了颇具远见的卓识——“软件正在吞噬世界”。

作为一名杰出的企业家和风险投资家,Andreessen以敏锐的洞察力著称,他总能在技术的浪潮中捕捉到变革的脉搏,创造出一个又一个商业传奇。他的这篇文章无疑是技术史上的一个里程碑。

Andreessen强调,随着基础设施的日臻成熟,全球产业正站在一个变革的临界点。AWS等云平台的崛起与宽带互联网的普及,如同打开了潘多拉的盒子,彻底改变了行业的游戏规则。它们不仅打破了服务器成本和网络技术的传统壁垒,更为像Uber、Netflix及众多社交媒体平台这样的创新者提供了改写行业规则的舞台。

从Andreessen这篇深具洞察力的文章中,我们不难窥见,创新的车轮正在飞速转动,而它所带来的颠覆性力量,对大型企业来说尤为显著。许多传统巨头依然依赖于昂贵且僵化的传统系统,实现现代化转型无异于一场风险重重的博弈。企业的层级结构往往成为决策的绊脚石,庞大的体量则让变革之路更加崎岖。此外,员工可能难以与日新月异的技术创新保持同步。

IBM敏锐地将这一挑战作为契机,倾注大量资源研发出AI辅助编程工具。2023年10月,IBM正式推出Watsonx Code Assistant for Z,该系统能在大型机系统上将COBOL代码优雅地翻译成Java代码,并输出高质量的面向对象代码。

Watsonx.ai模型作为IBM的得意之作,具备对115种编程语言的深刻理解能力,背后依托的则是1.5万亿个token(分词)的强大支撑。该模型拥有约200亿个参数,无疑是当前代码开发领域的一颗璀璨明珠。

然而,将拥有数千亿行代码的COBOL系统迁移到现代语言绝非易事。像COBOL这种拥有几十年历史的编程语言,往往缺乏或几乎没有文档支持。若转换处理不当,后果将不堪设想。要知道,世界上大部分信用卡处理是通过大型机完成的。

遗憾的是,失败的迁移项目屡见不鲜。例如,加利福尼亚州机动车辆管理局就曾投入2.08亿美元,却在数年后不得不终止项目。

大型机项目的高风险性质导致开发者薪酬普遍较高,但企业在招聘方面仍面临重重挑战。年轻的开发者往往接受的是现代编程语言的培训,对大型机开发持怀疑态度。同时,众多经验丰富的大型机开发者即将步入退休年龄。

IBM深知,要应对大型机开发的严峻挑战,AI的介入不可或缺。尽管传统的代码转换器或翻译器已存在多年,但它们往往只是简单地将COBOL的“面条式代码”转换为Java的“面条式代码”,并未带来实质性改进。因此,这些Java代码仍需要开发者做大量的润色工作,这也是许多项目步履维艰甚至失败的原因。

但IBM表示,通过运用生成式AI,他们能够显著提升项目成果,提升的效率甚至达到10倍。

其他公司也在积极把握现代化的机遇。GitHub的首席执行官Thomas Dohmke在其帖子中提到:“使用COBOL的主框架仍在运行是一个比我们想象的要严重得多的社会问题。”在接受《财富》杂志采访时,他表示,2023年他听到的关于COBOL的消息比过去30年都要多。他还透露,许多公司都在询问如何在迁移项目中使用GitHub Copilot。

ChatGPT也精通传统编程语言。表1-2列出了常见的传统编程语言。

表1-2 常见的传统编程语言

下面的例子展示了AI辅助编程对传统编程语言的帮助。假设需要处理以下代码片段。

MODULE ComplexModule

  IMPLICIT NONE

  TYPE :: ComplexType

     REAL :: real, imag

  CONTAINS

     OPERATOR(+) (a, b) RESULT(c)

       TYPE(ComplexType), INTENT(IN) :: a, b

       TYPE(ComplexType) :: c

       c%real = a%real + b%real

       c%imag = a%imag + b%imag

     END OPERATOR

  END TYPE ComplexType

END MODULE ComplexModule

你不知道这是什么编程语言,也不知道它是如何工作的。你通过代码不能直观地理解工作流程。

现在,你访问ChatGPT并输入以下内容。

提示:这段代码用什么编程语言编写的?有什么作用?另外,请解释它是如何工作的。

图1-5展示了来自ChatGPT的响应。

图1-5 ChatGPT对用传统编程语言编写的代码的解释

ChatGPT能够精确地辨识所提供的代码片段是用Fortran编程语言编写的。它不仅指出这段代码定义了一个名为ComplexModule的模块,还详尽地解释了该模块中的关键组成部分。具体来说,该模块包含一个名为ComplexType的派生类型,用于表示复数,还包含一个重载的加法运算符“+”,该运算符被设计为处理两个复数之间的加法运算。随后,ChatGPT对这段代码进行了逐步深入的解析。

当我们探讨AI辅助编程工具的潜力和优点时,AI辅助编程工具尚存的不足同样不可忽视。正如任何新兴技术在其初始阶段都会面临挑战一样,即使是革命性的产品,如第一代iPhone,也曾显得稚嫩。AI辅助编程工具同样存在局限性、问题,以及需要克服的障碍。在创新的征途上,总有一些细节需要精心打磨和持续微调。接下来让我们深入探索AI辅助编程工具的一些不足之处。

对于LLM,幻觉是指模型输出的数据看似准确,但实际上并不正确,或者与模型所训练的输入数据不符。幻觉给软件开发带来巨大挑战。它会导致不准确的代码建议,生成误导性文档,并产生错误的测试场景。此外,它还会导致调试效率低下,误导初学者,并有可能削弱开发者对AI工具的信任。

然而,值得欣喜的是,业界在减少幻觉现象方面已取得显著进展。众多学术研究机构致力于深入探究幻觉问题,而人工智能公司也积极采用各种有效策略,如通过基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)来努力减轻这一现象的影响。

但我们必须意识到,鉴于LLM本身的复杂性及其背后庞大的数据基础,要完全消除幻觉现象似乎是一项艰巨而长期的任务。

此外,在使用AI辅助编程工具时,我们观察到某些编程语言的表现更为出色。例如,Python、JavaScript、TypeScript和Go等编程语言,由于在公共资源库中具有广泛的代表性和丰富的数据集,使得AI在学习这些编程语言时能够提供更准确、更强大的建议。

Matthew Butterick拥有开发者、设计师和律师的多重身份背景,对字体设计情有独钟。他的人生轨迹涵盖了写作、字体设计以及文档编辑和排版程序的开发。然而,2022年6月,当他接触到GitHub Copilot时,他并未感受到期待中的喜悦,反而激发他撰写一篇题为“This Copilot is Stupid and Wants to Kill Me”的博客文章来表达他的不满。

Butterick的愤怒并未随着这篇博客文章的发表而平息。他的不满很快升级,最终演变为对微软、GitHub和OpenAI提起的集体诉讼。诉讼的核心争议在于GitHub是否违反服务条款和隐私政策,并可能涉及版权侵犯。

这一法律纠纷凸显了AI辅助编程工具在知识产权领域的模糊地带。鉴于其输出结果往往是海量现有代码的混合体,代码的所有权问题变得尤为复杂。

在关于知识产权的探讨中,普遍认可基于“合理使用”的原则。然而,法律界对于AI生成内容的处理方式并不明确,缺乏具体的指导原则。为了解决这个问题,可能需要依赖法院裁决来明确相关权益。

与此同时,微软已经为GitHub Copilot的用户构建了一道法律屏障。微软承诺,在满足一定条件的情况下,将保护用户免受法律索赔的困扰。

AI辅助编程工具与开源软件方法的结合进一步加剧了法律问题的复杂性。Copyleft许可证,如GNU通用公共许可证(General Public License,GPL)的第2版和第3版,要求任何衍生作品都必须遵循原始代码的许可条款。这一要求旨在促进创新,但同时也给开发者带来了挑战,因为它可能剥夺了他们保护自己的应用程序知识产权的权利,甚至要求他们公开整个代码库的源代码。

AI辅助编程工具由于云端部署的特性,引发了广泛的数据隐私和保密性问题。公司内部如何妥善保护数据?这些数据是否会被用作训练数据?

不同供应商在数据处理上可能有着截然不同的做法,这也导致一些开发者对AI辅助编程工具持谨慎态度,甚至选择完全避免使用它们。

Gridspace公司的联合创始人兼联合工程负责人Anthony Scodary就是其中一位坚定走自己道路的开发者。该公司专注于开发能够处理复杂电话对话的语音机器人,其技术基础涵盖语音识别、语音合成、LLM和对话系统等多个领域。

Gridspace公司并没有选择利用现有的AI辅助编程平台,而是选择了一条独特的道路——自主研发AI辅助编程平台。Gridspace公司的AI辅助编程平台基于Kubernetes集群中的Docker服务,以IDE扩展的形式进行部署,并能针对公司的特定代码库进行微调。Scodary表示:“通过自研的AI辅助编程平台,我们能够避免将自己的知识产权和数据发送给其他公司。同时,这也意味着我们拥有了一个更小、更高效、更符合我们工作风格的模型。”

虽然Gridspace公司的做法并非放之四海而皆准,因为每个组织都有自己的观点和偏好,但在评估AI辅助编程工具时,深入了解其对数据隐私的影响至关重要。

在题为“Security Weaknesses of Copilot Generated Code in GitHub”的研究论文中,Yujia Fu等学者深入探讨了GitHub Copilot在安全方面的隐患。通过对GitHub上435个项目中由AI生成的代码片段进行详尽的审查,他们发现其中有高达35.8%的代码片段存在通用缺陷枚举(Common Weakness Enumeration,CWE)实例。

这些安全问题并非局限于某一特定编程语言,而是跨越了42种不同的CWE类别,呈现出多编程语言错误行为的复杂性。其中,操作系统命令注入、使用不充分的随机值以及异常情况检查或处理不当这3个类别的问题尤为突出。需要注意的是,这些CWE问题中有11个被列入2022年CWE Top 25清单。

然而,这并不意味着AI辅助编程工具本身必然带来巨大的安全风险。事实上,供应商们正在持续努力研究并改进相关防护措施。但无论如何,对于任何代码,保持高度的安全意识都是非常重要的。

AI辅助编程工具所依赖的LLM训练数据,往往存在显著差距,这些差距会直接影响它们在现实应用中的表现与实用性。以下是对这些差距的详细分析。

表征差异

若编程语言或代码库的特定领域在开源项目中缺乏足够的体现或完全未被涉及,则AI模型可能会因此缺乏相应的知识,导致提供的编程建议不够准确。这凸显了训练数据的质量和范围对AI输出质量的重要性。

质量不一致

LLM中的开源代码质量参差不齐,你无法预知下一个项目会是什么质量。优秀的项目与劣质的代码共存,这导致AI辅助编程工具提供的建议质量也呈现出不稳定性。

知识截止日期

LLM的训练数据往往有明确的截止日期,这相当于一个时间快照。当编程语言或代码库发布新版本、更新或被废弃时,模型的知识库可能无法及时反映这些变化,从而带来挑战。

泛化差距

泛化差距即模型在训练数据与未见数据上的表现差异,它是人工智能领域的一个常见问题。根据Rie Johnson和Tong Zhang在论文“Inconsistency, Instability, and Generalization Gap of Deep Neural Network Training”中的研究,缩小这种差距是提高模型性能的关键。

上下文理解

AI虽然可以基于经验提供建议,但如果它没有遇到过与当前场景完全相似的情境,则可能会做出错误的判断。因此,在创建提示时,我们不能仅凭假设,而需要更加细致地考虑上下文环境。

开发者难以牢固掌握人工智能伦理,这可能是由于计算机科学课程或强化训练中通常缺乏对这一关键主题的深入探讨。这种知识上的不足可能导致算法在设计中无意间产生偏差,甚至可能引发数据的滥用。

同样,AI辅助编程工具也面临着偏见问题。这些工具在生成代码时,可能会不自觉地延续其训练数据中已有的偏见。例如,当要求生成人名列表时,它们可能会倾向于推荐英文名字,因为训练数据集中包含了大量英文数据。这种偏见有时会导致生成有害或不恰当的输出。

例如,当给出“def race(x):”的代码提示时,AI辅助编程工具自动填写了一组有限且固定的种族类别,这明显反映了其训练数据中的偏见。

麦肯锡公司的研究深刻揭示了AI辅助编程工具对软件开发领域的潜在变革。软件开发的成功将越来越依赖于完善的培训、最佳实践的强调,以及对提示工程、编程标准和质量控制的深入实践。同时,探索并了解生成式AI相关风险也是明智的选择。

对于新手开发者,尤其是工作经验尚浅的群体,建议深入学习编程基础原理的进阶课程,以提升工作效率。在整合AI辅助编程工具至日常工作流程时,得到团队资深专家的指导,积极参与社区交流,保持持续学习的状态至关重要。这包括在专业的在线论坛上交流心得,定期举行团队会议以分享实际案例等。这些活动不仅能够培养团队中持续学习的氛围,还有助于传播最佳实践,并在早期阶段发现潜在问题。

随着开发者工作效率的显著提升,管理者可以灵活调整角色分配,使团队专注于更具价值的工作。同时,技能提升也应纳入日常工作计划,以填补可能存在的知识空白。

需要明确的是,上述建议并非硬性准则。鉴于AI辅助编程领域仍处在快速发展阶段,我们应保持灵活性和开放心态,随时准备应对可能出现的挑战。

虽然没有确凿证据证明使用AI辅助编程会提升你的职业前景,但一些迹象表明,以下可能会成为就业市场的主要变化。

招聘热潮中的AI技能需求

Indeed等网站的招聘栏开始热闹起来,越来越多的招聘者开始寻找具有AI辅助编程工具经验的求职者。从初级开发者到高级热门人才,所有级别的职位都在招贤纳士。

提升效率,助力职业发展

AI辅助编程工具之所以引起人们的关注,是因为它们在不牺牲软件质量的前提下提升生产效率。对于开发者,这可能是在职场中晋升的一条途径。

开发者的广泛认可

开发者普遍认为,AI辅助编程工具已经开始流行。例如,GitHub Copilot在独立软件评测网站G2.com上获得了4.5星(满分5星)的高分。

10倍开发者意味着拥有10个开发者的能力。AI辅助编程工具就像编程界的Usain Bolt,在你说出“修复错误”之前,就能迅速解决问题并给出解决方案。

所以你可能会想:在AI辅助编程工具的帮助下,我能成为10倍开发者吗?很抱歉,可能不会。虽然人工智能技术带来了显著的变化,但它的改进通常不是以数量级为单位的。

此外,“10倍开发者”的概念会激起刻板印象和偏见,让人觉得技术圈是个排外俱乐部。更不用说,成为超级开发者的压力可能会让你直接陷入职业倦怠。因此,虽然成为10倍开发者听起来很棒,但请记住,这可能是一厢情愿的幻想。

根据麦肯锡公司的研究,AI辅助编程工具的有效性往往取决于开发者掌握的专业知识。以下是一些考虑因素。

错误修复

尽管AI生成器可以成为你信赖的伙伴,但它也会出错。此时,发现并纠正错误的担子落在开发者的肩上。一些开发者发现自己需要对AI的结果一轮又一轮地进行修正,以达到最佳的精确度;而另一些开发者则不得不对AI进行“灌输”,让它准确地进行调试。错误修复无疑会耗费大量时间。但经验丰富的开发者知道如何避免走入“兔子洞”。

理解组织的要求

AI辅助编程工具在编程方面相当可靠,但它们在处理个别项目的独特性或满足公司的特殊需求时可能会失误。这正是资深开发者的价值所在。他们知道如何引导这些工具获得最符合组织目标、性能目标和安全性的结果。

解决棘手问题

AI辅助编程工具可以很好地完成打磨代码等任务,但如果遇到一些复杂的挑战,比如混合不同的编程框架,它们可能就会被自己绊倒。在这种情况下,经验丰富的开发者就需要登场了。

AI辅助编程工具无疑是软件开发领域的一颗璀璨新星。随着人工智能技术的飞速发展,这些工具将极大地提升编程效率,自动处理烦琐的任务,让开发者能够聚焦于更高层次的问题解决和创新。

然而,它们的诞生也伴随着一系列挑战:错综复杂的知识产权问题、开放源代码软件许可的迷宫、潜在的偏见风险及安全隐患等。

在大多数情况下,AI辅助编程工具应被视为我们的得力助手,而不是我们自身知识、技能和经验的替代品。虽然它们可能并非无所不能的“超级英雄”,但它们无疑已经成为开发者工具箱中不可或缺的强大补充。

[1]1美元约合7.26元人民币。——编辑注

[2]Usain Bolt(尤塞恩·博尔特),牙买加田径运动员,获得2008年北京奥运会男子100米、男子200米、男子4×100米3项赛事的金牌。——译者注

目录
加书签
详情
加书架
打赏
投票
自动滚动
设置
夜间

评论 0条

加载中...

设置

阅读主题
正文字体
字体大小
18
页面宽度
滚动速度
5
语音朗读
翻页模式
💎

余额不足

您的水晶或能量余额不足,请充值后再试。

立即前往充值

🎫 投月票

1 张月票 = 1.00 水晶。感谢支持!

🎁 打赏作品

打赏将直接扣除水晶余额,鼓励作者创作。