• Copilot 将如何改变编程
  • 发布于 2个月前
  • 196 热度
    0 评论
在过去的十五年中,GitHub 已经成为编程领域中不可或缺的一部分。这个平台于 2007 年推出,现在已经有超过 1 亿名开发者使用它来进行协作、跟踪代码变更和存储代码。

在 2018 年被微软以 75 亿美元收购后,GitHub 正逐渐赢得另一个荣誉:彻底改变编程方式。推动这一变革的是一个名为 Copilot 的 AI 工具,它可以像 OpenAI 的 ChatGPT 生成十四行诗一样轻松生成代码。(实际上,Copilot 是由 OpenAI 的 Codex 驱动的,Codex 是一个基于从互联网上获取的代码进行训练的大语言模型。)

通过简单地按下 Tab 键,使用 Copilot 的开发者可以自动完成一行代码、生成代码块,甚至编写整个程序。据 GitHub 表示,已经有超过 1 万家公司(包括可口可乐、Airbnb 等公司)注册了 Copilot 的企业版,而微软自身有超过 3 万名员工定期使用 Copilot 来辅助编程。

最近,Freethink 采访了 GitHub CEO Thomas Dohmke,以详细了解 Copilot 将如何改变编程,以及基于 AI 开发引发的关于创新的问题。还谈到了为什么用 Copilot 编程是如此有趣,AI 将如何改变我们的学习方式,以及 Copilot 是否能解决那些仍在主机上运行 COBOL 的银行的问题。

下面内容是采访精简版。

Freethink:你认为在编程的性质方面会出现哪些变化?软件开发是否仍然会是专业的领域?或者你是否认为基于 AI 的无代码开发将变得更加普遍,以至于作为软件工程师的定义会有所不同?

Thomas Dohmke:我认为系统思维 —— 理解软件的复杂性并将一个大问题、挑战或新特性分解为小问题 —— 将起到越来越重要的作用。

我们从打孔卡发展到了几百行、几千行、甚至可能是数万行乃至数十万行代码。因此,作为开发者,我们需要能够管理这些解决大型复杂问题的庞大系统。你需要将它们拆分成小的构建模块。

开发者的技能将在于找出 “我需要拆分到什么程度,才能利用 AI 为我合成代码?” 至少在可预见的未来,我们仍然需要审查所有源代码,了解其功能,并进行安全审查、合规审查,以查看是否存在代码注入等问题,即有人试图向代码库注入有害代码。

开发者仍然是专家,他们了解代码并判断 AI 合成的代码是否真正符合开发者的意图。在未来的十年里,这可能会发生转变 —— 我们自己编写的代码与合成代码的比例会有多大。但我不认为我们离一切都是无代码开发的阶段已经很接近了。

Freethink:因为有了 Copilot,你观察到程序员的日常工作方式发生了哪些变化?

Dohmke:如今,程序员实际上并不会花太多时间来编写代码 —— 他们每天编写代码的时间通常只有两到四个小时。其余的时间他们会进行其他工作,比如参加站立会议、查看崩溃报告(或者也许是应用商店的评论中有用户反馈最新版本出现了问题,而你甚至无法复现这个错误)。

有了 Copilot,如果你每天只有两到四个小时用于写代码,你可以更好地利用这段时间。你可以将这段时间用于保持专注、完成工作并享受其中的乐趣。

虽然分心的事情并没有减少 —— 无论是 Slack、Twitter、手机还是 WhatsApp 消息,这些都不会消失。但是你可以更好地利用创造性的时间,将注意力集中在问题上。因为如果你不需要频繁地从编辑器切换到其他内容,你也会减少分心的触发因素。因此,我们观察到人们更能保持专注。

Freethink:你自己在写代码的过程中发生了什么变化?我不知道你现在能够投入多少时间来写代码,但我非常想知道由于出现了 Copilot,你自己写代码过程有什么变化。

Dohmke:对我来说,大部分是一些业余项目。但我首先想到的是:Copilot 带回了乐趣。通常情况下,会有很多干扰和其他事情需要处理。周末 —— 我们远离工作的时间 —— 在某种程度上是一个关于注意力持续时间的竞争:你是想出去散步呢?还是想组装一些乐高积木?还是想写代码?

当我有一个小时用于写代码时,Copilot 带回了乐趣,带回了创造力。它恢复了流畅感,因为你不必不断在编辑器、浏览器、搜索引擎以及像 Stack Overflow 或 GitHub 这样的工具之间切换,去寻找那三行代码 —— 我不知道,可能是为了让你正在构建的 iPhone 应用程序拥有圆角。

