和 AI 实习生一起开发应用是什么体验?
故事开始于某个下午,我因为错过一条消息而挨了骂,出国之后我常用的 IM 变成了 Messages,但不幸的是 Messages 并没有提供菜单栏图标。对于像我这样通常隐藏 Dock 栏的人来说,必须经常打开 Messages 检查消息,否则一旦错过通知就会错过消息。
经过一番搜索后,我发现了一个叫 Doll 的应用。它基本上就是把应用图标添加到菜单栏,通过 Accessibility API 获取 Dock 中的消息数量并在菜单栏上显示,这是一个非常简单的实现。使用了一段时间后,我发现在不同的菜单栏背景色下,Doll 只是简单地反转图标颜色,这看起来不太美观。于是我萌生了自己编写一个类似应用的想法。
(最终我们开发完成并发布了这个应用:Badgeify)
技术选型
考虑到我的技术栈以及这个应用不需要跨平台,可选的方案是 Electron 或者 Tauri。对于这样一个小应用,Electron 明显太重了,所以我选择了 Tauri。不过开发 Tauri 需要使用 Rust,而我对 Rust 不太熟。正好赶上最近 AI 很火,我决定让 Claude 3.5 Sonnet 来协助开发。
基本思路就是把它当作一个博学但偶尔会出错的实习生。就这样,我开始和我的 AI 实习生一起开发这个小应用了。
为什么选择 AI 实习生
- 利用 AI 学新语言和框架很快,我不熟悉 Rust 的时候正好用得上
- AI 能快速搞定大量重复性的代码工作,效率确实高
- AI 能完成我交给它的小任务,虽然过程中可能出错,但在我指导下最终都能搞对
用 AI 做编程助手,最重要的是要在过程中干预,引导它往你想要的方向走。所以我只把它当 AI 实习生,它给出的方案可能是对的也可能是错的,我不会完全信任。
协作分工
我有几年前端开发经验,UI 部分就不需要AI 实习生操心,我可以自己搞定。在这个小应用里,我主要让它帮我实现一些调用 macOS API 的小功能,比如把 SVG 转成菜单栏用的小 png 图,通过 Accessibility API 拿到 Dock 状态和应用消息数,还有其他一些我不太熟但它能搞定的任务。
它实现后的代码我会放到项目里跑,大部分时候代码都会报错,可能是参数不对或者用了过时的 API。这时候我就给它点提示,去 GitHub 找找相关资源或代码片段,让它慢慢修复,直到能正常运行。
有一次我让它帮我实现监控菜单栏背景色变化的代码。它想了个看起来很聪明的方案,用了一些 macOS API,代码也很简洁。但它完全没考虑各种边缘情况。最后在我指导下,换了另一种方法才搞定。这让我意识到,AI 生成的代码语法上没问题,但对实际业务需求的理解还是不够深入,这也是人类暂时无法被 AI 替代的原因。
当它老是出错陷入死循环的时候,就轮到我上场了。虽然我不熟 Rust,但这时候我会针对具体问题去学习,帮实习生解决问题。通过这种方式,我基本学会了 Rust,能写出像样的代码。最后大部分需要 Rust 的逻辑我都能自己实现。感谢 AI 实习生教我学会了 Rust。
发布上线
几周后,在 AI 实习生的协助下,我搞定了 MVP 版本,在部署了一些必要的服务后,我在 Reddit 上发布了。这个小应用包含了一些应用的 SVG 图标,开启了 macOS 模板图像功能,让图标能适应不同背景色。这个图像处理逻辑是实习生写的,经过一些调整后现在跑得很好,我挺满意。
发布后,我马上给 AI 实习生安排了新任务,一起搞了几个功能迭代:加了上传自定义 SVG 菜单栏图标的功能,这样我就能在菜单栏放各种奇怪的图标了。然后让它读我的代码,给点修改建议。有时候建议还不错,但大多数时候我觉得一般般,就没采纳。
这个项目不仅解决了最初的问题,还让我对 AI 在软件开发中的作用有了更深的认识。这让我开始思考 AI 在整个软件开发领域的潜力。
AI 能替代程序员吗?
关于 AI 会替代程序员的说法,我挺乐观的,因为它确实替代不了我。要不然我应该能完全依赖它快速开发这个应用。可惜我还是花了几周时间。核心功能开发用了一周多,剩下的时间处理其他相关服务和网站,这些 AI 帮不上忙。
和 AI 实习生合作了一段时间后,我开始思考 AI 在软件开发中的更广泛应用。它在某些方面表现不错,但局限性很明显,离不开我的协助。这让我对 AI 在编程领域的未来既兴奋又谨慎。随着 AI 发展,我们还是需要大量程序员做编码工作,但他们都会有个 AI 实习生助手来提高效率。那些能力不如 AI 实习生的人可能会被淘汰。
我越来越觉得 AI 不是万能的,而是个强大的工具。就像瑞士军刀,功能很多,但你得知道什么时候用哪个工具。有时候最好的解决方案可能就是不用 AI。
写在最后
我觉得随着技术发展,AI 会在更多领域发挥作用,但完全替代程序员不太可能。更可能的是出现新的「人机协作」模式,AI 负责重复性任务和基础编码工作,程序员专注于高层设计、架构和创新。
这就是和 AI 实习生一起开发应用的故事,希望我的经验能给其他想尝试 AI 辅助开发的开发者一些启发。