经过近一个月的周末时间深入研究 Xcode、Electron 和 Tauri 等平台和框架,我终于创建了一个主要由 ChatGPT 编写的应用程序——令人惊讶的是,超过 95% 的代码都是由它生成的。对于像我这样没有编程知识的人来说,这不仅是一个产品挑战,更是一次迷人的旅程

虽然这个应用程序的界面很简单,但它成功展示了使用 ChatGPT 构建应用程序的潜力。然而,ChatGPT 还无法完全取代传统开发。
它仍然缺乏某些能力,比如设计界面,所以我自己设计并编写了 UI。此外,它无法处理项目的外围任务,比如将应用打包成 DMG 文件

虽然这次探索揭示了许多需要改进的地方,但也展示了使用 ChatGPT 构建应用程序的潜力。接下来,我将分享作为一个非程序员,我如何使用 ChatGPT 构建 macOS 应用程序,以及在这个过程中的一些经验
理解基础知识
构建 macOS 应用程序可能看起来相当复杂,特别是对于不熟悉编程的人。在开始之前,了解一些基本框架是很重要的。比如,你可以使用哪些框架来构建 macOS 应用程序?

在开始学习之前,我只听说过 Xcode 和 Electron。Xcode 是苹果官方的开发平台,用于创建原生应用,但学习曲线很陡峭。Electron 本质上就像一个 Chrome 浏览器,让你的应用相当于一个网页。后来,我发现了 Tauri——一个更小的替代方案,特别是在发现 Electron 相当臃肿之后

理解这些就像在游戏中解锁关卡;你需要更深入地挖掘才能发现它们的秘密。幸运的是,ChatGPT 可以在这方面指导你,例如:


按照 ChatGPT 的指导,你可以逐步分解并完成项目。如果遇到问题,再次向 ChatGPT 寻求解决方案。与在 Google 上搜索大量答案相比,ChatGPT 可以更有条理地指导你
按照 ChatGPT 的指导,你可以逐步分解并完成项目。如果遇到问题,再次向 ChatGPT 寻求解决方案。与在 Google 上搜索大量答案相比,ChatGPT 可以更有条理地指导你
https://github.com/electron-vite/electron-vite-react
这两个框架都可以快速帮助你建立基本结构。然后,你只需要理解并修改其中的代码(当然,你还需要告诉 ChatGPT 你正在使用的框架,并尽可能让它了解框架的结构和代码)
设计你的产品架构,明确你想要什么
掌握基础知识后,你可以使用 ChatGPT 编写你的第一个应用程序。然而,作为一名产品经理,我知道一个好的应用程序不是一蹴而就的。它需要明确的目标和功能——这就是你的产品架构
当然,你也可以自然地描述,让 ChatGPT 帮你做这件事。如果你只是在做实验,那没问题,但如果你希望你的应用程序最终能够实用,你仍然需要好好设计它
以 Nustime 应用程序为例。它的初衷很简单:计算每天或每周剩余的工作时间,帮助提高效率。在此基础上,我添加了其他功能来增强工作专注度
将应用程序的功能分解成小部分,比如 Nustime 可以分为:

这种分解方法让你可以向 ChatGPT 提供清晰的指令。例如,"每天的工作时间"可以进一步分解为默认时间设置、剩余时间计算和通知提醒

在分解功能后,根据你对复杂性的理解,让 ChatGPT 先处理简单的任务。例如,列表中的设置和通知功能比纯计算功能更复杂,不适合作为初始命令。如果你不确定某个功能的复杂性,可以咨询 ChatGPT,它可以提供指导。
例如,如果你不知道如何从初始框架开始,可以将你的需求和框架的代码粘贴到 ChatGPT 中,让它告诉你如何解决。下面是显示本地时间需求的实现过程:

关键是从简单的功能开始,逐步向 ChatGPT 介绍你的想法,并在此基础上不断完善。只有这样,ChatGPT 才能更好地理解和实现你的需求
例如,作为 Nustime 的第一个功能,你最终可以总结出一个简单的命令:
"我想设计一个工作时间功能,默认时间设置为 9:00-18:00。然后你将获取当前时间,计算每天的剩余时间,并以 00:00:00 的格式输出。请提供完整的代码并解释实现步骤"

当你将 ChatGPT 生成的代码粘贴到代码编辑器中时,你可以运行相应的效果。下图显示了 ChatGPT 生成的剩余时间,02:18:01 为计算结果

先构建界面,再构建功能
在我使用 ChatGPT 的经验中,我发现它在理解用户界面(UI)方面存在局限性。因此,我建议首先构思产品的基本框架,这将帮助你向 ChatGPT 提供更清晰的指令。我的实践告诉我,最好先勾画出界面,然后根据它请求相应的功能。这种方法可以帮助 ChatGPT 更好地理解你的需求

虽然如果你输入设计图像,ChatGPT 可以理解基本布局,但它在前端细节方面仍然不足。这意味着你可能需要花时间调整和完善这些细节。下图显示了初始界面框架

如果你的应用程序不涉及复杂的界面设计,比如只是一个菜单栏菜单功能,整个过程就会变得简单得多,你只需要专注于实现逻辑。我第一次尝试使用 Xcode 就是这样,我创建了一个简单的应用程序,没有任何界面设计


