🌑

Github Copilot 值得订阅吗?

Read in English

我个人使用 Copilot 加速编程已经有很长一段时间了。我发现了一些 GitHub Copilot 能给我带来很大帮助的使用场景。对我来说,Copilot 至少将我的编程效率提升了 30%。所以,用一杯咖啡的价格(每月 10 美元)来订阅它对我来说绝对是值得的。
在这里,我想向你展示一些 Copilot 能够加速我们开发的场景,同时也为你介绍一些类似的工具,供你在日常工作中使用。

测试代码

对于前端开发者来说,编写测试的一大痛点是对测试框架 API 的不熟悉。自动化测试通常包含一些简单的脚本以及大量的重复内容,而这恰恰是 AI 的强项。经过一段时间的使用,我发现 TDD(测试驱动开发)是将测试与 Copilot 结合起来使用的最佳方式之一。
Copilot 对各种类型的测试都有很好的支持,例如单元测试端到端测试(e2e)。Copilot 背后的数据集几乎涵盖了整个开源社区,你不必担心是否存在 Copilot 从未见过的 API。

尝试将 TDD 与 Copilot 结合

我将 TDD 与 Copilot 结合使用的原因在于,Copilot 会读取你的代码库并给出提示。所以如果我先写测试,Copilot 就会根据我之前写的测试来尝试生成代码。这节省了为了让 Copilot 生成代码而写不必要注释的时间。
下面是一个结合 TDD 和 Copilot 开发的简单 Todo 组件示例。

编写样式表

不喜欢记忆大量的 API样式规则。说实话,人类并不擅长记忆,但计算机擅长。所以当我需要用一些不熟悉的样式规则编写样式表时,我会让 Copilot 来帮我。比如,我对 grid 的相关函数和规则不太熟悉,所以我会用 Copilot 来帮我完成。

CSS with Copilot

创建有用的映射

前端开发者需要为本地化创建映射。我们可以直接让 Copilot 来完成,而不必在网上搜索。

Mapping with Copilot

生成桩数据

如果你写了大量测试,就需要生成足够随机的桩数据(stubs)。你会发现这些数据不过是一些相似重复的内容。Copilot 在这方面同样表现出色。

Stubs with Copilot

正则表达式 / 验证器

每当我需要编写正则表达式验证器时,我总是需要去网上搜索,然后打开一个在线正则表达式运行器来测试它是否正常工作。现在有了 Copilot,我们只需告诉它我们需要什么规则,它就会为我们生成表达式或验证器。当然,你也可以为此编写单元测试。

Validator with Copilot

信号流风格的数据处理

处理数据的一个强大技巧是将其视为信号流,这使得整个处理过程可以轻松地解耦为多个单元(如过滤、映射、归并……)。Copilot 在这种模式下表现良好。我们只需写一条注释告诉 Copilot(以及其他开发者)数据是如何流动的,代码就会被完美生成。
小贴士:拥有更高模块化程度的设计总是更容易创建修改测试当设计良好时,Copilot 也会生成更加准确的代码

Signal with Copilot

一些有用的工具函数

我随机从代码库中挑了一个 safeStringify 工具函数。结果发现 Copilot 写出的版本比我自己的更好

Utils with Copilot

编写 vscode setting.json(或类似配置文件)

另一个实用的场景是,当我想在 vscode 中配置某些内容时,我会只写一条注释,然后让 Copilot 来完成。大多数情况下,它都能正常工作。
下面是一个为 vscode 配置 eslint 自动保存的示例:

Vscode with Copilot

其他有用的工具 / 竞品

ChatGPT

我认为 ChatGPT 对我们来说是一个更强大的工具,因为它不仅限于代码生成。它还可以解释代码重构代码,并告诉你代码出错的原因。(有很多创意性的使用方式。)但Copilot 与 IDE 的协作更紧密。目前 ChatGPT 仍然是一个独立的网站,其 vscode 插件并不好用。

查询

随意向 ChatGPT 提问任何内容。例如:如何在 Linux 中安装 xxx?社交网络应用的最佳数据库是什么?我有这样一个系统……我如何改进它?学习 React 的最佳资料是什么?

Query with ChatGPT

根据用例列表添加测试

告诉机器人你的用例是什么,它会给你非常准确的测试代码。太棒了!

Tests with ChatGPT

解释代码

它可以非常清晰地解释你的代码。一个技巧是你应该尽可能地提供上下文,否则机器人会根据函数名和参数来猜测函数的用途,这可能导致准确性降低
下面是我从教材中随机挑选的一段代码片段。

Explain with ChatGPT

重构

令我震惊的是,它不仅提供了重构后的代码,还告诉你为什么要这样重构

Refactor with ChatGPT

为什么我的代码出错了?

告诉你代码出问题的原因。在学习新语言或新库时非常有帮助。

Broken with ChatGPT

Tabnine

Tabnine 的功能与 GitHub Copilot 基本相同,但它支持更多编程语言强调隐私保护。此外,GitHub Copilot 是所有语言共用一个模型,而 Tabnine 更倾向于使用个性化的语言模型。这会导致两者在建议上有一些差异
我试用了 Tabnine Pro,但它并没有像我预期的那样好用。它似乎没有读取我的代码库,甚至在 JS 文件中提供了 TS 语法
我的建议是:如果你使用的语言被 GitHub Copilot 支持,请优先使用 GitHub Copilot

Tabnine compare with Copilot

总结

AI 还有很多其他可以帮助我们提升生活质量的场景。但关键原则在于了解人类擅长什么,以及人类的局限性在哪里。 我是一个不喜欢做重复工作或记忆大量细节的人。所以我非常高兴 AI 出现来帮助我完成大量工作。AI 会取代人类吗?可能不会。因为目前 AI 仍然没有像人类那样的创造力。 但在 AI 的帮助下,我们可以专注于自己擅长的事情,更高效、更愉快地完成工作。

, , — Dec 18, 2022