因此,我认为它带回了那种 “我正在构建自己的重大创意” 的感觉,那种感觉会在我有一个小时或两个小时的周日早晨时出现,此时其他事情还没有优先权。

Freethink:如果你在创建你的第一家初创公司时有像 Copilot 这样的工具可供使用,你认为你作为创始人的经验会有何不同?

Dohmke:我认为这将让我的生活变得更轻松。作为一家小型初创公司的创始人,你必须快速行动,因为这是生存的唯一途径。因此,如果有一种工具可以帮助你保持工作流程,让你快速创建原型、预览产品,并最终找到产品市场适配点,那将极大地增强你的能力。

我与许多初创公司进行过交流,我也是几个初创公司的天使投资人,他们都在使用 Copilot,因为他们明白,即使只是提高 20-25% 的生产力,也可能决定他们的生存。

Freethink:我很好奇你收集了哪些数据 —— 无论是轶事还是更正式的 —— 关于 Copilot 如何改变 GitHub 和微软自己的程序员的工作方式。

Dohmke:我们在 2020 年 8 月开始研发 Copilot,然后在 2021 年初向约 250 名 GitHub 员工或 “Hubbers” 首次提供了内部预览版本,得到的反馈令人震惊。人们非常兴奋,他们告诉我们,他们再也无法在没有 Copilot 的情况下写代码了。

我们测量了净推荐值(Net Promoter Score,NPS)[注:用户满意度的一种衡量指标],范围从 - 100 到 + 100。在我们的 250 名测试人员中,得到的结果是 + 73。我们从未在对开发环境进行的其他任何更改中看到过这样的数字。通常情况下,开发人员会说:“别动我的系统,我知道自己在做什么,Thomas,为什么要引入新工具呢?”

我们团队收到了极为积极的反馈,而且初期使用 Copilot 的人数保持得非常高,这个留存率比我们开发的其他任何产品都要高。通常情况下,当我们在公司内部推出一个新功能时,每个人在第一天都很兴奋,但到了第三天,大家就又回到了之前的习惯。但对于 Copilot,无论是在 GitHub 内部、微软内部还是我们的客户中,我们都没有看到这种情况发生。

Freethink:你是否有关于在 GitHub 上更广泛的开发者社区如何使用 Copilot,以及它对他们的生产力产生了什么影响的具体数据或数字?

Dohmke:当用户使用 Copilot 时,我们会追踪他们按下 Tab 键的频率以及在文件中由 Copilot 编写的代码量。目前这个数字的平均值是 46%—— 在启用 Copilot 的文件中,平均约有一半的代码是由 Copilot 编写的。仅仅这一事实就令人难以置信。

我们三年前开始开发 Copilot,推出预览版的时间已经接近两年了。自从推出以来,这个数字一直稳步上升。很快,80% 的代码将由 Copilot 编写。但这并不意味着,正如我们之前讨论的那样,开发人员将被取代。这意味着开发人员有更多的时间来专注于他们自己编写的那 20% 的代码。

当你使用 Copilot 时,你的编程风格会发生变化,因为你会更加明确。你会编写代码注释,可能还会提供一些示例。当你编写一个带有输入和输出的函数时,通过提供示例输入和输出,Copilot 会 “理解” 你想要做什么,并将其作为额外的上下文来生成代码。

实际上,我们从对 2,000 名开发人员进行的定量调查中了解到了他们对使用 Copilot 的感受。其中 75% 的开发者表示他们感到更加满足。他们告诉我们,使用 Copilot 在完成工作时需要的心智负担更小。他们在编写作为开发者常常必须完成的样板代码上花费的时间更少。

我们还进行了一项定性研究,其中我们让 50 名开发者使用 Copilot,同时有大约 50 名没有使用 Copilot 的开发者作为对照组,然后要求他们构建一个 Web 服务器。使用 Copilot 的组别比对照组快了 55%,这将改变整个行业。

不仅速度更快,他们还具有更高的成功率:78% 对比 70%。

Freethink:Copilot 对未来程序员的开发将产生什么影响?在学习编程的过程中存在一种紧张感,一方面我们对某些看似简单的事情感到沮丧,但通过反复实践,最终可以更深入地理解整个过程。我很好奇像 Copilot 这样的工具对于正在学习冒泡排序的高中生会有什么影响,他们只需按下 Tab 键,代码就会自动生成,而无需从头开始编写。

Dohmke:我认为我们的学习方式将发生彻底改变,学校教育方式也将发生巨大变革。

我们将更少关注记忆具体知识,如 1845 年的总统是谁,而更多关注学习方法。教师将扮演更像是教练的角色,帮助学生以自己的步调和方式利用技术探索各种主题。对于软件开发方面的孩子们来说,这将带来极大的便利。

在美国,我们很容易忽略一点,即编程中最常用的语言是英语。在美国成长的孩子可能比在巴西、中国或德国成长的孩子更容易理解英语。这对孩子们来说将是一种解放,因为他们可以用自己的母语向像 Copilot 这样的 AI 助手提问。Copilot 能够理解多种语言,并将代码合成为学生正在学习的编程语言,这样学生就能用自己的语言进行交流和提问。

我认为知识的重要性将减弱,而理解思维、探索内容的能力将变得更为关键。教师将与学生合作培养这些能力。学生们需要判断 AI 提供的答案是否确实适用于他们解决的问题,而不是仅仅接受模型生成的结果。

Freethink:在我看来,无论你选择的是医学还是计算机科学,要进行高级推理,你都必须具备一定的内容知识。

Dohmke:如果你使用 Copilot,你会相对快速地发现你仍然需要具备这个基础知识,无法绕过它。你可以向 ChatGPT 或 Copilot 提问 “如何构建 GitHub”,它会给出一个非常抽象的答案。

你必须具备能力去思考:“好的,现在我该如何将这个非常庞大的问题分解成小问题?” 而要做到这一点,你必须理解什么是数据库、什么是虚拟机、什么是容器。你必须在计算机科学领域掌握这些概念,才能让 AI 解答你的问题。

老师们,如果回到学校的例子,他们会立即发现这一点。如果学生试图通过作弊来完成家庭作业,他们不仅需要提供答案,还需要展示他们的解题过程。就像数学课一样:展示你使用 Copilot 构建项目的过程。

另外,每个软件项目都是独特的,构建超市的销售系统与构建在每个个体设备上运行并可能有 1 亿用户的 iPhone 应用程序之间存在很大差异。你仍然需要学习这些概念以及如何解决这些问题。我认为这对我们作为人类来说是一项更有用的技能,而不仅仅是了解编程语言的所有细节。

Freethink:作为一个一直非常支持开源的人,你认为开源在这里扮演着什么样的角色?

Dohmke:开源将在 Copilot 的发展中起到基础性的作用。OpenAI 提供给 Copilot 的模型是基于互联网上的开放数据进行训练的。这些数据不仅包括源代码,还包括各种其他文档。这使得 Copilot 不仅能够理解编程语言,还能理解人类语言。开源为这些模型的训练提供了数据集。

我们现在已经看到了许多开源的大语言模型。其中很多实际上托管在 GitHub 上,这让我们非常兴奋!GitHub 在过去 15 年中一直支持开源生态系统。基本上,我们的所有功能都对开源项目免费开放,我们希望继续支持这个生态系统。我们一直在为开源开发者的权益而奋斗,因为我们相信开源对于实现人类进步至关重要。

开源所带来的协作模式可能是目前存在的最无国界、无障碍的协作模式:来自许多国家的开发者相互合作,不关心我们在这个地球上所面临的各种冲突。

通常情况是,当你收到一个拉取请求时,你不知道对方是谁,他们的职位是什么,他们一直在做什么工作,是否接受过大学教育等等。这些并不重要。我认为,如果你想要向 Linux 内核贡献代码,没人会问你:“你是否有适当的教育背景和五年的工作经验?” 这不是开源协作的工作方式。

在 GitHub,这是我们所接纳的,并将始终接纳的一部分,作为我们授权和支持开源开发者的使命。我认为大语言模型将扮演重要角色,并有助于我们共同加速进步。

Freethink:你认为 Copilot 在开发新编程语言方面可能扮演何种角色?编程语言的受欢迎程度会有起伏,我很好奇 Copilot 可能对此产生何种影响。

Dohmke:你提到了编程语言的兴起和消退,我认为说得对。但它们永远不会完全过时。最常见的例子是银行和金融服务机构,它们仍在主机上运行 COBOL 语言。而且不仅仅是某个地方的银行,我在世界各地的任何一个国家与任何一家银行交流,他们依然在主机上运行 COBOL。

这是一个问题,因为编写 COBOL 语言的人们在 60 年代都已经退休了,他们不再需要为银行维护那些代码。Copilot 将在帮助公司现代化其代码库方面发挥作用,并且它将通过多种方式实现这一目标。

首先,Copilot 可以向现在需要负责维护遗留代码的开发人员解释代码。你可以突出显示代码并询问:“向我解释一下这段代码。” 一旦你获得解释,你实际上可以利用解释和代码生成针对该代码的测试用例。下一个合乎逻辑的步骤是,在与 “飞行员”(开发人员)进行迭代过程中,利用 AI 将所有代码重写为 Python。因为你生成了测试和解释 —— 这两者在 60 年代可能都不存在,很多代码也没有文档 —— 所以你能够将那些老旧的代码转换为新的代码库。

我们都在努力解决技术债务,不仅是前一代开发者的,也包括我们自己六个月前的代码库。大多数开发人员,无论他们六个月前写了什么代码,当他们现在看到它时,会说:“现在我能比六个月前做得更好。” 我们将看到更多的迭代,希望我们背负的包袱更少。

我认为另一种方式是,学习编程会变得更容易,而编程语言本身可能会趋向更人性化。不再需要编写大量的代码,而是可以写很多注释,然后由模型合成其余的代码。这些注释可以是德语、巴西葡萄牙语,实际上几乎任何语言都可以被这些模型理解,用于合成代码。

最后,我们还有一个名为 Copilot Voice 的预览产品,它可以帮助你用声音写代码,而不是用手 —— 这将使残障人士也能够参与,因为他们可能无法整天打字,例如由于重复性劳损伤害。

Freethink:当我教高中学生编程时,他们最难理解的是编程语言与自然语言的不同之处。让他们感到沮丧的是计算机会完全按照你告诉它的方式行动,就像一个让人讨厌的兄弟姐妹,总是做明显错误的事情,然后说:“技术上你说的就是这个。” 有了像 Copilot 这样的工具,你认为编程会趋向融合,更类似我们人与人之间的交流吗?

Dohmke:我认为你已经可以看到这种趋势。当你使用这些聊天代理时,它们不仅知道你刚刚输入的句子,还知道先前对话的上下文。对于 Copilot Chat 来说,它甚至知道你编辑器中的内容,不仅仅是你打开的文件,还包括相邻的标签页和调试器。将来,它们可能会拥有整个代码库或文件夹的上下文作为参考。

现在,你已经可以编写一个 HTML 文件 —— 一个网页,当你写代码时,借助 Copilot 的帮助,你可以说:“让这段文字变粗体。” 或者,“将这个区域居中显示在页面上。” 然后它会向你展示如何实现,并消除了我们过去对计算机是否能理解我们意图的沮丧感觉。现在,它真的可以理解了。

就在最近的一次会议上,我通过 Copilot 演示构建了一个贪吃蛇游戏。我说:“让游戏更漂亮”,它就输出了样式表。我从未提到要样式表,甚至没有给出 HTML 或 CSS 的概念。它通过理解我想要实现的目标上下文,自行找到了解决方案。

我认为与 Copilot 互动的最佳时刻之一是,你可以告诉它某个地方出错了。你可以直接说:“这不是我要找的”,或者 “这个不起作用”。

然后它会说:“哦,抱歉了。这是另一个你可以尝试的方法。” 它具有交互式模式,你不需要精确知道编程语言的语法,也不需要知道解决该问题所需的具体知识。你可以探索并自己找到解决方案。

Freethink:据我所知,Copilot 是建立在 OpenAI 的 Codex 之上的,Codex 可以看作是对过去代码的一种快照,涵盖了 2021 年之前的代码。我不知道是否有计划将 Copilot 连接到互联网,以便进行更频繁的更新,但我很好奇,不再频繁编写样板代码是否会导致一些潜在的损失。当你必须深入细节时,也许有 10 万人中的一人最终会想出更好的解决方案。然后,这个解决方案就会在开发者社区中传播开来。如果人们只是向 Copilot 询问基于昨天的代码的最佳解决方案,你认为创新本身会如何改变?

Dohmke:首先要考虑的是,大语言模型并不具备存储代码片段的库。它们是由数十亿个参数组成的神经网络,用于预测某种概率。对于语言模型来说,这个概率是下一个单词;而对于扩散模型来说,它是将噪声转化为图像的方法。

以视觉模型为例,尽管它们只是在现有艺术作品上进行训练,但它们可以生成全新的、以前不存在的艺术作品类别。比如,你可以要求它渲染以法国印象派的方式绘制的今天纽约的天际线。这样,它就会根据你的提示生成一张以莫奈或其他法国印象派画家的风格绘制的当代纽约天际线的图像。

训练集中并没有真正看起来像这样的图像,而是根据你的提示和噪声生成的。

我认为语言模型也是如此。它们可以生成全新的文本和代码,这些以前从未存在过的内容。因此,它们可以与开发者合作,实际上推动创新并产生新的算法或代码。但正如你从 “Copilot” 这个词可以推断出的,我们认为在这个创新过程中,人类 “飞行员”(开发人员)需要与 Copilot 进行迭代合作。
用户评论