经过多次试验,我发现具有清晰 UI 设计的项目更容易让 ChatGPT 理解,大大降低了错误率并提高了我们的工作效率
你不是训练师,而是需求者
在使用 ChatGPT 时,我经常觉得自己像在训练宠物,试图教它走路或说话。但这样的努力是徒劳的。ChatGPT 只是一个充满知识的大型语言模型,它的作用只是利用这些知识与你对话

我曾经错误地认为,改善我的说话方式并添加礼貌用语会让它更聪明。但实际上,这几乎没什么区别。ChatGPT 的回应仍然基于它的编程
例如,我曾试图引导它帮我更改 Electron 应用程序中的菜单栏图标,但它告诉我 Electron 不支持这个功能。然而,当我查看 Electron 的官方文档时,我发现通过 Tray Icon 是可行的。那时我意识到,我需要告诉 ChatGPT 正确的方法,它才能给我需要的答案

对于大多数初学者来说,这可能是一个挑战,因为他们可能不熟悉技术生态系统。作为新手,我通常会尝试各种解决方案,并不断询问 ChatGPT 是否有更好的方法
同时,我还会考虑技术依赖的时效性。如果一个组件五年没有更新,我通常坚持避免使用它,从而改变 ChatGPT 的推荐策略
请记住,ChatGPT 的数据并不总是最新的。有时你需要查找最新版本信息,然后询问 ChatGPT 是否可以提供相应的答案
总之,在使用 ChatGPT 时,你不是训练师而是需求者。你需要明确自己的需求,而不是完全依赖 ChatGPT 的答案。在许多情况下,你仍然需要自己做额外的研究和验证
经常检查日志,学会调试
对于初学者来说,在终端中运行代码时面对一系列错误可能是最令人沮丧的事情。通常,我们对错误的理解非常有限,即使我们在互联网上找到看似相似的解决方案,它们也不一定适用于你的具体情况
幸运的是,有了 ChatGPT 这个强大的助手,解决这些问题变得容易多了。结合 Visual Studio Code + Github Copilot 的功能,我发现比以前更快地解决这些编码难题。你只需要选择特定段落或整个代码,并将错误消息粘贴到聊天窗口中,ChatGPT 就会根据你的代码快速生成解决方案。我通过反复尝试这种方式解决了问题,直到找到并修复了问题

但仅仅查看错误消息是不够的。有些错误可能涉及程序是否实际运行。例如,如果我在应用程序中添加设置功能,允许用户自定义工作时间(例如,从默认的 09:00-18:00 更改),添加日志输出就变得至关重要。在实现设置功能后,我会尝试操作它,如果我在终端中看到相应的时间日志输出,这意味着我已经成功实现了这个功能
我不确定对于有经验的程序员来说是否有更有效的方法,但对于像我这样的初学者来说,这种方法足够有效,帮助我快速定位和解决问题
不要气馁;胜利就在前方
我理解在使用 ChatGPT 时感到沮丧是很自然的,特别是在反复尝试后往往达不到期望。特别是对于不熟悉编程的初学者,你可能希望 ChatGPT 能够输出一整套代码,让你可以轻松地复制粘贴来完成任务。然而,由于输出长度限制,ChatGPT 有时可能只提供基本的实现方案。虽然这对有经验的程序员来说可能足够,但对初学者来说就像是一场拉锯战

经过长时间的尝试和失败后,你可能会变得烦躁,越来越不满意 ChatGPT 的输出。但在这种时候,我告诉自己不要灰心。也许是时候换个角度思考了。如果 ChatGPT 无法输出完整的代码,那就让它清楚地告诉你修改了哪几行代码。这样,你只需要多做几次输入和复制操作
另外,如果你发现自己一直无法取得满意的结果,不要犹豫,尝试与 ChatGPT 一起尝试不同的解决方案,比如改变实现逻辑或分段输出
有句中国谚语说"滴水穿石",这恰当地描述了在处理不那么聪明的 ChatGPT 时所需的耐心和坚持。如果一种方法不起作用,那就尝试另一种。毕竟,持续的努力最终会导致胜利
结论
在这些分享之后,如果你也受到启发想使用 ChatGPT 完成自己的项目,以下建议可能会有所帮助。祝你成功:
- 从小处着手:不要构思宏大的产品;那超出了 ChatGPT 的能力。从简单的功能开始,比如查看日期或制作倒计时
- 知识更新有限:请记住,所有大型语言模型的信息都是过时的。不要期望它们提供最及时的知识;这部分仍然需要你自己的研究和补充
- 建立基本框架:无论你做什么,都需要一个基础框架,产品开发也不例外。我们需要更深入地挖掘,不断向 ChatGPT 描述你的产品概念
- 正确的合作方式:没有"愚蠢"的人或完全"愚蠢"的 AI 模型。关键是找到最适合你的互动方法
- ChatGPT 只是助手:不要把 ChatGPT 当作万能的解决方案。目前,它只是一个帮手;真正的决策者是你
本文使用的工具:
- ChatGPT
- Github Copilot
- Visual Studio Code
- Xcode
Nustime 目前正处于开发的最后阶段,比如打包和签名,很快就会与大家见面。此外,我们还推出了另一个应用程序 EasyDevo,但不幸的是,由于这个应用程序的复杂性超出预期,ChatGPT 在这个项目中的参与有限
我们邀请大家试用 EasyDevo,我们将很快推出几个新应用程序。
