引言
随着 AI 技术的快速发展,程序员的工作方式正在发生翻天覆地的变化。作为一名身处 AI 浪潮中的开发者,我既感到兴奋,也难免有些焦虑。兴奋的是,AI 工具正在全面提升我们的生产力;焦虑的是,像 Copilot 这样的 AI 辅助编程工具,可能会彻底颠覆传统的软件开发流程,甚至威胁到程序员的职业生存。
但无论如何,我们无法抗拒时代的潮流,只能积极拥抱变化,努力成为“未来世界的幸存者”。本文是我深度体验了 GitHub Copilot、ChatGPT、New Bing 和 Cursor.so 等 AI 辅助开发工具后,对这些产品的一次横向评测。希望通过这篇文章,你能快速找到适合自己的 AI 助手,并显著提升开发效率。
评测工具
- GitHub Copilot
- ChatGPT (GPT-3.5)
- New Bing
- Cursor.so
这些工具可以结合使用,提升开发效率,因此它们之间并不是互斥关系。文章最后会给出总结和我的个人建议。
GitHub Copilot
简介
GitHub Copilot 是由 GitHub 和 OpenAI 合作推出的一款 AI 代码辅助工具,基于 OpenAI 的 GPT 技术,能够为开发者提供实时代码提示和生成功能。它就像一个 AI 助手,帮助开发者更快速、更高效地编写代码。
当前版本的 GitHub Copilot 基于 GPT-3 模型,能够分析上下文并推断出应该编写的代码。它支持多种编程语言,如 Python、JavaScript、TypeScript、Ruby 等,并能与主流的集成开发环境(IDE)和文本编辑器无缝集成。
使用体验
我已经深度使用 Copilot 近一个月,但每当我和同事讨论它的体验时,仍很难用语言准确描述。以下是我总结的几个关键点:
- 熟悉语言:它能帮助你减少重复性模板代码的编写。
- 陌生语言:它能准确推断你的意图,直接生成代码,省去查询 API 文档的时间。
- 片段生成:它擅长顺着你的心流生成代码片段,但很难从零开始生成完整的代码,即使生成了,通常也需要手动调整。
常用功能
- 基于上下文生成代码
它能根据函数名、类名或注释推断你想写的代码,并帮你填充。 - 基于代码生成注释
反过来,它能理解你的代码并生成注释,只需在代码前加上//
前缀。 - 帮你起变量名
对于英语不好的程序员来说,这是一个福音。毕竟,编码的 30% 时间是在想变量名。 - 代码讨论
你可以在代码中与 Copilot 讨论,它会总结你的上下文代码,并给出“合理”的解释。
编码能力
独立编写:单例模式
我让 Copilot 独立编写一个单例模式。它生成的代码基本正确,但在某些细节上需要手动调整,例如在单例模式中未考虑双重检查锁机制。
java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
注意:由于单例模式在网上有大量公开资料,Copilot 生成代码的效率较高,但这并不代表它在所有复杂代码场景下都能准确补全。
补全现有代码
在测试中,Copilot 能根据项目上下文补全代码,生成的代码质量较高,通常无需大幅修改。
不足之处
- 隐私问题:所有代码上下文通过 HTTPS 传输到云端(微软的服务器),虽然微软承诺不会泄露代码,但在国内网络安全环境下,使用需谨慎。
- 复杂逻辑理解有限:对于复杂的代码逻辑,Copilot 的理解能力有限,它更擅长处理网络上有大量公开资料的代码段落。
ChatGPT
简介
ChatGPT 是一款基于 GPT 模型的聊天机器人,能够进行自然语言对话。它不仅能回答用户的各种问题,还能学习和理解用户的需求,提供更精准的答案和建议。
得益于 GPT 模型的强大语言处理能力,ChatGPT 能够理解代码中的自然语言描述,并具备一定的代码理解和生成能力。
编码能力
独立编写:单例模式
java
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
ChatGPT 生成的代码非常标准,甚至考虑了双重检查锁和 volatile
关键字的使用。
复杂问题处理:Kotlin + Reactor 并发接口
kotlin
fun processStrings(strings: List
return Flux.fromIterable(strings)
.flatMapSequential { str ->
Mono.fromCallable { str + str }
.subscribeOn(Schedulers.parallel())
}
.collectList()
.block() ?: emptyList()
}
ChatGPT 能够生成符合要求的代码,但在某些场景下会给出错误答案,需要多次提问才能得到正确结果。
不足之处
- 复杂代码设计能力有限:对于不常见的复杂问题,ChatGPT 的表现并不完美。
- 无法全程辅助编码:它不能像 Copilot 那样实时生成代码。
- 缺乏项目上下文:它无法读取整个项目的代码,无法提供 Copilot 那样的上下文支持。
New Bing
简介
New Bing 是微软推出的一款结合了 ChatGPT 和 Bing 搜索引擎的对话机器人。它能够回答用户的复杂问题,并提供详细的答案和建议。
编码能力
独立编写:单例模式
New Bing 生成的代码与 ChatGPT 相似,但在某些细节上需要手动调整。
复杂问题处理:Kotlin + Reactor 并发接口
New Bing 生成的代码有时会出现编译错误,需要多次提问才能得到正确结果。
不足之处
- 复杂问题处理能力有限:与 ChatGPT 类似,New Bing 在处理复杂代码设计问题时表现一般。
- 缺乏项目上下文:它无法像 Copilot 那样提供强大的上下文支持。
Cursor.so
简介
Cursor.so 是 OpenAI 最近推出的一款 IDE,内置了类似 GitHub Copilot 的插件。它的最大优势是免费使用,因此受到了广泛关注。
编码能力
独立编写:单例模式
java
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
Cursor.so 生成的代码非常标准,甚至考虑了双重检查锁和 volatile
关键字的使用。
补全现有代码
Cursor.so 能够根据项目上下文补全代码,但服务稳定性较差,经常出现连接问题。
不足之处
- 服务不稳定:经常出现连接失败的情况。
- 基础功能缺失:不支持插件市场,甚至没有集成版本控制功能,不适合开发大型项目。
总结
GitHub Copilot
优点:
– 实时生成代码,提升开发效率。
– 支持多种编程语言,适用性广。
缺点:
– 可能存在隐私问题。
ChatGPT 和 New Bing
优点:
– 随时随地可用,是查询问题的完美替代品。
缺点:
– 无法全程辅助编码,缺乏项目上下文支持。
Cursor.so
优点:
– 免费使用,体验 AI 辅助编程。
缺点:
– 基础功能缺失,服务不稳定。
一句话总结:如果你想提升编码效率,GitHub Copilot 结合 ChatGPT 是一个可行的方案。如果暂时不想为 Copilot 付费,可以只使用 ChatGPT。Cursor.so 目前的使用体验不够好,建议等待后续版本更新。