目录
0.写在前面
过去几年,AI 的发展速度超出我们想象。在几年前人工智能这个概念在我看来还只是一个可能永远太不成的科学幻想,而如今它已经实实在在地融入到我们生活和工作的方方面面。
从 ChatGPT 体现出来的理解能力,到 Midjourney 和 Stable Diffusion 在图像生成上的应用,再到 AutoGen 在多 Agent 协作上的进展,以及 AutoML 在自动化机器学习上的突破,都无不昭示着人工智能时代的到来。
这不禁让作为开发者的我希望亲自尝试一下 AI 对开发过程的影响,并畅想 AI 融入工作流将会为未来工作模式带来的变化,以及 AI 最终将会引领人类社会走向何方。
1.AI + 开发 几种模式
下面总结了几种AI 辅助工作的模式
- 生成模式(Generative Mode)
- AI 用于生成内容,如文本、代码、图像等
- 适用于需要创造性输出的场景
- 分析模式(Analytical Mode)
- AI 用于分析数据、识别模式、提供见解
- 常用于数据分析、预测、决策支持等领域
- 交互模式(Interactive Mode)
- AI 通过对话或交互方式提供帮助
- 适用于客服、虚拟助手等场景
- 增强模式(Augmented Mode)
- AI 用于增强人类能力,提供建议或辅助决策
- 适用于需要人机协作的场景
- 自动化模式(Automation Mode)
- AI 用于自动执行任务,减少人工干预
- 适用于重复性高、规则明确的任务
对大数人来说,对 AI 的体验是从与 ChatGPT 的对话开始的。ChatGPT 的出现,让我们第一次可以与一个虚拟的 AI 进行自然语言的交流,并获得相对准确的回答。把问到的答案应用到实际工作中去,这可能是 AI 辅助工作的第一种模式,它取代了搜索引擎,成为我们获取信息和知识的工具。AI 产品提供商继而通过 AI-Agent 的方式组起支持多模态的 AI 产品,提供给了用户完成如数据分析、交互等更加综合的能力。
而像 Cursor 这样基于增强模式的 AI IDE 则提供了一种新的模式,它除了提供代码补全、函数建议、代码片段生成等功能外,还支持了代码生成、代码解释、代码优化、代码重构、代码测试、代码调试、代码文档生成等功能。这种对开发流程的增强,就好比为只会回答问题的机器人装上了手脚,让它可以直接帮你完成代码的编写,这种体验是颠覆性的。
因此,我尝试花了 2 周时间,在 Cursor AI 的辅助下,完成了一个 Jekyll 博客的优化,一个 iOS Swift 小应用的开发,一个 Web 全栈项目的开发。这么多开发内容在 2 周内完成,在过去是不可想象的。下面是这 2 周的一些实践和体会。
2. 使用 Cursor AI 辅助开发的效果
在开始之前,我想探讨一下开发工作(或者几乎所有稍复杂的工作),影响人们工作效率的因素有哪些。
以开发一个 iOS App 为例,作来一个从来没有接触过 iOS 开发的人来说,他需要了解 iOS 开发的基础知识,学习 Swift 语言,了解 iOS 开发的基本框架,熟悉 iOS 开发工具的使用,等等。这些过程可能花去他 1-2 个月的时间,而如果你没有计算机和编程基础,这个过程可能会长到离谱。绝大多数情况下,他会在没有开始开发之前就放弃了。
即便他终于花了几个月的时间,完成了上述的学习,当他开始写代码的时候,他发现自己卡在了第一步,当他尝试去解决第一个问题的时候,他发现他不知道如何搜索这个问题,因为他不知道如何描述这个问题,他甚至不知道这个问题叫什么。更可怕的是当他尝试解决这个问题的时候,他发现它是由另外三个问题引起的,而这些问题中的任何一个都足以让他放弃。这些问题可能来自于 iOS 开发本身,也可能来自于与 iOS 相关的其他领域,比如后端服务器的搭建,网络安全设置,App 的发布流程,等等。
总之,他的任何一个绝妙的 IDEA 可能难产于他试图解决这些问题的巨大门槛之前
。这种门槛是巨大的,当然也总有办法绕过它,比如找一个有经验的导师,或者找一个有经验的团队,但是这通常需要花费巨大的成本。阻止 IDEA 实现的门槛它就是门槛,它只不过是以不同的形式存在。
而我相信,Cursor AI 类产品出现意义,正是在于降低了这些门槛
, 或者说它为绕过这些门槛找到了另一种20美元/月的解决方案。
2.1-Jekyll博客工程优化
工程优化
安装完 Cursor AI 后,我首先尝试让它帮我优化我的 Jekyll 博客工程。这是我早就想做的一件事情,但是因为对 Jekyll 或 Ruby 的了解有限,我迟迟没有动手。因为本质上我只是想要快速地发布一篇博客,而 Jekyll 的配置对我来说过于复杂,我总是担心优化过程中会遇到各种问题,而正如上面所说的,当我尝试去解决一个问题的时候会遇到更多的问题,最终我会为了优化一个小问题而陷入到学习 Ruby 和 Jekyll 的深渊中。
我用 Cursor 打开了我的 Jekyll 博客工程,并告诉它我想优化我的博客工程。我担心它会因为不熟悉 Ruby 和 Jekyll 而无法完成任务,但是 Cursor 很快就完成了任务。它甚至通过对目录的分析,理解了我的博客工程的结构,不仅给出了优化建议,还帮我完成了优化,看着它在正确的文件上修改,我甚至有一种在看一个经验丰富的开发者完成工作的错觉。在优化的过程中,也出现了报错,当我习惯性地想去自己解决这些错误的时候,我意识到我完全可以把这个问题再交回给 Cursor 解决,于是我把错误信息粘贴到 Cursor 中,Cursor 很快就给出了错误的原因和解决方案,它甚至还分析了造成这个错误的原因,并跟我道了歉。
这是我第一次感受到 Cursor AI 的强大,它不仅能够理解我的意图,还能够通过分析我的工程结构,帮我完成修改,甚至帮我解决错误。
2.2-X-Poster 小机器人
从0构建
这是我第一次尝试使用 Cursor AI 从 0 到 1 完成一个小程序的开发。我先让它打开一个完全空白的目录,并且告诉它我想要制作一个可以自动发帖的机器人,并且跟它表达了我希望这是一个小程序,不需要复杂的架构和运行环境。
于是它根据我的需要为我生成了一个基于 Python 的小程序。在帖子的生成内容方面,我希望能调用 OpenAI 的 API,使用我自己编写的 Prompt,并把返回的结果组装成一个帖子进行发布。
我把这个想法告诉了 Cursor,Cursor 很快就根据我的需求生成了一个完整的 Python 小程序并告诉我该把 API Key 配置在哪里,甚至帮我生成了一个定时发送的配置,包括里面的 cron 表达式。
整个过程可能只有 15 分钟,而如果我完全靠自己,可能需要几天的时间来学习 Python 和相关框架,并完成开发。
2.3-iOS Swift 开发
最佳实践
如果说 Python 我还有一定了解,那么 Swift 以及整个 iOS 流程我都是完全陌生的。这一次,如果我让 Curor 打开一个空白目录,我连该问什么问题都不知道了。于是,我先跟 Cursor 聊了会儿
,让它告诉我开发一个 iOS App 需要哪些步骤,然后我根据它的回答,一步步地告诉它我想要做什么,它很快地在一个空目录中搭建好了一个可以运行的 iOS App 应用,过程中还是会有一些错误,我把错误信息粘帖给它,它可以尝试解决,又有新错误,我再粘帖,再解决,直到最后,我得到了一个可以运行的 iOS App。
但是,这个时候我遇到了一个新的问题,那就是当我想要对现有功能进行优化时,Cursor 有时会因为我的表述不够准确,而将代码生成成我并不想要的样子,这个时候我本能地再次向它阐述我的想法,结果几轮修改后程序已经变得离我想要的越来越远,并且最令人沮丧的是由于我并不真的理解 Swift,我根本没有能力去梳理已经变得杂乱无章的代码。于是摆在我面前的就只有两种选择,要么接受 Cursor 的修改,要么只能回到我自己从头开始学习掌握 Swift 的老路上去,因为它已对我来说已经成为了一个黑箱
,我第一次感觉到无法驾驭的失控感
。
于是,我改变了策略,毕竟我是个比 AI 更聪明的人类。这次我除了告诉 Cursor 我的 IDEA 以外,我还告诉他请选择一种符合"最佳实践"
的开发模式,并在生成文件和代码的时候给我解释每一步的意图。这一次,它推荐了使用 VIPER 架构,并生成了一个完整的 iOS App 工程,包括了 View,Presenter,Interactor,Entity 和 Router 等文件,并且生成的代码中还包含了许多注释,解释了每一步的意图。这是一个非常清晰的架构,通过依赖注入的方式,将各个模块解耦,并且通过协议的方式,将各个模块之间的通信也做了清晰的定义。我突然感觉清晰了,现在,我可以给出更明确的指示
,比如“请在 View 中添加一个按钮,点击它可以将数据从 Interactor 中传递到 View 中”,Cursor 就会在 View 中添加一个按钮,并生成相关的代码。而不会像之前那样我只会说“我想要一个可以拥有 AI 自动生成能力的 TODO 列表应用”这么笼统的描述。能提供这种更为清晰的指引,同时也说明了我习得了更多相关的知识,这是一个与 AI 共同进步的正向过程
2.4-Web 全栈开发 (The Build of Learn-with-helen.com )
驾驭复杂
在顺利完成了一个能够使用的 iOS App 后,我决定把从上面掌握的与 AI 协作的经验应用到一个更复杂的开发场景中:Web 全栈开发。并且为了增加难度,同时也为了自我学习,我决定使用一些我不太熟悉的但又是相对主流的框架和技术栈。
总的来说,这是一个前后端分离的 Web 应用:
- 前端使用 React (Npm)
- 后端使用 Spring Boot (Gradle)
- 数据库选择 PostgreSQL
- 使用 Nginx 作为反向代理
- 使用 Docker 作为容器,用 Docker Compose 来管理容器
- 把代码放在 Github 上,使用 Actions 来管理 CI/CD 流程
- 使用 AWS 的 EC2 服务器来部署
- 挂载域名,并使用 Let’s Encrypt 来开启 HTTPS 访问
在创建它的过程中,先通过与AI的沟通,我选定了技术路线
,然后我先让 Cursor 按照最佳实践为我搭建了一个前后端分离的工程架构
,并要求它解释每一个目录(尤其是 React 相关的)的意图。
当我告诉它我的一个需求时,我要求它告诉我该怎么做,在开始生成或修改代码之前为我解释每一步的意图
,以方便我更好地理解并通过给于更明确的指令
指引它完成工作。
这是个非常有意义的过程,它让我跳过了学习各种框架与技术的前置时间,而直接用一种更高效的方式在完成开发的过程中帮助我理解了各种技术。这是一种前所未有的体验,似乎让我瞥见了未来 AI 完全融入人类工作流后会有的样子。
最终我花了一周左右的时间,在 Cursor 的辅助下,几乎没有写过几行代码的情况下,完成了一个完全容器化管理的,支持 CI/CD 流程的可以运行的 Web 应用。
没有 Cursor 的帮助,我可能需要花几个月的时间来学习各种技术,并完成开发,而更可能的情况是,我可能根本不会开始,现在我不仅在一周内完成了它,并且还掌握了很多新的技术,简直不可思议。
(具体过程请参考: The Build of learn-with-helen.com)
3. AI 融入工作流将会为未来工作模式带来的变化
通过2周的实践,我总结了一下AI在开发过程中带来的变化:
- 创造门槛降低
- 有效的最佳实践获取方式
- 不用关注细节,关注想法
- 全新的学习方式
我还想分享我在与AI协作过程中所感受到的一个非常有趣的事实:
AI + Gaslight = 无限潜力
在为 learn-with-helen.com 开发前端界面的过程中,我试着让 Cursor 为我设计一个“漂亮”的前端界面,但它为我生成的界面总是不能让我满意,我甚至一度怀疑 AI 在设计方面的能力可能不过如此了。
我试过几种方式让它变得更好,比如我重新表述我的要求“更漂亮、更清新一些”、“标题的颜色可以更淡一些”、“整体风格可以更时尚些”,但结果总是差强人意;
又比如我尝试把我比较中意的网站的链接直接粘贴给它,让它参考着生成,结果它生成的界面还是有些生搬硬套,与现有的界面非常不协调。
直到某一次,我在无奈之下打算跟它抱怨几句,我说”你作为一个专业而质深的 UI 设计师,理应设计出非常有质感的高品质的界面设计”,在我不报希望的情况下,它生成的界面让我大吃一惊,生成的界面甚至超乎我的预期。
于是我意识到了一个 AI 与人非常不同的特性,那就是作为不论你如何 Gaslight 我说我应该是一位“资深而专业的设计师”,我都是无法真正为你设计出好的作品来的;但“资深而专业的设计师”的知识其实是已经存在于 AI 的“大脑”中的,而它只是不知道自己拥有这些知识,你要做的只是告诉它“你能行!”它就能发挥出它更大的潜力。
当我们把 AI 当作一个像人一样的助手去协作时,还需要意识到它与人的不同。在未来,说不定对 AI 的 Gaslight 或者叫激励会成为一个新的职业技能!
过去这2周的高效开发体验,我不禁思考AI与工作关系的进化可能性,我把它分成了4个阶段:
- 第一阶段:知识问答:我提问题,它回答
- 第二阶段:辅助创造:做我助手,帮我完成工作
- 第三阶段:自主创造:我提要求,它无障碍完成
- 第四阶段:自我进化:我不提要求,它自己设定目标完成
Cursor 有别于 ChatGPT 的地方在于,在程序开发这个场景下,它有了“手脚”,除了回答问题它还会操作你的文件和代码了。
想象一下,如果为 AI 装上物理的“手脚”,比如 Tesla 将要发布的Optimus 机器人,当它成像 Cursor 一样操作物理世界的事物,能自己给自己设定目标比如“为自己制作一只更强大的手臂”并完成了这个任务,那么未来的世界将会发展成什么样子?