2021年6月,GitHub发布了一个新工具。
它叫Copilot——一个AI编程助手。
你在编辑器里写一行注释:
# 计算两个日期之间的天数Copilot自动生成代码:
from datetime import date
def days_between(date1, date2):
return abs((date2 - date1).days)你写一个函数签名:
def quicksort(arr):Copilot自动补全整个函数:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)程序员惊呆了:AI真的能写代码。
Copilot是什么?#
Copilot是GitHub和OpenAI合作开发的产品。
它基于OpenAI Codex——GPT-3的代码版本,用GitHub上的开源代码训练。
Copilot集成到编辑器(VS Code、Neovim、JetBrains等),在你写代码时自动提供建议。
它可以:
- 根据注释生成代码
- 根据函数签名补全函数体
- 根据上下文建议下一行代码
- 生成测试代码
- 解释代码
- 重构代码
Copilot像一个"副驾驶",帮你写代码。
Copilot的影响#
Copilot改变了程序员的工作方式:
提高效率
程序员不再需要从头写每一行代码。Copilot可以生成样板代码、常用函数、测试用例。
有人估计,Copilot可以减少30-50%的编码时间。
降低门槛
新手可以用Copilot学习编程。写一个注释,看Copilot生成代码,学习编程模式。
Copilot帮助新手跨越"知道要做什么,但不知道怎么写"的鸿沟。
改变角色
程序员的角色从"写代码"变成"审查代码"。
你不再一行一行写代码,而是写意图,让Copilot生成,然后审查和修改。
引发讨论
Copilot也引发了争议:
- Copilot用开源代码训练,是否侵犯版权?
- Copilot生成的代码,版权归谁?
- 程序员会不会被AI取代?
Copilot之后#
Copilot之后,更多AI编程工具出现:
GitHub Copilot X(2023)
扩展Copilot的能力:
- 对话式编程:用自然语言描述需求
- 代码解释:解释代码的作用
- 测试生成:自动生成测试用例
- PR审查:审查代码变更
Cursor(2023)
一个AI优先的编辑器,深度集成AI能力。
可以用自然语言编辑代码,让AI重构、调试、解释。
Amazon CodeWhisperer(2022)
亚马逊的AI编程助手,类似Copilot。
Google Codey(2023)
Google的AI编程助手,集成到Google Cloud。
Tabnine
AI代码补全工具,支持多种语言和编辑器。
Sourcegraph Cody
AI编程助手,可以搜索和理解代码库。
AI编程的优势#
AI编程的优势:
效率提升
AI可以快速生成代码,减少重复劳动。
学习加速
新手可以通过AI生成的代码学习编程。
创意激发
AI可以提供不同的实现方式,激发程序员的想法。
错误减少
AI可以检测错误、建议修复。
AI编程的局限#
AI编程也有局限:
代码质量
AI生成的代码不一定是最优解。可能有效率问题、安全问题。
理解深度
程序员需要理解AI生成的代码。盲目使用可能导致问题。
调试困难
AI生成的代码如果有bug,可能更难调试。
过度依赖
过度依赖AI可能削弱程序员的独立思考能力。
版权问题
AI用开源代码训练,生成的代码可能涉及版权问题。
程序员的未来#
AI会取代程序员吗?
大多数人认为:不会取代,但会改变。
AI擅长:
- 生成样板代码
- 补充常用函数
- 写测试用例
- 解释代码
人类擅长:
- 理解需求
- 设计架构
- 做出权衡
- 创新思维
未来的程序员,需要:
- 学会使用AI工具
- 理解AI生成的代码
- 专注于AI做不到的事情
- 持续学习新技术
程序员的角色,从"写代码"变成"设计系统、审查代码、解决问题"。
AI编程的未来#
AI编程还在发展:
更智能
AI可以理解整个代码库,而不仅仅是当前文件。
更自然
用自然语言描述需求,AI生成完整的解决方案。
更协作
AI参与代码审查、架构设计、需求分析。
更自主
AI可以独立完成简单任务,人类只需要监督。
下一步:未来已来#
我们已经走了很远。
从结绳记事到算盘,从机械计算器到电子计算机,从真空管到晶体管,从大型机到个人电脑,从互联网到移动互联网,从大数据到AI……
计算机的发展,是人类智慧的结晶。
明天,我们来讲计算机的下一个50年。
今日知识点#
AI编程助手:使用AI辅助编程的工具,如GitHub Copilot、Cursor。AI可以根据注释或代码片段自动生成代码,提高编程效率。
代码补全:AI根据上下文预测下一行代码。Copilot、Tabnine等工具提供代码补全功能。
自然语言编程:用自然语言描述需求,AI生成代码。这是AI编程的发展方向。
思考题#
- AI编程助手可以生成代码,提高效率。你觉得程序员应该如何使用AI工具?
- 有人担心AI会取代程序员。你觉得程序员的核心竞争力是什么?
明天预告:未来已来——计算机的下一个50年,会有什么变化?
