程序员用 GitHub Copilot 编程的六个月
GitHub 在 2022 年研究表明,使用 GitHub Copilot 的开发者完成开发任务比不使用的人快 55%。但近期GitClear 的最新报告则指出 AI 编程助手降低了代码质量和可维护性。那么在程序员真实的开发过程中,GitHub Copilot 到底值不值得去用?本文作者基于自身半年的使用体验,分享心得体会。
原文:https://www.thelis.org/blog/github-copilot
在过去的六个月里,我一直在使用GitHub Copilot编程,我发现这种方法真的可以提高生产力。由于Copilot的用户体验与我的集成开发环境无缝结合,所以最初我认为不会有太多地方用得上Copilot。但经过六个月的使用后,我发现我使用Copilot的方式随着时间的推移在不断变化和改进。
一句话总结:Copilot真的可以提高生产力,尤其是如果你愿意花时间调整工作流程的话。
背景介绍
我是一名二次创业者,目前在我的创业公司负责所有的编程工作。因此,我必须是一名全能程序员。我的日常工作是编写Web UI、编写一些后端业务逻辑、机器学习或编写文档。
我正在构建一款云应用程序,该应用程序可以从大型数据集中构建预测模型。我尽可能简化了技术栈,但仍然需要使用许多不同的技术。
Python:鉴于Python的数据和机器学习框架生态系统,选择该语言的理由显而易见。
Flask:简单、极简的Web框架。
SQL:状态需要存储在关系数据库中。
Pandas:尽管Polars和DuckDB受到了很多关注,但现实情况是大多数研究和文档都以Pandas开始。
HTML和CSS:Web应用程序很难避开这两种语言。
Bootstrap:我的前端开发技术很有限,所以我选择了Bootstrap,因为它具有专业外观的组件,很容易使用。
JavaScript:我使用少量JavaScript来改善用户体验。特别是,机器学习任务可能需要十几分钟甚至更长时间运行,因此通过UI查看轮询和更新状态会很有帮助。
PyTorch和许多机器学习库。
因此,虽然我的这款应用程序很简单,却涉及了五种语言(Python、SQL、JavaScript、HTML、CSS)和四个主要框架(Pandas、Bootstrap、PyTorch、Flask),我每天都需要与它们打交道。
我的工作流程
我使用带有Copilot插件的VSCode。最初,我以为Copilot只不过是更智能的自动补齐工具。在我编写代码时,有时Copilot会给出建议代码。我会阅读代码它建议的代码,如果合理就接受。这对于编写繁琐的样板代码非常有帮助,例如:
虽然我很感激枯燥的工作减少了,但似乎生产力只是有了些许提高。后来,我发现了Copilot的聊天功能。随着时间的推移,我发现使用Copilot能带来生产力的突飞猛进。
经过实验,我的工作流程调整如下:
弄清楚需求。例如,许多用户要求直接从BigQuery下载数据的原生支持。
设计解决方案。在白板上画出UI草图,查看代码,并搞清楚如何以可维护的方式将此功能添加到代码。如果我知道其他人也遇到过类似的问题,就会向Copilot寻求帮助。这是一个迭代的过程,我可能会写一些伪代码来帮忙形成自己的想法。
实现。这一步是Copilot能真正发挥实力的地方。例如,我需要创建一个执行X的函数调用,打开相关的代码,并在聊天框种输入“创建一个执行X的函数”。Copilot就能生成执行X的函数!
审核和测试。阅读代码,确保我能理解,并在阅读的过程中添加注释,并修复问题。
我发现Copilot的真正价值不是自动补齐,而在于能够根据我的设计写出整个函数的原型,这能为我节省大量时间。
Copilot代表了传统智慧
对于我来说,Copilot代表了解决特定编程问题的传统智慧。如果我需要解决一个编程问题,而且感觉以前一定有人遇到过相同的问题,我就会求助于Copilot。
在使用Copilot之前,我需要上网查这些代码。如今,网上的搜索结果中显示的许多商业网站都是为排名而优化过的,而非用户体验。而Copilot可以为我提供没有垃圾信息的上下文结果!
Copilot的聊天功能
使用Copilot的聊天功能时,最重要的一点是,它需要两个输入:你的代码和你在聊天框中键入的信息。请确保在提问之前将光标置于代码的相关部分。
下面这个例子凸显了Copilot的强大之处。栈追踪告诉了我错误发生的位置,所以我打开文件,并将光标放在了该行。接着,我将错误消息复制了进去。下面是Copilot的回复:
局限性
虽然Copilot代表了传统智慧,但有时你并不想遵循传统智慧。根据我的个人经验,在Python编程中,Copilot会严重倾向于使用SQLAlchemy,但我实际上并不怎么用。在所有UI样式上,Copilot倾向于使用JQuery,尽管我使用的是Bootstrap。我遇到的另一个限制是,每个问题只能提供一份上下文,即当前代码。实际上,Web应用程序有三个上下文:数据库架构、HTML模板和实际的业务逻辑。我相信这些问题会在未来得到解决。
使用Copilot编程
以下是半年前我告诉自己的有关使用Copilot编程的建议:
将Copilot视为传统智慧,并在相应的情况下使用。
使用聊天功能,并将光标放在你希望Copilot给出意见的代码上。
设计功能,编写伪代码,然后让Copilot提供详细的实现。
我发现,在Copilot的帮助下,我有了更多时间来关注需求和设计,而这应是我的工作重点。
对于我来说,代码正常工作时的满足感依然没有变化。无论代码是我自己编写的还是Copilot写的,我都能获得同样的成就感。
所以,我推荐使用。
推荐阅读: