AI辅助编程实战

978-7-115-65159-4
作者: 汤姆·陶利(Tom Taulli)
译者: 成海霞
编辑: 秦健

图书目录:

详情

本书深入探讨了AI(人工智能)如何革新软件开发领域,从AI辅助编程的演变、优势与挑战到具体的工具与技术实现,为开发者打开了一个全新的世界。全书共10章,第1章介绍了编程的历史演变和生成式AI的崛起;第2章深入技术细节,解释了AI辅助编程工具的主要功能和工作原理;第3章讨论了提示工程的重要性,以及如何与AI工具进行有效沟通;第4章和第5章通过GitHub Copilot和其他AI编程工具的案例,展示了AI在实际开发中的应用;第6章扩展到通用大语言模型,如ChatGPT和GPT-4,探讨了它们在日常任务处理中的应用;第7章和第8章覆盖了软件开发的早期阶段和代码编写过程,展示了AI如何辅助决策、提高学习效率和代码质量;第9章讨论了调试、测试和部署过程中AI的作用;第10章总结了AI辅助编程的一些启示,包括学习曲线、优势、不足及对未来工作的影响。 本书适合软件开发者、编程爱好者、技术项目经理、高等院校计算机科学专业的学生及对AI在编程领域的应用感兴趣的专业人士阅读。

图书摘要

版权信息

书名:AI辅助编程实战

ISBN:978-7-115-65159-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    [美]汤姆·陶利(Tom Taulli)

译    成海霞

审  校 刘轶煜

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

对本书的赞誉

《AI辅助编程实战》是一本专为编程领域设计的实用指南,它全面整合了前沿的AI技术,并将其应用于多种软件开发场景,从而显著提升开发效率。从自动化测试到代码智能补全,这本书的每一章都深入阐释了高效编程的理念。通过独特的视角,这本书重新审视了软件开发生命周期,并深入探讨了如何有效地将AI技术整合到开发流程中。它不仅拓展了读者对AI在编程领域应用的理解,还提供了一套全新的方法论来提升开发效率。对于软件开发者,这本书是一份宝贵的参考与指导资源,是他们不可或缺的实战宝典。

——吴晨

微软AI事业部首席应用科学家

在编程的广阔海洋中,AI既是指引方向的灯塔,也是推动船只前行的帆。《AI辅助编程实战》一书以独特的视角,将AI技术与编程实践紧密结合,不仅传授编程技巧,更教授读者如何运用AI技术实现高效编程。这正体现了“授之以渔”的深层含义。这本书不仅适合编程新手,也适合那些希望提升编程效率的资深开发者。通过阅读这本书,你将学会如何让AI成为你的编程助手,共同开启编程世界的无限可能。

——黄正行

浙江大学计算机科学与技术学院教授

随着大语言模型的兴起,越来越多的开发者开始利用AI辅助编程。这本书深入浅出地覆盖了AI辅助编程的多个方面。无论是广受欢迎的GitHub Copilot,还是其他主流AI辅助编程工具,读者都可以在这本书中找到相关的学习资源。精通这些工具,开发者将能够显著提升开发效率。

——韩骏

VS Code中文社区创始人,《Visual Studio Code权威指南》作者

当我们在6周内为Cassandra引入向量搜索功能时,使用GitHub Copilot和ChatGPT是我们在截止日期前完成任务的关键。然而,许多开发者尚未充分发掘AI开发工具的潜力。Tom的书作为一本实用的入门指南,将助你一臂之力,为你节省试错时间。

——Jonathan Ellis

DataStax联合创始人兼首席技术官

这本书是一部展示Tom的专业技能的优秀作品。它不仅为读者揭示了当今软件开发领域的新进展,而且激发了每个人编程的潜能。

——Justin Dorfman

Sourcegraph公司开源社区经理

AI正在迅速改变开发者构建软件的方式。从代码编辑器到终端等,AI辅助编程工具正变得无处不在。对于任何试图在日常开发工作中最大限度地利用AI的开发者,这本书无疑是推荐读物。

——Zach Lloyd

Warp首席执行官兼联合创始人

Tom Taulli的这本书是一次精心构建的探索之旅,展示了像ChatGPT这样的AI工具是如何改变开发者(无论是初出茅庐的新手还是经验丰富的专家)的工作方式的。书中分享了AI驱动软件开发各个阶段的实用经验和独特见解。这本书非常适合希望将AI纳入其工具箱的开发者阅读。

——Titus Capilnean

Private Market Labs联合创始人

