背景

先介绍一下背景。我的主业是后端程序员,在此之前我是专职前端程序员,在 2023 年 7 月份,我开始用 React Native 写一个 side project, 那时候 AI 的能力还比较弱,所以那个 app 绝大多数代码都是我自己写的,这是我个人的背景。今年下半年,我试用了公司内部和外部的代码生成工具,这时候的 AI 已经不仅仅是更强大的补全功能了,而是更像是一个 agent 了,我很兴奋,玩了一整天。上周五,我突发奇想,有了一个 idea ,于是我就想尝试一下尽可能地用 AI 去实现这个小项目,试试到底能做到什么程度。

介绍一下这个项目

这个 App 是一个 iOS App ,Life Progress, 很简单,用户输入预期年龄和生日,然后生成一个图表来展示用户的生命进程,最重要的是,支持 widget 。 技术栈是 swiftUI ,虽然我对 swift 一无所知,但是 AI 会。 除了这个 App 本身,我还制作了 App 的 icon 和落地页。这两个也是 AI 生成的。 时间上整个项目我花了三天时间,不过中间要工作、带娃、看剧、玩游戏,所以当然不是 72 小时,按小时计的话,我只能给一个估计,可能是十几个小时左右。

App: https://apps.apple.com/us/app/life-progress-with-widget/id6740145361 落地页: https://lifeprogress.vercel.app/ Logo: https://i.imgur.com/hcgEiNh.png

我用到的 AI 工具:

Windsurf ChatGPT-4o Claude 3.5 Sonnet Gemini 2.0 Flash V0

开发

我是直接在 windsurf 上起项目,刚开始非常顺利,代码很快生成,文件结构也还 OK ,但是 iOS 项目的 .xcodeproj 工程文件没有生成,所以我需要手动在 xcode 中创建,这是一个小卡顿,但是不太影响。然后我就开始优化项目,提出新的需求和代码结构的优化,包括代码结构的优化、year/month 视图的创建、新增 tab 路由、新增 settings 页面。这一切都很顺利,几次迭代后,项目已经颇具雏形。当然这期间我也不断修改需求,好在这只是一个 AI ,不是真正的程序员,否则面对一天内改四五次需求的 PM 肯定早就暴走了。 不过这期间也有磕磕绊绊,主要是对需求的理解上,不过这怪我,没有表述清楚,AI 毕竟无法共情。 然后,我让 AI 开始实现 widget 部分,这部分出现了很多问题。主要是 1. 代码复用, 2. 新的 target 和项目配置

  1. widget 和主 app 需要代码复用这部分问题倒还好,但是由于代码复用,所以很多改动需要联动修改,AI 经常出现改了 A 处忘记改 B 处的情况,需要在 prompt 中主动 @ 。
  2. 新的 target 带来了新的项目配置问题,比如 iCloud 在两个 target 直接同步需要的配置、两个 target 需要配置 group ,以及复用的代码的配置等等,其实我目前仍然搞不明白这些配置到底要怎么做。但是 AI 更不明白,ChatGPT 和 Claude 都给不出来合理的解决方案,遇到错误给出的排查思路也没有什么帮助。但是 Gemini 2.0 Flash 给我很大的惊喜,能够给出一步一步的详细的指导,包括点击 xcode 的哪个菜单、修改具体哪一个配置项等等。所以到了后期我对几个 AI 的分工就变成了编码部分让 IDE 里的 Claude/ChatGPT 来做,debug 部分/配置问题部分让 Gemini 来做。

最后快要上线的时候,发现需要一个 logo 和落地页,于是我用 AI 来做这两部分。logo 部分我优先想到是一些 AI 生成 logo 的工具,但是发现生成效果都很烂,基本上跟我几年前用的套模版的那些 logo 工具差不多,还要收费。于是我又尝试用 ChatGPT 直接出图,但是 ChatGPT 的效果我不太满意,而且生成的图不能直接用,不是纯粹的 logo 尺寸和格式。于是我又转而用 Gemini 生成,但是我用的那个套壳工具 Gemini 貌似不能直接出图,我只好让 Gemini 给我生成 svg 代码,最终几次调教后,生成了一个我觉得超出平均分的 logo 。 落地页部分我直接用了 V0 ,效果很惊艳,但是不知道是网络问题还是什么,后续的修改失败了,用完了我的免费额度,于是我只好用 Gemini 生成了最后一个 page ,手动改了一部分代码。

感受

如我标题所说,整个过程里充满了惊喜、失望,整体而言,我的感觉就是“未来已来”。 整体而言,这个项目大约 90%+ 的代码是 AI 完成的,编码部分可能只占用了整个项目的 10% 的时间,但是在项目的构建、配置、debug 部分,可能花了我大概 90% 的时间,但是 AI 能给到的帮助可能只有 50%,主要原因是我对 iOS 开发所知甚少,但是 AI 可能预设了我应该有一些背景知识了,所以能给到的帮助不大。关于这一点在很多其他文章也都提到,就是 AI 编程的 “The 70% problem”,相信未来模型和工程都会更好地解决这个问题。 但是 AI 面对复杂项目仍然有很大的问题,这个项目已经很简单了,但是 AI 仍然会偷懒,会忘记项目的 context ,代码之间的关联关系等等,导致出现很多问题,所以在公司里的生产项目里,我仍然不太敢过于相信 AI 。 正确合理的 prompt 可以极大地提高 AI 的效率,比如说有时 AI 会丢失上下文,所以保证在 prompt 时提及正确的文件、目的很重要。清晰的思路、指令、方案拆解等有有助于提高 Ai 的效率。

未来

LLM 才出现两年,就已经有如此大的影响,所以我觉得未来,软件工程一定会有巨大的变化,目前所有的 copilot 、IDE 、agent 都只不过是这个变化过程中的探索产物。过去我们所有的软件工程原则,都是面向人的,我们需要追求代码可读性、需要代码易于理解,服务划分、代码仓库、文件结构等等,都是以人的可读性为目的的,我们的 IDE 、仓库、构建工具、CI/CD 也都是面向开发者设计的,那么未来,这些软件工程的基础设施,是否会在设计时就考虑到 AI 的接入?我相信一定会的。 LLM AI 会替代程序员么?我觉得不会,LLM 目前的能力仍然不足以应对复杂项目,我觉得未来也不能,但是 LLM 会大幅提高程序员的效率,这一点是毋庸置疑的,但是 LLM 也会制造更多的工作岗位,我们要做的就是 be water ,学习这个新的工具,适应这个新的时代。

举报· 103 次点击
登录 注册 站外分享
快来抢沙发
0 条回复  
返回顶部