程序员如何利用 AI 将自己的工作完全自动化?
AI的进步与局限
ChatGPT和Github Copilot的出现,一方面让很多人开始担心程序员会被AI取代,另一方面也有很多人跃跃欲试:想用AI来自动化自己的工作。就目前AI的发展情况,我的看法是AI目前的进步确实超出了很多人的预期,但AI的当前的局限也非常明显。客观的认识AI的进步和局限才能合理的评估AI的现状和未来发展趋势。首先来说一下AI的进步:ChatGPT让我们感觉到它是真的能理解人类的语言。以前的AI比如Siri和小度之类的语音助手会让你感觉是人工智障。就连微软CEO萨蒂亚·纳德拉(Satya Nadella)也在接受采访的时候说:“无论是Cortana(微软自己研发的语音助手)、Alexa、Google Assistant还是Siri,这些语音助手笨得像块石头(dumb as a rock)”。
ChatGPT第一次让我们感觉到机器真的能听懂人话了。Github Copilot则让程序员发现AI居然也能自己写代码了,以至于产生了被替代的恐惧。那么,最近AI突飞猛进的发展速度,已经能够将程序员的全部工作都完全自动化掉了吗?答案是否定的。除了看到AI的进步,我们也需要了解它的局限性。目前阻碍大模型落地的一个非常大的问题就是AI能理解的上下文长度太短了。GPT3是4k个token,GPT4是32k个token。看起来很长,但实际上是远远不够用的。就拿写代码来举例子,先不说微信这种巨无霸的软件系统代码,就是微信里面一个简单的业务应用代码中的单词就是十万起步。如果ChatGPT无法把一个应用的所有代码都作为上下文读取到模型里面进行推理,怎么能够指望它能根据我们的需求写出合格可用的代码呢?当AI自己无法理解全部的系统代码时,我们不能指望它完全自动化程序员的工作。
如何用好AI来自动化部分工作
虽然现在AI还没有聪明到能够完全替代程序员的工作,但是它已经是一个非常好用的助手了。下面是我个人在开发时使用AI自动化解决部分问题的技巧,大家可以参考一下。
让AI生成代码
程序员经常要接入各个平台的API接口,接入的时候要将各个API 接口封装一下,适配到对应语言。比如将JSON格式的响应结果封装成Java的类。下面是OpenAI的chat接口返回结果,如果是人肉写这个响应结果的Java类,至少要花半小时。如果让ChatGPT写,只要不到一分钟。
让AI写注释
程序员是一个非常双标的职业:我们特别讨厌别人的代码不写注释,也特别讨厌给自己的代码写注释。现在有了ChatGPT之后,就可以把写注释这个活交给AI了,AI反正是来者不拒的,不像人类喜欢偷懒。下面是我之前写的一段代码,其实不太好理解,但是我又懒得写注释,所以就让ChatGPT代劳了。
让AI帮忙查问题
曾几何时,Stack Overflow是程序员的标配,但ChatGPT出来之后,新一代的程序员大概就不会知道Stack Overflow的存在了。以前遇到问题我们需要在一堆答案里面不停地找真正的答案,现在ChatGPT能够直接告诉你答案。举个例子,当我遇到使用Python读取文件出现错误:not such file or directory的时候,我不需要打开谷歌去搜索,而是去问ChatGPT。
对AI未来的展望
说实话,目前AI的发展速度已经远超我个人的预期了。毕竟在使用过那么多人工智障之后,我们很难对AI报有多大的期望。但ChatGPT的出现重新点燃了我们的希望。现阶段AI的发展还在起步阶段,各种探索刚刚起步,它目前是一个Copilot(副驾驶)的角色。
前AGI时代
从软件工程的角度来看,我们这个行业从诞生之初就是在通过不断地抽象来提高生产力,使我们更加专注于最重要的事情:构建东西。对程序员而言,AI是更高级的抽象,就像Python之于C,降低编程门槛。比如之前傅盛就说自己在ChatGPT的帮助下学习Python。在AI的辅助下,一个人拥有一个团队的战斗力不再是一个梦想。根据帕累托原则(28原则),软件工程中的80%工作是用20%的时间完成的,其余20%的工作需要用80%的时间来攻克。有经验的程序员都知道,写代码是很快的事情,难的是调试。从目前的GIthub Copilot的使用体验来看,AI只能完成部分代码片段的编写。然而,在真正的工业级项目里面,少说也是上万行的代码,受限于GPT模型的token长度限制(GPT-3是4k),Copilot只能读取几千个单词的代码来预测之后的代码。不同代码之间如何连接完成一个具体的业务功能,目前Copilot是搞不定的。Copilot自动化了80%的复制粘贴式的重复劳动,剩下的20%的调试和设计工作还是需要程序员来完成。因此,现在谈ChatGPT这类AI模型替代程序员还为时尚早。Copilot的出现更像是高级语言替代低级语言的感觉,都是帮助程序员提高生产力。现在很多人都是用Python编程,因为ChatGPT的出现,以后可能都是用自然语言编程了。程序员的门槛降低了,但岗位还在。唯一的不同作为一名程序员,写代码不再是最主要的工作,如何更快更好地使用各种技术工具构建产品以及对业务的理解会成为最核心的竞争力。
后AGI时代
以上是对前AGI(通用人工智能过渡阶段)时代的个人判断,对于后AGI(通用人工智能出现)时代,我认为程序员的岗位将不复存在。就好像汽车出现之后,马车就消失了一样。程序员的工作其实很神奇,我们写的代码是让机器执行的,但写的时候却是更方便人阅读理解的。如果AI真的能够自己写代码了,那么它一定是直接用二进制写机器码,而不需要通过中间语言。今天我们讨论的各种让AI提升程序员生产力的方法(包括我文章里面提到的)都是从人类的角度出发的,我们让AI按照人类的思路和习惯来编程,本身就是反“机器”性的。AI天然理解二进制,而我们却让AI来用人类发明的编程语言来写程序,这并不是最优的方式。当AI已经拥有通用智能的时候,编程这个工作它可以完全以一种更高效的方式来完成。