AI正在重塑软件开发领域的游戏规则。掌握如何利用像GitHub Copilot这样的工具,对每位开发者而言都至关重要。Tom在这本书中细致地介绍了AI辅助编程工具的使用方法,为读者提供了宝贵的指导。

——Muddu Sudhakar

Aisera首席执行官兼联合创始人

版权声明

Copyright © 2024 Tom Taulli. All rights reserved.

Simplified Chinese Edition, jointly published by O’Reilly Media, Inc. and Posts & Telecom Press, 2024. Authorized translation of the English edition of “AI-Assisted Programming” © 2024 O’Reilly Media, Inc., the owner of all rights to publish and sell the same.

All rights reserved including the rights of reproduction in whole or in part in any form.

本书中文简体字版由O’Reilly Media, Inc.授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。

内容提要

本书深入探讨了AI(人工智能)如何革新软件开发领域,从AI辅助编程的演变、优势与挑战到具体的工具与技术实现,为开发者打开了一个全新的世界。全书共10章,第1章介绍了编程的历史演变和生成式AI的崛起;第2章深入技术细节,解释了AI辅助编程工具的主要功能和工作原理;第3章讨论了提示工程的重要性,以及如何与AI工具进行有效沟通;第4章和第5章通过GitHub Copilot和其他AI编程工具的案例,展示了AI在实际开发中的应用;第6章扩展到通用大语言模型,如ChatGPT和GPT-4,探讨了它们在日常任务处理中的应用;第7章和第8章覆盖了软件开发的早期阶段和代码编写过程,展示了AI如何辅助决策、提高学习效率和代码质量;第9章讨论了调试、测试和部署过程中AI的作用;第10章总结了AI辅助编程的一些启示,包括学习曲线、优势、不足及对未来工作的影响。

本书适合软件开发者、编程爱好者、技术项目经理、高等院校计算机科学专业的学生及对AI在编程领域的应用感兴趣的专业人士阅读。

资源与支持

资源获取

本书提供如下资源:

源代码及资源包;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误信息

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见下页图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业的信息技术用户。

推荐序1

在数字化进程加速的当下,编程已不再是一项孤立的技能,而是成为推动创新和技术进步的核心力量。《AI辅助编程实战》一书的出版,正逢其时,为我们提供了探索人工智能如何重塑编程领域的宝贵视角。通过作者Tom的精心编著和海霞的精准翻译,这本书不仅是一本技术指南,更是一份探索未来编程世界的导览。

AI辅助编程的兴起,无疑是近年来最令人振奋的技术变革之一。它不仅改变了我们编写代码的方式,更重要的是,它改变了我们思考和解决问题的方式。《AI辅助编程实战》一书以深入浅出的方式介绍了AI辅助编程的原理、优势、挑战,以及如何在实际开发中应用这些技术,为读者打开了通往未来编程世界的大门。

本书之所以独树一帜,不仅因为它全面覆盖了AI辅助编程的多个方面,从生成式AI的基础原理到具体工具的应用,从编程技术的深层机制到软件开发的初期规划,每一章都提供了丰富的信息和深刻的见解。更为关键的是,作者结合真实案例和个人经验,将抽象概念具体化,让读者能够直观地理解AI辅助编程在现实世界中的应用。

我特别推崇这本书对提示工程的深入探讨,这不仅因为它是AI辅助编程中的一项核心技术,更因为它展现了编程艺术和科学的完美融合。通过精心设计的提示,开发者能够引导AI生成更加准确和有效的代码,这无疑为软件开发带来了革命性的变革。

无论你是AI辅助编程的新手,还是希望深入探索这一领域的专家,《AI辅助编程实战》都将是你不可多得的良师益友。我相信,通过阅读这本书,你不仅能够获得宝贵的知识和技能,还能够激发对编程艺术的热情和创意。

在此,我要向译者表达深深的敬意和感谢,感谢她的辛勤工作和卓越贡献。正是她的努力,使众多中文读者得以接触并了解这项激动人心的技术。同时,我也要向每一位选择阅读本书的读者致以诚挚的谢意,因为正是你们的好奇心和求知欲,推动了技术的发展和创新。愿这本书成为你们探索AI辅助编程世界的灯塔,照亮你们前行的道路。

黄寓凡

微软亚太研发中心开发者事业部数据与AI团队首席研发经理

推荐序2

在过去的几十年中,编程领域经历了翻天覆地的变革。从早期的低级编程语言发展到今天的高级编程语言,编程技术的进步极大地提升了软件开发的效率和便捷性。人工智能的融入为编程领域开启了全新的篇章。

