书名:AI辅助编程Python实战:基于GitHub Copilot和ChatGPT
ISBN:978-7-115-65926-2
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [美] 利奥•波特(Leo Porter) [加] 丹尼尔•津加罗(Daniel Zingaro)
译 CSS魔法
责任编辑 秦 健
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书系统地介绍了如何利用AI助手Copilot和ChatGPT来提升Python编程的效率和质量。本书从AI助手的基础概念讲起,逐步深入到代码组织、阅读、测试、提示工程等关键技能,并引导读者通过实践掌握如何拆解复杂问题、查找和修复bug、自动化任务处理及开发计算机游戏。本书不仅提供了丰富的实例和练习,还探讨了AI助手的潜力和局限,以及未来的发展趋势,是希望在编程领域融入AI技术的读者的理想选择。
本书适合对编程感兴趣,希望借助AI技术提升编程能力的初学者和中级程序员阅读。
这是一本让我“一见倾心”的著作。机缘巧合下,我很荣幸地成为它的译者,将其推荐给国内的广大读者。
多年前,驾驶汽车是一项只有少数人能够掌握的技能,而现在它已成为一项普及的技能。编程可能也会经历类似的转变。我们正处于人工智能(Artificial Intelligence,AI)技术的爆发期,AI辅助编程工具的出现正在不可逆转地改变人们学习编程的方式及编程技能本身。
这本书就像一盏明灯。两位作者通过生动的案例和深刻的见解,向我们展示了全新的编程学习方式,以及AI时代程序员面临的机遇和挑战。因此,无论你是编程新手,还是探索AI辅助编程潜力的资深开发者,都能在这本书中获得丰富的知识和灵感。
感谢家人的支持和鼓励,你们始终是我坚强的后盾。
感谢出版社编辑团队的信任与帮助,以及为这本书所付出的努力。
感谢“CSS魔法”公众号读者群的朋友们为我加油鼓劲。虽然我无法一一列举你们的名字,但你们始终在我身边。
为读者提供一些小福利,已经成为我的一种习惯。这次也不例外。
许多朋友在使用AI辅助编程工具时感到困惑,他们很好奇我的使用方法。为此,我特别录制了一套视频教程(包含GitHub Copilot的案例集锦和实用技巧),以帮助大家快速掌握。你可以通过搜索公众号“CSS魔法”,在视频号版块找到这些资源。
同时,我也推荐你关注我的GitHub账号“@cssmagic”,那里汇集了一些有趣的开源项目和图书信息,以及我整理的AI资源列表,相信这些资源对你一定会有所帮助。
祝阅读愉快!
CSS魔法
CSS魔法
国内首批LLM应用开发者之一,AI辅助编程和GitHub Copilot专家,全栈工程师和架构师。曾在QCon等技术大会担任讲师,在个人博客和“CSS魔法”公众号撰写原创文章数百篇,深受听众和读者喜爱。著有《AI辅助编程入门》,译有《CSS揭秘》。现从事AI领域的产品设计、技术研发和咨询工作。
学习编程的黄金时代已经到来。为什么这么说呢?请允许我通过一个类比来解释。
我喜欢在家烘焙面包。相较于手工揉面,使用立式搅拌机明显更加高效且可靠。你或许会认为这是在偷懒,但我想说的是,它减轻了我的负担,让我能够更纯粹地享受烘焙的乐趣。或许你也有类似的体验,当某样东西能够接管那些日常琐事,让你释放双手时,你的生活不仅会变得更轻松,而且你可以将更多精力投入更重要或更有趣的事情中。例如,你的汽车是否配备了自动侧方停车功能?我清楚地记得,当Gmail为非英语语言引入拼写和语法检查器时,我丈夫的德国亲戚们非常兴奋,因为他给亲戚们写的电子邮件篇幅明显变长——当那些不常用的德语细节不再成为负担之后,他可以将更多时间花费在邮件的内容上。
遗憾的是,在过去很长一段时间里,我们在学习编程方面并没有类似立式搅拌机或语法检查器这样的辅助工具。而且,当你刚开始学习编程时,需要学习和记忆大量烦琐的东西。
好消息来了!2023年春天,我们终于见证了一种全新且(我们认为)有效的辅助工具的诞生。如果你打算踏上编程学习之旅,那么陪伴你的将是一种令人兴奋的辅助工具——AI(Artificial Intelligence,人工智能)。具体而言,本书将帮助你掌握一款名为GitHub Copilot的工具,它将帮助你提升Python编程技能,进而更轻松、更快速地利用计算机程序解决实际问题。Copilot是一款基于大语言模型(Large Language Model,LLM)技术的编程辅助工具,它能从大量现有的程序代码中“获取帮助”。一旦你学会了如何驾驭Copilot(虽然这比熟练操作立式搅拌器要复杂得多),你编写程序和解决问题的效率和成功率就会显著提升。
不过,你可能会问,是否真的应该使用Copilot?使用它之后,真的还是在学习编程吗?初步的研究结果看起来是积极的——那些借助Copilot学习的学生,在脱离Copilot辅助的情况下,当面对编程任务时,表现得比那些从未借助Copilot学习的学生更为出色(后者同样在脱离Copilot辅助的情况下面对相同任务)[1]。尽管如此,相较于我们以往在编程入门课程中的教学内容,使用Copilot编程时,你需要特别关注一些不同的技能,尤其是问题拆解和调试(如果你对这些术语还不熟悉,那也无妨)。要知道,即便是经验丰富的程序员,也同样需要掌握这些技能。但在过去,我们很难在入门课程中明确提出并有效讲解这些“高级技能”,因为当学生们专注于编程语言的拼写和语法等细节时,往往已经没有精力去学习这些技能了。
这本书的两位作者均为资深的计算机教育专家和研究者,他们在这本书中所制定的教学策略体现了对编程教育的深刻理解。我对此感到非常兴奋,因为通过这本书,他们正在向我们展示编程教育的未来趋势。
所以,恭喜你!无论你是编程新手,还是尝试过但遭遇挫折的人……我相信,借助Copilot学习编程将是你不容错过的一次机会。它将使你的大脑在编程过程中发挥更重要的作用,让你享受到“指点江山”般的编程体验。
Beth Simon博士
软件在当今社会中扮演着至关重要的角色。很难找到一个不受软件影响或不因软件而改变的行业。制造业依靠软件来监控生产线和物流系统,更别提那些日益增多、执行具体操作的机器人了。在广告、健身等多个领域,大数据无处不在,而这些行业正是通过软件来分析和理解这些数据的。电子游戏和电影的制作同样离不开软件的应用。这些示例数不胜数,足以说明软件的重要性。
这一现象催生了一个显著的趋势:越来越多的人渴望学习编程。这不仅包括那些在大学中主修计算机科学、计算机工程和数据科学的学生,这些专业在过去十年中一直非常热门,也包括那些需要编写软件来评估自己的数据的科学家,希望将日常烦琐的数据任务自动化的办公室工作者,以及那些出于爱好,想要为朋友制作有趣电子游戏的业余爱好者。
尽管人们有着强烈的学习编程的愿望,但我们在计算机教育领域的长期研究揭示了学习编程面临的众多难题。即便你已经掌握了解决问题的方法,也仍需要向机器传达如何使用一种规则严格且不容有误的编程语言来实现目标。虽然使用Python这样的语言编写程序相较于使用打孔卡的机器代码,其难度已大大降低,但学习之路依然充满挑战。我们之所以深知这一点,是因为我们亲眼见证了许多充满动力和智慧的学生在初级计算机科学课程中屡遭挫折,他们往往需要经历多次尝试,才能获得成功。更糟糕的是,不少人选择放弃。
想象一下,如果我们能够与计算机进行更自然的对话,而不必了解那些常常让初学者感到困惑的烦琐语法规则,那该多好。这一愿景已经随着像Copilot这样的AI助手的出现而逐步实现,它们能够提供智能的代码建议;同样,ChatGPT也能够在接收到提示时撰写出合理的文本。本书专为那些希望在AI助手时代掌握编程技能的人士设计,我们很激动能与你一同开启这段学习之旅。
在第1章中,我们将详细展示AI助手Copilot,但在此之前,先做一个简要的介绍。如果你关注过新闻记者或软件工程专家对Copilot和ChatGPT的评论,你会发现他们的意见分歧很大。一些人认为AI助手将导致编程工作消失,而另一些人则认为AI助手存在缺陷,没有它们反而更好。这些极端观点都容易受到质疑。AI助手通过学习现有代码来提供帮助,因此,在新技术或工具出现时,人类程序员仍需要编写大部分初始代码。正如近期的一篇文章所指出的,由于量子计算机仍处于初期阶段,目前还没有大量的相关代码[1]。这意味着人类程序员在可预见的未来仍将扮演重要角色。然而,基于我们多年使用Copilot的经验,我们发现它非常强大。我们两人都有长达数十年的软件开发经验,Copilot常常能迅速输出比我们自己写的还要准确的代码。忽视这样一款强大的工具,就像一个木匠拒绝使用高效的电动工具一样不明智。
作为教育工作者,我们深知帮助人们学习编程的重要性。学生为何要在从头编写代码时,花费大量时间与语法规则较劲,尤其是当AI助手几乎总能提出语法正确的代码建议时?既然AI助手在解释代码方面表现出色,特别是对于初学者的问题,学生为何还需要求助于教师、朋友或互联网论坛?而且,鉴于AI助手在解决常见编程问题时,能够通过学习过往的大量代码来编写出正确的代码,学生为什么不利用这一工具来辅助他们的编程学习呢?
请注意,这并不意味着编程现在就变得容易了,或者说可以完全将编程工作交给人工智能去做。相反,编写优秀软件的技能正在发生变化。像问题分解、代码规范、代码阅读和代码测试这样的技能,比过去变得更加重要;而了解库的语义和语法等技能则相对没那么重要。本书将传授给你面向未来的重要技能。无论你是偶然涉足编程,还是开始软件工程领域的职业生涯,这些技能都非常有价值。
本书的目标读者主要分为两类。第一类目标读者包括那些考虑通过编写软件来改善生活的人,尤其是那些尝试过但尚未成功的人。例如,会计师可能因为现有软件无法满足他们的特定需求而不得不手工解决问题;科学家可能需要快速分析数据,却发现现有工具不够强大。我们还能想到那些认为电子表格软件功能有限、渴望更深入洞察数据的办公室经理。同时,还有小公司的高管们,他们希望在社交媒体上获得关于公司讨论的通知,但又无力承担软件工程团队的成本。此外,还有那些出于兴趣编程的业余爱好者,无论是为自己制作小型电子游戏,为孩子创作故事绘本,还是为家庭设计有趣的照片墙,他们都希望通过编程来提升自己的工作效率或得到生活乐趣。
第二类目标读者包括那些有意进入软件工程或编程领域学习的学生,他们渴望学习编程技能。他们希望掌握编程的基础知识,并着手创造富有吸引力的软件产品,同时又不想禁锢于传统计算机课程的条条框框。诚然,他们在通往专业程序员的职业道路上可能还需要阅读更多的图书和学习更多的课程,但本书无疑将成为他们旅程中既愉快又有益的第一步。
本书不要求读者具有编程基础。无论你是学习过编程但已逐渐遗忘,还是初次尝试却未能成功,我们都相信这里将是你重新开始的理想之地。
本书确实要求你具备基本的计算机操作技能。这包括能够轻松地在计算机上安装软件、在文件夹之间复制文件以及打开文件。如果你尚未掌握这些技能,你仍然可以阅读本书,不过,在某些情况下,你可能需要借助外部资源(例如,通过视频网站来学习文件复制等操作)。
你还需要一台有权限安装软件的计算机,以便跟随本书教程并实践所学。无论是台式机还是笔记本电脑,只要安装了macOS、Windows或Linux操作系统,都可以。
本书旨在指导你如何利用Copilot编写Python代码。我们不仅教你如何判断代码是否满足个人需求,还会告诉你当代码未能达到预期时应该如何应对。此外,你还将学到足够的Python知识,从而理解代码的基本功能,并能判断代码是否在合理地运行。
虽然本书不包括完全从零开始的Python编程教学,但阅读完本书后,你将具备坚实的基础,可以利用其他资源继续学习,如果你也有此意愿的话——正如本书所展示的那样,对于许多实际任务,从头学起可能并非必要。
我们还不确定,在AI助手的影响下,专业程序员或软件工程师的角色将会如何变化。随着人工智能技术的持续进步,这一角色的定义也会不断演变。目前,可以肯定的是,要成为一名专业的程序员或软件工程师,本书所提供的知识将是一个良好的起点,但还远远不够。你需要对Python及计算机科学的其他关键领域有更深入的了解和掌握。
值得庆幸的是,通过Copilot学习编程,你将能编写出满足常规需求的基础软件,这些软件的复杂性超过我们在大学编程入门课程中所教授的内容。你将能够轻松编写这些实用程序,而不需要在语法问题上苦苦挣扎,也不必在学习Python这件事上花费数月的时间。如果你有意继续探索更专业的软件开发知识,这将是你在精通之路上迈出的坚实第一步。
通过本书的学习,你将能够编写出自己所需的基本软件,这些软件可以应用于数据分析、自动化执行重复性任务,甚至开发小游戏等多种场景。
我们期待你已经准备好投身于这个快速发展且不断成熟的技术领域。你在Copilot中实际获得的结果可能与本书中的描述存在差异。Copilot每天都在更新和变化,我们无法实时跟进这样一个不断变化的目标。更为关键的是,Copilot的行为具有不确定性,也就是说,当你多次要求它解决同一个任务时,它每次提供的代码可能都是不同的。有时,你可能会获得正确的代码,但再次询问时,得到的代码可能就是错误的。即便你使用了与我们完全相同的提示词,你所得到的代码响应也可能与我们的不同。本书的许多章节都着重讲解了如何判断Copilot提供的答案是否正确,以及在答案不正确时如何修正。简而言之,我们希望你已经准备好在技术发展的前沿进行学习。
我们俩担任教授已超过十年,而作为程序员的年数更是这个数字的两倍。我们深切关心学生的成功,因此投身于教育研究,专注于探索学生如何学习计算机科学,以及如何提升他们的学习成效。我们合作发表了近百篇学术论文,深入探讨了教学方法、学习动机和评估策略,旨在不断丰富和提升学生的学习体验。
在工作期间,我们遇到了大量在学习编程上碰到困难的学生,尽管这些学生聪明且富有学习热情,并且我们已经采用了目前所知的计算机教育最佳实践,但他们在学习编程的某个阶段仍然遇到了障碍。编程是一个包含多个步骤的复杂过程,首先需要理解问题,其次构思解决方案,最后将这一解决方案传达给计算机。因此,当我们开始使用AI助手,尤其是Copilot时,我们立刻意识到它可能成为学生学习过程中的转折点,特别是在将问题的解决方案传达给计算机这一关键环节上。我们希望我们的学生能够成功,同样也希望你能够成功。我们相信AI助手能够在这一过程中提供极大的帮助。
在我们的大学课堂上,我们看到的最令人悲哀的现象之一是学生们相互施加心理压力。在Python入门课程中,我们听到部分学生夸耀自己学过某种编程语言,这种行为对其他同学产生了不小的影响。我们也尝试温和地引导这些学生去选择更合适他们的课程,但我们发现,那些自夸的学生往往在期末考试时并不轻松,他们在学期初高估了自己的能力。这种装腔作势的行为,显然是自卑感的一种体现。
除了选择这些入门课程的学生以外,我们还注意到不同程序员群体及其对相关领域的态度。例如,人机交互(Human-Computer Interaction,HCI)的专业人士专注于研究如何提升软件设计,使其更贴合人类用户的行为和习惯。这听起来相当重要,对吧?但遗憾的是,这个领域曾长期被一些计算机科学家贬低为“应用心理学”。随后,一些大型企业意识到,如果你真正关心自己的软件产品的用户,这些用户不仅会更加欣赏你的产品,而且可能更愿意为之付费。因此,HCI迅速在计算机科学领域占据了主流地位。这种自大和傲慢并不局限于特定领域,甚至在不同编程语言的程序员之间也存在。例如,我们听到C++程序员说过一些像“JavaScript编程不是真正的编程”这样的傻话。(JavaScript编程绝对是真正的编程,不管“真正的编程”到底指的是什么!)
我们认为,这种行为不仅毫无意义,而且令人遗憾,它将人们排斥在这个领域之外。我们都很欣赏一部名为XKCD的漫画,它在“真正的程序员”这一集中巧妙地揭示了这种姿态的荒谬性。在这部漫画中,程序员们就哪款文本编辑器最适合编程展开了争论。你会在第2章中了解到,程序员们需要使用文本编辑器来编写代码。关于最佳文本编辑器的争论已经持续了很长一段时间,但大多数情况下这种争论并不严肃。这部漫画以一种极具智慧的方式,寥寥几笔就凸显了这种争论毫无意义。
我们之所以讨论这个令人遗憾的行业现象,是因为我们估计肯定有人会对“使用Copilot学习编程”指手画脚。他们可能会声称,要掌握软件开发,就必须以完全手写代码的方式学习编程。对于有志成为专业软件工程师的人,我们确实认为在职业生涯的某个阶段,应该掌握从零开始编写代码的技能。但是,对于大多数普通人及那些刚开始学习软件工程的学生,我们真心认为,将完全手写代码作为入门方法已经不再合适。因此,如果有人因为你做了一些使你自己、你的生活或这个世界变得更好的事情而批评你,那我们建议你采纳Taylor Swift的不朽箴言——“甩掉它”就好。
本书共分为11章。我们建议你按顺序阅读全书,而不是随意跳读,因为每个章节介绍的技能都是后续章节的基础。
第1章介绍了AI助手是什么、它们如何工作,以及为什么它们正在不可逆转地改变编程的方式。这一章还探讨了在使用AI助手时需要考虑的问题。
第2章将帮助你设置计算机,以便你使用Copilot(你的AI助手)和Python(我们将使用的编程语言)进行编程。计算机设置完成后,我们将通过Copilot完成首个编程实践:对公开可用的体育赛事数据进行分析。
第3章深入讲解了函数的概念,函数不仅能帮助你更好地组织代码,还能让Copilot更有效地生成代码。这一章通过多个实例展示了与Copilot高效协作的常规流程。
第4章讲解如何阅读Python代码的第一部分。没错,尽管Copilot会帮你编写代码,但你还是需要具备读懂代码的能力,从而判断代码是否符合预期。请放心,Copilot在此过程中也能提供帮助!
第5章讲解如何阅读Python代码的第二部分。
第6章初步介绍了在使用AI助手时必须掌握的两项关键技能——测试和提示工程。测试用于检查代码是否正确运行,而提示工程则可以优化我们与AI助手的沟通方式。
第7章专注于探讨如何将复杂问题拆解为Copilot更易处理的小问题,这种方法称为自顶向下设计。在这一章中,我们将使用这种方法来设计一个完整的程序,用来识别神秘图书的作者。
第8章深入探讨了bug(也就是代码中的错误),包括如何找到它们,以及如何修复它们。我们将学习如何逐行检查代码,准确找出问题所在,并学会要求Copilot来帮助修复bug。
第9章展示了如何使用Copilot来自动化处理烦琐任务。你将看到3个示例——清理被多次转发的电子邮件、为数百个PDF文件添加封面以及删除重复的图片,而且你还可以将学到的方法应用到自己的特定任务中。
第10章展示了如何使用Copilot来开发计算机游戏。你将运用书中学到的技能来开发两款游戏——一款类似于Wordle的逻辑游戏和一款双人对抗的桌面游戏。
第11章深入探讨了“提示模式”这一新兴领域,这些工具旨在帮助你更充分地利用AI助手的潜力。同时,这一章也对AI助手的现有局限进行总结,并对未来的发展趋势进行展望。
你需要一台安装了macOS、Windows或Linux操作系统的计算机,并且具备在计算机上安装软件的权限。在第2章中,我们将更详细地讨论需要安装的Python环境、Visual Studio Code程序及一些必要的插件。此外,你还需要注册一个GitHub Copilot账户。
Leo Porter
Daniel Zingaro
Leo Porter博士是加州大学圣地亚哥分校计算机科学与工程系的教学教授。他因研究计算机课程中“同伴指导”的效果、利用点答器数据预测学生成绩,以及设计基本数据结构的概念清单而闻名。他与人合教了广受好评的Coursera专项课程“面向对象的Java编程:数据结构及其超越”,吸引了超过30万名学员注册学习;同时,他还在edX MicroMasters平台上开设了数据科学专业的第一门课程“Python for Data Science”,吸引了超过20万名学员注册学习。他曾获得6项最佳论文奖、SIGCSE 50周年纪念十大研讨会论文奖、沃伦学院杰出教学奖及加州大学圣地亚哥分校学术参议院杰出教学奖。他是ACM的杰出会员,并且曾在ACM SIGCSE董事会任职。
Daniel Zingaro博士是多伦多大学的副教授。在过去的15年中,他向数千名学生讲授了Python编程入门课程,并编写了目前这门课程使用的教科书。他还撰写了数十篇关于如何教授和学习计算机科学入门课程的教育研究文章。Daniel与No Starch Press合作创作了两本书——上述的Python教科书和一本关于算法的图书——这两本书均被翻译成多种语言。Daniel获得了多个著名的教学和研究奖项,包括一个50年时间考验奖和多个最佳论文奖。
Peter Morgan是位于伦敦的人工智能咨询公司Deep Learning Partnership的创始人。他拥有物理学学位及MBA学位。在过去的十年中,他一直在人工智能领域工作。在此之前,他曾在Cisco Systems和IBM等公司担任解决方案架构师长达十年之久。他撰写了多篇关于人工智能、物理学和量子计算的报告及论文。他还为初创公司和大型企业提供LLMOps和量子计算领域的咨询服务。
本书的封面人物是Prussien de Silésie——来自西里西亚的普鲁士人。这幅插图选自Jacques Grasset de Saint-Sauveur创作于1788年的作品集。该作品集中的每幅画作都是手工精心描绘和上色的。
在那个年代,通过人们的服饰可以轻易识别出他们的居住地及职业或社会地位。Manning出版社通过这些充满艺术气息的封面,向计算机行业的创新精神和进取精神致敬。这些画作反映了几个世纪前地域文化的丰富多样性,而流传下来的作品集也令这些文化焕发出新的生机。
撰写一本关于不断演进的技术的图书对我们来说是一个全新的挑战。在写作过程中,我们每天的开始都是阅读关于LLM的最新文章、观点和能力介绍。早期的写作计划不得不推翻重来。当我们写完本书前半部分并接触到最新的LLM特性之后,后半部分的写作思路才逐渐清晰。我们对Manning出版社在这个过程中所展现的灵活性和支持表示衷心的感谢。
特别要感谢的是本书的策划编辑Rebecca Johnson女士,感谢她深厚的专业知识、睿智的洞察力及坚定的支持。
Rebecca以其敏锐的洞察力、建设性的批评和富有创造力的建议,极大地提升了本书的品质与清晰度。她的支持与鼓励,以及在写作进度和日程管理方面的协助,对我们至关重要。衷心感谢Rebecca,她的贡献远远超出了我们的期望。
我们还要感谢本书的技术编辑Peter Morgan和技术校对Mark Thomas。他们对本书的质量保障作出了重要贡献。
感谢所有的审稿人:Aishvarya Verma、Andrew Freed、Andy Wiesendanger、Beth Simon、Brent Honadel、Cairo Cananea、Frank Thomas-Hockey、Ganesh Falak、Ganesh Swaminathan、Georgerobert Freeman、Hariskumar Panakmal、Hendrica van Emde Boas、Ildar Akhmetov、Jean-Baptiste Bang Nteme、Kalai C. E. Nathan、Max Fowler、Maya Lea-Langton、Mikael Dautrey、Monica Popa、Natasha Chong、Ozren Harlovic、Pedro Antonio Ibarra Facio、Radhakrishna Anil、Snehal Bobade、Srihari Sridharan、Tan Wee、Tony Holdroyd、Wei Luo和Wondi Wolde。感谢他们的宝贵建议,使本书更加完善。
衷心感谢同事们对我们写作的大力支持,并慷慨分享了他们对于本书的设想。他们的想法极大地丰富了我们的思路,并为我们努力重新塑造编程入门课程提供了宝贵的经验。我们要特别感谢Brett Becker、Michelle Craig、Paul Denny、Bill Griswold、Philip Guo及Gerald Soosai Raj,他们的贡献非常重要。
本书提供如下资源:
● 资源包;
● 本书思维导图;
● 异步社区7天VIP会员。
要获得以上资源,您可以扫描下方二维码,根据指引领取。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下页图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。
如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。
“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业的信息技术用户。
本章内容概要
● AI助手如何改变新手程序员学习编程的方式
● 为什么编程方式将发生永久性的变革
● 像Copilot这样的AI助手是如何工作的
● Copilot如何解决编程入门的难题
● AI辅助编程可能带来的风险
在本章中,我们将探讨人类如何与计算机进行交流。我们将向读者介绍“AI助手”——GitHub Copilot(简称Copilot),一款利用人工智能(Artificial Intelligence,AI)帮助人们编写软件的神奇工具。更重要的是,我们将展示Copilot如何帮助你学习编程。阅读本书并不要求你具备编程经验。不过,即便你对编程已经有一定的了解,也请不要跳过本章。每名程序员都应当意识到,在AI助手如ChatGPT和Copilot的辅助下,编写程序的方式已经发生了变革,并且我们所需的编程技能也随之发生了转变。我们还需要保持警惕,因为这些工具在某些情况下可能会提供不准确的信息。
如果我们一上来就要求你读懂下面这段代码,你能接受吗?
section .text
global _start
_start:
mov ecx, 10
mov eax, '0'
l1:
mov [num], eax
mov eax, 4
mov ebx, 1
push ecx
mov ecx, num
mov edx, 1
int 0x80
mov eax, [num]
inc eax
pop ecx
loop l1
mov eax, 1
int 0x80
section .bss
num resb 1
这段“天书”会打印0~9的数字。它是用一种低级编程语言——汇编语言编写的。如你所见,低级编程语言与人们日常读写的语言相去甚远。它们主要是为计算机而设计的,并非面向人类。
没人愿意编写这种程序,但在早期,这也是不得已而为之。程序员通过这种手段细致地定义他们希望计算机执行的具体操作,细致到每一条指令。为了从性能不足的计算机中尽可能地榨取性能,这种精细的控制是必需的。20世纪90年代那些对速度要求极高的计算机游戏,例如《毁灭战士》(Doom)和《雷神之锤》(Quake),都是采用上面那种汇编语言编写的。如果不这样做,这些游戏根本开发不出来。
好的,汇编到此为止。我们继续。对于以下这段代码,感觉如何?
for num in range(0, 9):
print(num)
这段代码是用Python编写的,目前许多程序员都在使用。不同于汇编语言这样的低级编程语言,Python被视为高级编程语言,因为它与自然语言的距离更近。即便你对Python代码尚不了解,或许也能猜出这段代码的目的。第一行似乎在处理0~9的数字范围。第二行进行打印操作。不难理解,这段代码的目的与上面那段汇编语言“天书”是一样的,都是想打印0~9的数字(不过很可惜,它实际上打印的是0~8)。
尽管这种代码更接近英语,但它并非英语。它仍然是一种编程语言,就像汇编语言一样,有着特定的规则。正如上面的代码所示,误解这些规则的细节可能会导致程序错误。
与计算机沟通的终极目标是能够使用诸如英语这样的自然语言进行交互。在过去70年里,我们之所以使用各种编程语言与计算机对话,并非出于个人喜好,而是迫于无奈。计算机的计算能力不足以应对英语等自然语言的复杂性和特异性。我们的编程语言虽然一直在演进(例如,从天书一般的汇编语言发展到Python),但它们依旧是计算机语言,并非自然语言。不过,这种情况正在发生变化。
有了AI助手,我们现在可以用英语提出自己的需求,并让计算机生成相应的代码。如果希望得到一段正确的打印0~9的数字的Python代码,可以用英语向AI助手(Copilot)发出指令。
# Output the numbers from 0 to 9
对此,Copilot可能会根据这一指令生成如下代码。
for i in range(10):
print(i)
不同于1.1.1节的示例,这段Python代码能够正常运行。
AI助手能够帮助人们编写代码。在本书中,我们将探索如何利用Copilot来编写代码。我们只须用英语描述需求,便能收到用Python编写的代码作为回应。
更重要的是,我们将能够把Copilot无缝集成到工作流程中。在没有Copilot这类工具的情况下,程序员通常需要同时打开两个窗口:一个用于编写代码,另一个用于在Google上查询编程方法。在第二个窗口中,可能充斥着Google搜索结果、Python文件或程序员论坛上讨论如何解决特定编程问题的帖子。他们经常需要从这些结果中复制代码到自己的项目中,随后进行适当的调整以符合自己的应用场景,尝试不同的解决方案等。这已经成为程序员生活的一部分,但你可以想象这种工作方式的效率有多低。据估计,程序员可能有多达35%的时间花在搜索代码上[1],而且找到的代码并不是立即可用的。有了Copilot的协助,我们编写代码的困难将得到显著改善。
在本书中,我们将主要用到两种技术——Python和GitHub Copilot。
Python是一种编程语言,用于与计算机进行交流。人们使用它编写各种程序来完成有用的事情,例如,开发游戏和交互式网站、数据可视化、文件管理应用及自动化常规任务等。
编程语言还有很多种,包括Java、C++、Rust等。Copilot也支持这些编程语言,但截至目前,它对Python的支持最为出色。相对于其他许多语言(尤其是与汇编语言相比),Python代码写起来要简单得多。更为重要的是,Python更易于阅读。毕竟,编写Python代码的将不是我们,而是我们的AI助手。
实际上,计算机并不能直接读取或执行Python代码。它们唯一能够理解的是所谓的“机器码”,这种代码比汇编语言代码还要难以理解,因为它是汇编语言代码的二进制形式——没错,就是一连串的0
和1
。在幕后,计算机将接收人们提供的任何Python代码,并在执行之前把它转换成机器码,正如图1.1展示的那样。
图1.1 在屏幕上看到输出之前,Python程序需要经历的几个步骤
什么是AI助手?AI助手是一种人工智能代理(AI Agent),它帮助你完成任务。你可能在家里使用Amazon的Alexa设备,或拥有一台集成了Siri的iPhone——这些都属于AI助手。这类助手能帮你订购生鲜、查询天气或确认那位在《哈利·波特》电影中饰演Bellatrix的女演员是否也参演了《搏击俱乐部》电影。AI助手只不过是响应人类语音和文本输入的计算机程序,并以类人的方式给出答案。
Copilot是一款能执行特定任务的AI助手:它能将英语转换成程序代码(我们很快就会看到,它还能做更多的事情)。与Copilot功能类似的AI助手还有不少,例如CodeWhisperer、Tabnine和Ghostwriter等。我们选择Copilot作为本书主角的原因,是基于它生成代码的质量、稳定性(它从未发生过崩溃)及我们个人的偏好。我们也鼓励你在合适的时候探索其他工具。
你可以把Copilot想象成你与正在编写的程序之间的一个中介层。你不必直接编写Python代码,只须用文字描述你想要的程序功能(这些文字称作“提示词”),Copilot便能生成相应的程序代码。
Copilot的智能引擎是一种精妙的计算机程序,名为大语言模型(Large Language Model,LLM)。这种模型掌握了单词与单词之间的内在联系,包括识别特定语境中最合适的词汇搭配,并基于这些信息预测出一段提示词后面最匹配的单词顺序是什么。
想象一下,我们请你预测这个句子中的下一个单词可能是什么:“The person opened the ________.”你可以想到很多选项,例如door、box或conversation等,但有些单词如the、it或open则显然不合适。LLM会综合考虑当前上下文来生成下一个合适的单词,并持续不断地进行这一过程,直至任务完成。
请注意,我们并没有说Copilot明白它正在做的事情。它仅仅是依靠当前的上下文来持续生成代码。在你今后的编程之路上,要始终铭记:只有我们自己能判断生成的代码是否真正实现了自己的意图。虽然大多数情况下它能够做到,但你仍然应该时刻保持适度的怀疑精神。图1.2描绘了Copilot根据提示词生成程序的过程。
图1.2 Copilot根据提示词生成程序的过程
你或许会好奇,为什么Copilot为我们编写的是Python代码,而不是直接生成机器码。这样的话,Python不就是一个可有可无的中间环节吗?其实不然,我们让Copilot编写Python代码的原因在于它可能会出错。一旦它出错,我们就需要对这些错误进行修正,相比于机器码,处理Python代码无疑要简单得多。
另外,几乎没有必要检查由Python代码转换的机器码是否准确。这在一定程度上归功于Python语言规范的确定性。我们可以畅想,或许未来Copilot已经精准到无须检查它生成的Python代码,但目前我们距离这一目标还有很长的路要走。
为了阐明AI将如何改变学习编程的方式,我们将展示Copilot在解决编程任务方面的强大能力,而这些任务正是选自编程教材中分派给学生的题目。
在以往的编程学习过程中,学习者们往往将大部分时间投入程序的语法和基础结构中。能做到从零开始逐行手写一段完整的程序(例如,下面即将展示的这个示例),通常就是他们学习编程的最终目标了。然而,在深入探讨具体的编程题目之前,必须指出的是,尽管大多数编程教育者和图书作者都认为新手程序员应该能解决此类题目,但实际上许多初学者根本做不到这一点。下面列出的就是这类题目的一个代表[4]。
编写一段程序来读取每天的降雨量。若降雨量为负值,则认为这是不合法且不可接受的,应予以排除。该程序应输出以下信息:有效记录的天数、下雨的天数、整个时间段内的总降雨量及任何单日的最大降雨量。程序以9999作为结束输入的警戒值。
如果你以前尝试过学习编程,那么对于这种类型的题目应该并不陌生,而且你可能在解决此类问题时头疼不已。但现在,如果我们将这段明确的提示词交给Copilot,将立即得到一段Python代码,如代码清单1.1所示。(我们在前言中提到,Copilot的行为具有不确定性,所以,如果我们再次提问,可能会得到不一样的代码。)
代码清单1.1 Copilot生成的解决经典降雨问题的代码
rainfall = 0
total_rainfall = 0
num_rainy_days = 0
num_valid_days = 0
max_rainfall = 0
rainfall = int(input("Enter the amount of rainfall for the day: "))
while rainfall != 9999:
if rainfall < 0:
print("Invalid rainfall amount. Please try again.")
rainfall = int(input("Enter the amount of rainfall for the day: "))
else:
num_valid_days += 1
total_rainfall += rainfall
if rainfall > 0:
num_rainy_days += 1
if rainfall > max_rainfall:
max_rainfall = rainfall
rainfall = int(input("Enter the amount of rainfall for the day: "))
print("Number of valid days:", num_valid_days)
print("Number of rainy days:", num_rainy_days)
print("Total rainfall over the period:", total_rainfall)
print("Maximum amount of rain that fell on any one day:", max_rainfall)
我们并不指望你立马就能从直觉上判断出这段代码的优劣。事实上,这段代码相当不错。作为计算机科学专业的教授,我们会给这段代码打高分。
以前学习编程的人们可能需要花费几周甚至几个月的时间才能写出这种水准的代码。而如今,Copilot能够瞬间生成这样的代码。后续的章节会一直强调,我们仍然需要验证这些代码的正确性,因为Copilot有可能犯错。但我们再也不需要从零开始手写代码了。我们相信,与Copilot的这次成功互动,预示我们过去教授编程和学习编程的方式已然终结。
作为一个有志于学习编程的人,你不必再像以往那样在语法、控制流程等众多Python概念上苦苦挣扎。诚然,我们会在本书中讲解这些概念,但目的不是让你通过从零开始手写代码来证明你已理解,因为Copilot已经能够轻松生成这些代码。我们学习这些概念,仅仅是因为它们有助于我们解决实际问题,并与Copilot进行更富有成效的互动。正是由于AI助手从根本上改变了学习编程所需的技能,你才能更快地学会如何编写规模更庞大、意义更深远的软件。
正如我们所见,Copilot能够根据我们用英语描述的需求来编写Python代码。编程领域的“语法”是指在当前编程语言中合法的符号和词汇。因此,我们可以这样说:Copilot接收符合英语语法的描述,生成符合Python语法的代码。这无疑是一大福音,因为学习编程语法历来是新手程序员的头号难关。这里应该使用哪种括号——是使用方括号、圆括号还是花括号?这里需要缩进吗?这些东西的顺序应该怎么排:是先x后y,还是先y后x?
这样的问题层出不穷,坦白地说,这些事情确实有些枯燥无味。如果我们的目标仅仅是通过编写程序来实现某些功能,那这些细节又有谁会在意呢?Copilot能够将我们从烦琐枯燥的语法中解放出来。我们把这视为帮助更多人掌握编程的关键一步,并期待未来有一天,这种人为设定的障碍能够彻底消除。目前,我们依然需要学习Python语法,但有了Copilot的协助,我们不再是一个人在战斗。
但Copilot能做的远不止这些。以下这些与编程紧密相关且同样至关重要的任务,Copilot也能够帮助我们实现。
● 解释代码。当Copilot生成Python代码时,我们需要判断这些代码是否符合预期。正如之前所述,Copilot可能会犯错。我们不打算深入讲述Python的每个细节(那属于过时的编程方式)。我们必须教会你如何阅读Python代码,以便全面理解其功能。同时,我们还将利用Copilot的代码解释功能,用自然语言为你讲解代码。阅读完本书之后,你仍然可以依靠Copilot来帮助自己理解它生成的复杂代码。
● 让代码更易理解。完成一个任务的编程方法往往不止一种,其中某些方法可能比其他方法更容易理解。Copilot提供了一款工具,可以重组你的代码,让它更加易于使用。例如,易于阅读的代码通常在需要扩展或修正时也更加易于处理。
● 修复bug。所谓bug,是指在编写程序时引入的错误,这些错误会导致程序执行不符合预期的操作。它可能导致Python代码不能完全正常运行,也可能导致代码在大多数情况下正常,但在特定场景下出问题。如果你曾听过程序员聊天,或许会听到这样一种普遍的遭遇:某位程序员花费数小时进行排查,结果发现导致程序挂掉(fail)的只是一个多余的等号。这种经历苦不堪言。以后再遇到这类问题,你可以使用Copilot的这项功能,它能够自动帮助定位并修复程序中的bug。
现在我们都对Copilot帮助编写代码感到兴奋,但我们还需要讨论一下使用Copilot时所面临的潜在风险。有关这些问题的更多阐述,请参阅参考文献[2]。
● 版权问题。Copilot是通过学习人类编写的代码来掌握编程技能的。在讨论Copilot等AI工具时,人们常会使用“训练”一词,这里指的是“学习”。具体来说,它采用GitHub上数百万个开源的代码仓库进行训练。人们担心Copilot可能会“盗用”这些代码并提供给他人。然而,根据我们的观察,Copilot很少推荐使用他人代码的大块内容,尽管这种可能性确实存在。即便Copilot提供的代码是多段他人代码的融合与转化,也可能引发版权问题。例如,Copilot生成的代码的版权归属尚未有明确共识。为了解决这一问题,Copilot团队正在引入新功能,例如,能够检测其生成的代码是否与现有代码相似,及相关代码的许可证情况。尽管我们鼓励你将这些代码用于个人的学习和实验,但如果你计划用于家庭之外的场合,还请务必谨慎对待这一问题。这里的表述有意保持了一定的模糊性,这是因为法律适应这种新技术可能需要一段时间。在社会就这些议题进行充分讨论之前,保持谨慎是明智之举。
● 教育。作为编程入门课程的讲师,我们亲眼见证了Copilot在编程作业这种任务类型上的卓越表现。在一项研究[3]中,Copilot面对166个常见的初级编程任务,它的表现如何?在第一次尝试中,它就解决了将近50%的问题;一旦提供更多信息,这一比例甚至可提升至80%。相信你已经目睹了Copilot在解决标准入门级编程问题时所表现出的能力。教育领域需要考虑到Copilot这类工具的出现并进行变革,目前教师们也在积极探讨这种变革的具体形式。学生们是否可以使用Copilot?如果可以,他们将以何种方式使用?Copilot又将如何辅助学生学习?未来的编程作业又将呈现出何种新的面貌?
● 代码质量。我们必须保持警惕,不能盲目信任Copilot,尤其是在处理敏感代码或需要保障安全的代码时。例如,为医疗设备编写的代码,或者处理用户敏感数据的代码,我们必须理解透彻。人们在面对Copilot的神奇表现时很容易麻痹大意,从而在未经仔细审核的情况下接受它生成的代码,但那些代码可能完全是错误的。在本书中,我们处理的代码并不会大规模部署,因此,虽然我们会专注于获取正确的代码,但不会过多考虑这些代码在更大范围使用时会产生何种影响。我们将致力于帮助你建立必要的基础,以便独立判断代码的正确性。
● 代码安全。与代码质量一样,从Copilot获得的代码无法保证安全性。例如,在处理用户数据时,把Copilot提供的代码拿来就用是远远不够的。我们需要执行安全审计,并且通过专业知识来判断代码的安全性。当然,我们不会在现实场景中使用Copilot提供的代码,因此,也不会将重点放在安全问题上。
● 不是专家。专家的一个显著特征是对自己的所知与所不知有清晰的认识。他们还能准确表达对自己答案的信心程度,如果信心不足,他们会持续学习,直到确信自己掌握了知识。Copilot及更广泛的LLM并不具备这种能力。你向它们提问时,它们只是直接给出回答而已;必要时,它们还会编造答案:将真实片段与垃圾信息混合,形成看似合理但总体上没有意义的回答。例如,我们观察到LLM有时会为尚在人世的人虚构讣告,尽管这不合逻辑,但这些“讣告”中包含了关于这些人生活的真实信息。当被问及算盘为何能在运算速度上超越计算机时,LLM有时会给出一些站不住脚的解释,例如,算盘因为是机械的,所以必然速度更快。目前,LLM正在努力改进,以便能够在不知道答案时明确表示“对不起,我不知道”,但这一目标尚未实现。它们不知道自己不知道什么,这意味着它们需要监督。
● 偏见。LLM会重现其训练数据中存在的偏见。例如,当请求Copilot生成一份姓名清单时,它通常会生成一些英文名;当要求它绘制图时,得到的图可能没有充分考虑到人类之间的视觉感知差异;而要求它编写代码时,它输出的代码风格很可能反映了主流群体的编码习惯(毕竟主流群体编写了世界上的大部分代码,而Copilot正是基于这些代码进行训练的)。长期以来,计算机科学和软件工程领域一直面临多样性不足的问题。我们不能允许多样性进一步受损,更应努力扭转这一趋势。因此,我们需要让更多的人参与进来,让他们能以自己的方式自由表达。如何面对Copilot这类工具所带来的挑战,目前正在积极探索中,这对编程的未来极为关键。尽管如此,我们依然相信Copilot有希望通过降低行业门槛来促进多样性的提升。
如果Copilot能够编写代码、解释代码并修复里面的bug,那么我们是不是可以高枕无忧?是不是只须向Copilot下达指令,然后就可以庆祝自己的杰出成就了?
不,并非如此。虽然一些原本必备的编程技能(例如,编写正确的语法)重要性确实会减弱,但其他技能仍然非常关键。例如,你不能简单地把一个庞大任务丢给Copilot,类似“创建一款电子游戏,并确保它好玩”这种要求,Copilot将难以满足。相反,我们需要将这一庞大任务分解成Copilot能帮上忙的小任务。那么,我们怎样才能做到这一点呢?事实证明,这并非易事。这是人们在与Copilot这类工具互动时必须培养的关键技能,也是本书将要教授的主要内容。
信不信由你,有些技能在使用Copilot时会变得更为重要。测试代码一直是编写可靠代码的关键任务。我们对测试人类编写的代码有很多了解,因为我们知道该在哪里寻找常见问题。我们知道,人们在处理值的边界条件时经常会出错。例如,如果编写一个程序来处理两数相乘,通常在绝大多数情况下都能处理得很好,但当其中一个值为0时可能会出错。那么,对于AI编写的代码呢?我们可能根本猜不到在20行完美无缺的代码中竟然隐藏着一行荒唐的代码。我们对处理这种情况没有经验,因此需要比以前更加仔细地进行测试。
最后,还有一些技能是全新的。其中最关键的一项称为“提示工程”,这涉及如何准确告诉Copilot需要它做什么。当要求Copilot编写代码时,我们通过一段“提示词”来提出这一请求。虽然我们可以用自然语言来编写提示词并表达需求,但仅仅这样做是不足够的。如果我们希望Copilot尽可能正确地执行任务,就需要极为精确地表达需求。即使表达已经足够精确,Copilot还是有可能犯错。在这种情况下,我们首先需要确认Copilot确实出现了错误,然后调整自己的描述,希望能将其引导至正确的方向。根据我们的经验,即使是看似微不足道的提示词变动,也可能会对Copilot生成的结果产生极大的影响。
在本书中,我们将传授所有这些必备技能。
如今,社会各界对于Copilot等AI助手的态度还有些摇摆不定。我们将在本节提出一些常见问题,并附上我们的观点。这些问题可能也正是你心中所疑惑的。虽然我们的回答可能随着时间的推移逐渐显得荒谬,但这些回答确实反映了眼下我们两位作为长期投身于编程教育领域的教授和研究者的真实观点。
问:现在有了Copilot,技术和编程岗位会减少吗?
答:应该不会。不过我们预计这些岗位的性质将会发生变化。例如,我们知道Copilot能辅助处理许多与初级编程岗位相关的任务。这并不意味着初级编程岗位将直接消失,只不过随着程序员能够借助越来越先进的工具完成更多任务,这些岗位的性质将发生改变。
问:Copilot会扼杀人类的创造性吗?它会不会只是在不断地回收利用人类已经编写的代码,从而限制新观点的引入?
答:我们认为不会。Copilot使我们能够在更高层面上进行工作,远离了底层机器码、汇编语言或Python代码。计算机科学家用“抽象”这一术语来描述人们与计算机底层细节脱离的程度。抽象自计算机科学诞生之初就在进行,但人们并没有因此遭受损失。相反,它让人们能够忽略那些已经解决的问题,专注于解决越来越广泛的问题。事实上,正是更高级编程语言的出现,推动了更高质量软件的开发——那些驱动Google搜索、亚马逊购物车和macOS的软件,并非在仅有汇编语言时编写的(可能靠汇编语言也根本写不出来)!
问:我一直听人在说ChatGPT,它是什么?它和Copilot是一回事吗?
答:ChatGPT和Copilot并不相同,但它们是基于同一种技术构建的。与专注于编程的Copilot不同,ChatGPT适用于更广泛的知识领域。这使它能够胜任更多样的任务,例如,回答问题、撰写文章,甚至在沃顿商学院的MBA考试中取得优异成绩。这意味着教育也需要随之变革:我们总不能让人们靠ChatGPT就获得MBA吧。同样,我们花费时间的方式也需要转变。人类还会继续写书吗?以什么方式来写?当人们知道图书可能部分或完全由AI编写时,他们还会愿意读书吗?这将对金融、医疗保健、出版等行业产生深远影响。与此同时,这种技术也被过度炒作,这也让人们一时难以辨别传言的真假。如果拉长时间跨度,这些问题会愈发难以回答,没有人能预测未来到底会发生什么。实际上,Roy Amara的一句老话(阿玛拉定律)指出:“人们倾向于高估一种技术的短期影响,而低估其长期影响。”因此,我们需要密切关注这一领域的讨论,以便及时适应变化。
在第2章中,我们将引导你在自己的计算机上启动并使用Copilot,让你能够迅速开始编程。
● Copilot是一个AI助手,这是一个能够帮助人们完成工作的人工智能代理。
● Copilot重新定义了人与计算机的交互方式及编写程序的方法。
● Copilot改变了人们提升技能的焦点(减少对语法的关注,增加对提示工程和测试的重视)。
● Copilot具有不确定性,它有时能够生成正确的代码,有时却不能。我们需要时刻保持警惕。
● 针对代码版权、教育与职业培训问题及Copilot生成结果中的偏见问题,仍需要寻找解决方案。