生成式 AI 的爆发已经开始改变了很多行业的工作方式,但对于软件工程来说,转型才刚刚开始。
不可否认 Github Copilot 成功的引发了一场 AI 编程工具的浪潮,在其《Research: quantifying GitHub Copilot’s impact on developer productivity and happiness》这篇文章中对 Copilot 为开发者的生产力和幸福指数做了一个研究,结果发现
报告地址:
https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/
但是当我们把眼光放到整个软件工程行业的时候,才发现 Copilot 可能只是 AI 改变软件工程师工作方式的开端。
关于 Copilot 可以查看 与 AI 结对编程,好搭档 Copilot
红衫资本最近发布了一篇文章《Developer Tools 2.0》,该文不仅定义了”开发工具 2.0“还整理了一张图,用以展示现有的开发工具在不同的软件研发阶段的应用。
如下:
这图本质上是一个表格,每一行从左到右代表了软件的时代版本,分为
列的话从上到下代表了软件开发的各个阶段,或者说生命周期,分别为
接下来我们从上往下来分析。
Deployment 所属区域中,软件还是集中在 Incumbents(主流) 和 Challengers(挑战者) 中,我们可以看到很多熟悉的产品,比如 Datadog、Grafana、Aws、Jenkins 等。
目前还没有 Deployment 工具被归属到 Dev Tools 2.0,算是空白
在 Implementation 中,目前已有很多 Dev Tools 2.0 了,比如 AI code review 工具 Codeball、DEBUG 和对话工具 ChatGPT、AI 文档工具 Mintlify、以及 AI 代码补全工具 Copilot 和 Tabnine。
注意看细分的 write docs(文档编写) 和 write & maintain code (代码编写维护)中,在主流中这些都是人力维护,这说明当前的软件工程已经处于一个分水岭了。
对比 Deployment 的话,Implementation 的 2.0 可谓是百花齐放。
最后就是 Setup 了,目前只有 Cursor (一款集成了 ChatGPT 4 的代码编辑器)被完全定义为 Dev Tools 2.0
这里比较意外的是 warp 和 fig 居然没有被定义为 2.0 工具,因为我前段时间刚试用了 warp 终端,有兴趣的可以看看我发的视频。
21世纪的终端和 AI 相遇,会产生什么火花?Warp 体验
不过再回顾一下红衫资本对 Dev Tools 2.0 的定义:通过 AI 改变软件创造方式的工具。
这里其实也就想通了,warp 和 fig 只是带了 AI 的特性,但是还没有改变软件的创造规则,所以就被列入了 challenger 里。
从目前世面上的工具来看,AI 有巨大的机会改变软件工程,并且这是一个关于“谁”,而不是“是与否”的问题。
再再再次啰嗦一下红衫资本对 Dev Tools 2.0 的定义:通过 AI 改变软件创造方式的工具。
我考察了 5 个图中被归类为 2.0 的软件,看看它们是如何改变软件的创作方式的
软件 | 官网 | 状态 | 说明 |
Cursor | https://www.cursor.so/ | 可用 | AI 代码编辑器 |
Codeball | https://codeball.ai/ | 可用 | AI code review |
ChatGPT | https://chat.openai.com/ | 可用 | 对话平台 |
grit | https://www.grit.io/ | 需要申请内测 | 基于 AI 的代码迁移和升级工具 |
Adrenaline | https://useadrenaline.com/ | 可用 | AI 代码 Debug 工具 |
首先是 Cursor,我们可以用自然语言来写新的代码、维护既有代码,从这点来看它是超越了 Copilot 的(这不是指下一代 Copilot X )。
然后是 Codeball,它主要是用 AI 来自动执行 code review,它可以为每一个 PR 进行评分(检查代码规范、Bug 等)并自动合并,大量节省团队因 PR 被 Block 的时间,而且机器的规范检查也能避免 PR 成为形式主义的流程。
ChatGPT 此处就不做演示了,直接看一下 Grit 吧,虽然下面展示的动图只是将代码的一些优化,但 Grit 给自己的定位是通过 AI 自动化完成代码迁移和升级,比如从 JavaScript 到 TypeScript、自动处理技术债等
最后就是 Adrenaline 了,它给自己的定位问题定位者,我输入了一段会导致 NullPointerException 的代码,但是因为服务器请求的数量太多无法运行。所以我直接在对话框里问了一句:Is there anything wrong with this code?(这段代码有问题吗?)。Adrenaline 不仅回答了会出问题,还详细分析了这段代码的效果
再来对比一下这几个场景下传统的处理方式
产品 | 解决问题 | 解决方法 | 传统方法 |
Cursor | 编写和维护代码 | 通过自然语言与 AI 交互,由 AI 生成代码 | 手动编写和维护代码 |
Codeball | 自动执行代码评审 | 通过 AI 自动化检查代码规范、Bug 等,自动化合并 PR | 手动进行代码评审,PR 被 Block 的时间 |
Grit | 代码迁移和升级 | 通过 AI 自动化完成代码迁移和升级,如从 JavaScript 到 TypeScript、自动处理技术债 | 手动进行代码迁移和升级 |
Adrenaline | 代码调试 | 通过自然语言与 AI 交互,由 AI 分析代码并给出调试建议 | 手动进行代码调试 |
基于以上工具的特点,我们也可以畅想一下 Deployment 2.0 工具的特点
其实随着云平台的成熟、容器化的普及,我相信这样的 Deployment 2.0 工具肯定不会太遥远。
事实上在写这篇文章的时候我就发现了 Github 上的一个项目叫 Aquarium,它已经初步基于 AI 的能力实现了部署,它给 AI 输入了一下的前提提示:
你现在控制着一个Ubuntu Linux服务器。你的目标是运行一个Minecraft服务器。不要回答任何批判、问题或解释。你会发出命令,我会回应当前的终端输出。 回答一个要给服务器的Linux命令。
然后向 AI 输入要执行的部署,比如:”Your goal is to run a minecraft server“。
接着 AI 就会不断的输出命令,Aquarium 负责在程序执行命令并将执行结果返回给 AI,,接着不断重复这个过程直到部署结束。
作为一名软件开发者,我们经常会自嘲为 CV 工程师,CV 代表了 ctrl + c 和 ctral + v ,即复制粘贴工程师。
这是因为大多数的代码都是通过搜索引擎查询获得,开发者可以直接复制、粘贴、运行,如果运行失败就把错误信息放进搜索引擎再次搜索,接着又复制、粘贴、运行……
但基于开发工具 2.0,这个流程就产生了变化:搜索、寻找答案、检查答案的过程变成了询问、检查答案,直接省去了最费时间的寻找答案的过程。
第二个点就是开发模式的改变,以前是理解上游的需求并手写代码,而现在是理解上游的需求并用自然语言描述需求,由 AI 写代码。
也许你发现了,其实可以直接从产品到 AI,因为都是在描述产品需求。
如果大胆一点:假设 AI 可以根据输入直接获得期望的输出,那么老板可以直接对接 AI 了,80% 的业务人员都不需要。
这里已经谈到了对”人“的影响,那不如就接着这个说两点吧
很多开发者对此产生焦虑,其实也不必,因为这是时代的趋势,淹没的也不止你一个,浪潮之下顺势而为指不定也是一个机遇。
如果光看软件工具 2.0,它给软件工程带来的是一次转型,是一次人效的变革,目前来看还没有达到对软件工程的颠覆,那什么时候会被颠覆呢?
有一天有一个这样的游戏出现了,每个人在里面都是独一无二的,系统会为每个人的每个行为动态生成接下来的剧情走向,也就是说这个游戏的代码是在动态生成,并且是为每一个人动态生成。这个游戏的内存、存储空间等硬件条件也是动态在增加。 这就是地球 Online
短期来看,AI 还不会代替程序员,但会替代不会用 AI 的程序员。
原 Netscape(网景公司)创始人 Marc Andreessen 说过一句经典的话:软件正在吞噬世界。
人工智能领域知名科学家 Andrej Karpathy 在 2017 年为上面的话做了补充:软件(1.0)正在吞噬世界,现在人工智能(软件2.0)正在吞噬软件
Software (1.0) is eating the world, and now AI (Software 2.0) is eating software.
你准备好了吗?