《AI辅助编程实战》在这样的大背景下应运而生。这本书不仅是一本编程指南,更是一本向读者展示如何利用人工智能工具和技术,从项目构想到最终实现,全方位优化编程过程的指南。

在这本书中,作者深入浅出地介绍了生成式AI如何转变开发者的工作方式,对GitHub Copilot、CodeWhisperer、Duet AI等流行AI辅助编程工具进行了全面剖析,并探讨了如何根据专有代码库的需求对这些工具进行个性化定制。书中详细讲解了如何利用AI工具进行高效的错误修复、代码审查、单元测试编写等,以确保软件的质量与稳定性。无论你是编程新手还是经验丰富的专家,都能从这本书中获益。书中的实例和实践建议将帮助你在实际工作中迅速应用所学,提升编程效率,降低错误率。

特别值得一提的是,作者不仅关注技术的应用,还深入探讨了人工智能如何改变编程的思维方式。这种思维方式的转变,不仅能让开发者在技术层面上取得突破,更能在理念和方法上获得新的启发。

在此,我还要特别感谢这本书的译者。我与译者相识已久,深知其作风认真严谨。她在翻译过程中付出了巨大的努力和心血,不仅精准地翻译了书中的技术细节,还确保了语言的流畅性和可读性,使得更多的中文读者能够领略这本佳作的精髓。她的辛勤工作,让这本书在中文世界里得以传递其价值和理念。

总之,这本书是一本不可多得的佳作。它不仅能帮助你掌握最新的编程技术,更能引领你进入人工智能时代的编程新世界。我相信,这本书将成为你编程生涯中的得力助手,让你在编程的道路上走得更远、更稳。

希望你能像我一样,从这本书中获得启发和力量。

王利

深圳大学大数据系统计算技术国家工程实验室副研究员

序  言

20世纪90年代初,当我从加州大学洛杉矶分校毕业时,我曾憧憬未来能成为一名教授,投身于学术殿堂。然而,当IBM向我抛出橄榄枝时,我很快爱上了科技行业。自那时起,我便踏上了一条充满挑战与机遇的道路,从未回头。我先后在VMware、Pivotal、EMC及SGI等企业留下了坚实的足迹。

随后,我踏上了创业之路,成功创办了几家初创公司。其中,我最新的创业成果是Aisera,这是一家专注于为企业提供生成式AI(Generative Artificial Intelligence)解决方案的公司。我们的平台致力于在客户服务、员工体验、企业搜索、IT服务及AIOps等领域提供帮助。

在职业生涯中,我见证了许多创新,包括互联网的飞速发展、云计算的兴起、移动设备的普及,以及深度学习的突破。然而,尽管Aisera在众多领域取得了长足的进步,但在软件开发这一关键技术领域,其发展步伐却相对缓慢。

身为公司创始人,这无疑成了我所要面临的一个重大挑战。我们怀揣诸多创意与愿景,却时常因工程团队的限制而难以付诸实践。然而,人工智能(Artificial Intelligence,AI)辅助编程的引入彻底改变了这一局面,为Aisera注入了全新的活力。它让我们的团队变得更加敏捷与灵活,成为推动公司发展的强大倍增器。

如今,当我考虑聘用一名开发者时,我很想知道他如何巧妙地运用AI。我关心的是他如何利用这一前沿技术来简化烦琐的开发流程,以及他如何利用AI来提高代码编写的效率与速度。

一言以蔽之,我坚信,熟练掌握AI辅助编程工具已成为现代开发者的必备技能。正如微软首席执行官Satya Nadella所言,这些工具“正在成为每位开发者的标配……”。

然而,要真正理解并驾驭AI辅助编程,我们需要采取一种迥异的策略。这项技能与传统的开发方式截然不同。关键在于学会如何运用生成式AI系统。这正是Tom所著的这本书的价值所在。他精心地为渴望在AI辅助编程领域精通技能的开发者编写了一本实用的操作指南。书中不仅深入探讨了关键主题,还辅以丰富的实例,使得读者能够轻松掌握。更难能可贵的是,Tom以一种轻松有趣的方式呈现这些内容,让这一技术变得更易掌握且引人入胜。

毫无疑问,我们正身处一个充满无限可能与机遇的时代。在这个时代,职业发展的道路宽广而多样,而学习并掌握AI辅助编程技术无疑是你可以迈出的最具前瞻性且最有价值的一步。

Muddu Sudhakar

