购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

软件在当今社会中扮演着至关重要的角色。很难找到一个不受软件影响或不因软件而改变的行业。制造业依靠软件来监控生产线和物流系统,更别提那些日益增多、执行具体操作的机器人了。在广告、健身等多个领域,大数据无处不在,而这些行业正是通过软件来分析和理解这些数据的。电子游戏和电影的制作同样离不开软件的应用。这些示例数不胜数,足以说明软件的重要性。

这一现象催生了一个显著的趋势:越来越多的人渴望学习编程。这不仅包括那些在大学中主修计算机科学、计算机工程和数据科学的学生,这些专业在过去十年中一直非常热门,也包括那些需要编写软件来评估自己的数据的科学家,希望将日常烦琐的数据任务自动化的办公室工作者,以及那些出于爱好,想要为朋友制作有趣电子游戏的业余爱好者。

尽管人们有着强烈的学习编程的愿望,但我们在计算机教育领域的长期研究揭示了学习编程面临的众多难题。即便你已经掌握了解决问题的方法,也仍需要向机器传达如何使用一种规则严格且不容有误的编程语言来实现目标。虽然使用Python这样的语言编写程序相较于使用打孔卡的机器代码,其难度已大大降低,但学习之路依然充满挑战。我们之所以深知这一点,是因为我们亲眼见证了许多充满动力和智慧的学生在初级计算机科学课程中屡遭挫折,他们往往需要经历多次尝试,才能获得成功。更糟糕的是,不少人选择放弃。

想象一下,如果我们能够与计算机进行更自然的对话,而不必了解那些常常让初学者感到困惑的烦琐语法规则,那该多好。这一愿景已经随着像Copilot这样的AI助手的出现而逐步实现,它们能够提供智能的代码建议;同样,ChatGPT也能够在接收到提示时撰写出合理的文本。本书专为那些希望在AI助手时代掌握编程技能的人士设计,我们很激动能与你一同开启这段学习之旅。

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这件事上花费数月的时间。如果你有意继续探索更专业的软件开发知识,这将是你在精通之路上迈出的坚实第一步。

通过本书的学习,你将能够编写出自己所需的基本软件,这些软件可以应用于数据分析、自动化执行重复性任务,甚至开发小游戏等多种场景。

与AI助手协作的挑战

我们期待你已经准备好投身于这个快速发展且不断成熟的技术领域。你在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 0u+zPFlF+drCDmDguUl5ps61SybxpNkpN4YkPxiXz7ObFUk6Qd8gN/w3DwIyU8ES

点击中间区域
呼出菜单
上一章
目录
下一章
×