Aisera首席执行官兼联合创始人

前  言

早在20世纪80年代初,我就踏上了编程的旅程。我的第一台设备是雅达利400,它配备薄膜键盘,内存仅有8KB,而程序则需要通过磁带加载。在那个时代,我学习了BASIC语言,并编写了简单的游戏和实用程序。

随着时间的推移,我的设备自然而然地升级到功能更为强大的机器。在这个过程中,我逐步接触并掌握了诸如Pascal、C和C++等编程语言。然而,除了引入语法高亮和增强调试功能以外,集成开发环境(Integrated Development Environment,IDE)在结构上并未发生显著的变化。

随着GitHub Copilot和ChatGPT的登场,整个编程领域经历了翻天覆地的变化。当我首次尝试这些工具时,感觉就如同我第一次拿起iPhone,那种颠覆性的体验令人难以忘怀。

我用自然语言让ChatGPT为我编写代码。在VS Code中,只需要输入一个函数片段,GitHub Copilot便能够生成完整的代码块,这种默契的协作仿佛每一次都正中靶心。更令人惊奇的是,我还尝试使用ChatGPT将图片转换为代码,这一创新功能为我带来了全新的编程体验。

然而,AI辅助编程工具真正的强大之处在于它们能够轻松处理开发者日常面临的诸多烦琐任务。谁愿意深陷于复杂的regex语句、费尽心思拼凑bash命令或调试GitHub Action呢?我当然也不喜欢。但有了这些AI辅助编程工具,那些曾经令人头疼的问题,如今能像享用早餐一样轻松解决。

事实证明,AI工具在编程领域的便捷性令人瞩目,而且其用途远不止于此。我开始利用ChatGPT来激发创意思维,构思应用程序的新颖想法,起草详尽的需求文档,甚至编写和执行单元测试。

很快,我便坚信不疑,AI辅助编程将成为未来开发者不可或缺的核心技能之一。

确实,我深刻感受到编写一本关于AI辅助编程图书的迫切需求。因此,我精心制定了一个大纲,并满怀信心地将其提交给O’Reilly出版社。令我欣喜的是,他们迅速认可了我的潜力和这本书的价值。

撰写本书的过程不仅充满了乐趣,更是一次宝贵的学习之旅。我有幸采访了许多才华横溢的开发者,他们不仅为我提供了丰富的见解和独特的观点,还分享了许多实用的编程技巧和宝贵的经验。

然而,AI辅助编程的发展日新月异,为了紧跟这一领域的最新动态,我特意为本书创建了一个配套的GitHub仓库(https://github.com/ttaulli/AI-Assisted-Programming-Book)。这个仓库不仅是我对本书内容进行持续更新和完善的地方,更是一个汇聚了AI辅助编程领域最新发展和重要突破的平台。

感谢你选择阅读本书。我衷心希望这本书不仅能为你带来丰富的知识和见解,更能成为你人生旅程中不可或缺的宝贵指南,引领你深入探索AI辅助编程的广阔天地。

内容概览

每一章的主要内容如下。

第1章深入探讨了生成式AI如何彻底颠覆开发者的工作模式。该章详细阐述了先进的AI工具如何协助开发者更加专注于全局性的战略思考,从而减轻他们在编程细节上的负担。此外,该章还追溯了编程语言的发展历程,并对GPT-4等前沿AI技术进行了详尽的介绍和解析。

第2章清晰阐述了生成式AI以及为何Transformer模型和大语言模型(Large Language Model,LLM)在编程领域备受推崇。更为关键的是,该章通过实际操作OpenAI的Playground平台,展示了如何灵活运用AI模型,并根据个人编程需求进行定制和调整。

第3章的内容对想要高效利用AI辅助编程工具的用户来说至关重要。该章详细解析了一系列实用技巧,旨在帮助用户处理冗长或令人困惑的提示,并有效防止AI产生不准确的输出。同时,该章还深入剖析了提示的关键组成部分,并提供了关于如何巧妙运用提示来优化编程体验的建议。

第4章将带你领略一款强大工具——GitHub Copilot的魅力。该章详细介绍了GitHub Copilot的核心功能,包括生成带注释的代码、聊天体验以及使用AI驱动的命令行界面。此外,该章还探讨了如何根据专有代码库的需求,对GitHub Copilot进行个性化定制,从而充分发挥其在软件开发中的巨大潜力。

第5章全面解析了其他常见的AI辅助编程工具,包括Amazon的CodeWhisperer、Google的Duet AI及Replit等。

第6章深入探讨了如何利用ChatGPT与其他通用LLM来处理正则表达式、快速启动代码编写以及优化GitHub Action等关键任务。

第7章的重点是使用聊天机器人启动软件项目,其中涉及头脑风暴、市场调研、竞争分析、需求分析和测试驱动开发等主题。

第8章深入剖析了AI辅助编程工具在软件开发过程中的典型应用场景,涵盖了API的使用、模块化编程策略、代码重构技巧等内容。同时,该章还探讨了AI工具在函数处理及面向对象编程方面的实践。

第9章聚焦软件开发中不可或缺但往往被忽视的调试、测试和部署环节。该章探讨了如何利用AI辅助编程工具有效修复错误、进行高效的代码审查、编写可靠的单元测试,以及编写优雅的拉取请求描述,以确保软件的质量与稳定性。

作为本书的结语,第10章总结了全书的核心要点,并强调AI辅助编程工具在软件开发中的重要作用和潜在价值。

本书特色

软件开发者以确定性为基石。当我们为程序输入特定的内容时,它始终如一地输出相同的结果,这种严格的逻辑确定性一直是软件的核心与精髓所在。

然而,当涉足AI辅助编程工具的世界时,事情开始反其道而行。获取结果仿佛成了掷骰游戏,因为一切都建立在概率之上。即使你多次使用相同的提示来引导AI工具编写代码,每次的输出也很可能不尽相同。初尝此道,或许会令人感到困惑和挠头,但一旦你掌握其中的窍门,就会发现这一切都是值得的。因此,本书特别设置了一章来深入解析提示工程,旨在帮助读者驾驭这种全新的编程方法。

谁应该阅读这本书

本书是为所有开发者量身打造的,无论是初出茅庐的新手,还是已在软件行业摸爬滚打多年的资深专家,本书都值得阅读。

本书所使用的印刷约定

下面是本书所使用的印刷约定。

斜体(Italic

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constant Width

用于代码清单,以及在段落中引用程序元素,如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。

等宽粗体(Constant Width bold

表示应由用户提供的值或由上下文确定的值替换的文本。

这表示一个一般性的注释。               

如何使用示例代码

本书的补充材料(如代码示例、练习等)可从https://github.com/ttaulli/AI-Assisted-Programming-Book下载。

如果读者在使用代码示例时遇到问题,可以通过异步社区中的本书页面与我们联系。

本书是为了帮助读者更好地完成工作。一般而言,对于本书所提供的代码示例,读者可以在自己的程序和文档中使用它们,并不需要联系我们以获得许可,除非读者复制了大块的代码。例如,在编写程序时使用了本书的几段代码并不需要许可,但是,销售或发布O’Reilly图书的代码示例则需要得到我们的许可;引用本书以及书中的代码示例并不需要获得许可,但是把本书的大量代码示例复制到自己产品的文档中需要获得许可。

我们赞赏注明出处,但一般情况下并不要求这么做。出处注明通常包括书名、作者、出版商和ISBN。例如,“AI-Assisted Programming by Tom Taulli (O’Reilly). Copyright 2024 Tom Taulli, 978-1-098-16456-0”。

如果读者觉得自己对本书的示例代码的使用超出了正常范围或者上面的许可,可以通过permissions@oreilly.com与我们联系。

O’Reilly在线学习平台(O’Reilly Online Learning)

近40年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。更多相关信息请访问http://oreilly.com。

如何联系我们

如果读者对本书有任何的评论或疑问,可以与出版社联系。

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们为本书提供了一个网页,其中包含勘误表、示例和其他信息,读者可以通过https://oreil.ly/AI-assisted-programming进行访问。

如果你对本书有什么评论或技术上的建议,请发送电子邮件到errata@oreilly.com.cn。

关于我们的图片和课程的新闻与信息,可以访问http://oreilly.com。

致谢

衷心感谢O’Reilly的工作人员,特别是Nicole Butterfield、Shira Evans和Brian Guerin,他们的信任与辛勤付出使这本书得以问世。同时,我也要向杰出的技术审稿人表达我的感激之情,他们分别是Roja Boina、Abraham Borg、Sarah Kim、Ebubechukwu (Nnenna) Oguaju-Dike和Gaurav Deshmukh,他们的专业指导和宝贵意见对本书质量的提升起到了关键作用。

第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辅助编程之旅吧!

1.1 编程的演变与革命

编程语言发展的核心驱动力之一是抽象化,这是一种独特的方法,它极大地简化了开发者与系统之间的交互。抽象化通过后台处理了烦琐的细节,使开发者能够更专注于核心任务的实现。这一进步一直是推动技术创新的关键力量,为互联网、云计算、移动互联网及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辅助编程

最新的抽象化里程碑无疑是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)中,并加以运行和测试。

1.2 生成式AI

在深入剖析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辅助编程工具的优缺点。

1.3 AI辅助编程工具的优点

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

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

1.3.1 最小化搜索

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

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

所有开发者都经历过这种挑战。事实上,Stack Overflow在2022年的《开发者调查报告》(涵盖70 000多名开发者)中强调了搜索答案的挫败感。该报告显示,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倍。

1.3.2 充当你的顾问

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

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

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

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

1.3.3 与IDE集成

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

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

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

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

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

AI辅助编程工具

IDE

GitHub Copilot

Visual Studio Code、Visual Studio、Vim、Neovim、JetBrains suite、Azure Data Studio

Tabnine

Visual Studio Code、WebStorm、PyCharm、Eclipse、IntelliJ Platform、PhpStorm、CLion、Neovim、JupyterLab、Rider、DataGrip、AppCode、Visual Studio 2022、Android Studio、GoLand、RubyMine、Emacs、Vim、Sublime Text、Atom.AI、Jupyter Notebook

CodiumAI

Visual Studio Code、JetBrains(IntelliJ、PyCharm、CLion、WebStorm)

CodeWhisperer

Visual Studio Code、IntelliJ IDEA、AWS Cloud9、AWS Lambda console、JupyterLab、Amazon SageMaker Studio、JetBrains(IntelliJ、PyCharm、CLion、GoLand、WebStorm、Rider、PhpStorm、RubyMine、DataGrip)

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

1.3.4 适配你的代码库

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

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

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

1.3.5 检查代码完整性

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

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

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

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

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

1.3.6 AI驱动的文档生成器

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

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

1.3.7 现代化支持

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亿美元[1],却在数年后不得不终止项目。

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

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

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

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

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

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

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

编程语言

描述

使用时期

COBOL

为处理业务数据而开发

20世纪50年代晚期至20世纪60年代早期

Fortran

专为科学和工程计算而设计

20世纪50年代

Pascal

为鼓励良好的软件工程实践而开发

20世纪60年代晚期至20世纪70年代早期

BASIC

为学生和初学者设计的易学编程语言

20世纪60年代中期

ALGOL

影响了后来的编程语言,如Pascal、C和Java

20世纪50年代晚期至20世纪60年代早期

汇编语言

与所设计的CPU架构相匹配,可追溯到早期的可编程计算机

计算机时代早期

PL/I

用于科学、工程、商业和系统编程

20世纪60年代早期

下面的例子展示了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对这段代码进行了逐步深入的解析。

1.4 AI辅助编程工具的缺点

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

1.4.1 幻觉

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

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

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

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

1.4.2 知识产权

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版,要求任何衍生作品都必须遵循原始代码的许可条款。这一要求旨在促进创新,但同时也给开发者带来了挑战,因为它可能剥夺了他们保护自己的应用程序知识产权的权利,甚至要求他们公开整个代码库的源代码。

1.4.3 隐私

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

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

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

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

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

1.4.4 安全

在题为“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辅助编程工具本身必然带来巨大的安全风险。事实上,供应商们正在持续努力研究并改进相关防护措施。但无论如何,对于任何代码,保持高度的安全意识都是非常重要的。

1.4.5 训练数据

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

表征差异

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

质量不一致

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

知识截止日期

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

泛化差距

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

上下文理解

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

1.4.6 偏见

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

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

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

1.5 开发者的新世界

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

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

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

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

1.5.1 职业发展

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

招聘热潮中的AI技能需求

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

提升效率,助力职业发展

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

开发者的广泛认可

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

1.5.2 10倍开发者

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

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

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

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

1.5.3 开发者的技能

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

错误修复

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

理解组织的要求

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

解决棘手问题

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

1.6 小结

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

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

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

相关图书

大模型应用开发 动手做AI Agent
大模型应用开发 动手做AI Agent
GPT图解 大模型是怎样构建的
GPT图解 大模型是怎样构建的
大语言模型:基础与前沿
大语言模型:基础与前沿
生成式AI入门与AWS实战
生成式AI入门与AWS实战
ChatGPT原理与应用开发
ChatGPT原理与应用开发
人工智能和深度学习导论
人工智能和深度学习导论

相关文章

相关课程