Trip to WWDC!
因为 Swift Student Challenge 的缘分,今年我有机会去美国参加了一次 WWDC(全球开发者大会)。我从 2020 年开始看 WWDC。那一年因为疫情,WWDC 第一次转为纯线上举办,丝滑的转场一下就把我吸引住了,之后每年我都会蹲守直播。
WWDC 是 Apple 每年与开发者沟通的窗口。大会上会发布最新版本的操作系统,公布未来的开发方向,也会安排开发者课程。
在现场参加 WWDC 是很特别的体验。例如:
- 1.与自己喜欢的博主合影!
- 2.观看仅现场可见的 Craig 和 Tim 的短演讲!
- 3.享受 Apple 和朋友们的美食!
- 4.看到自己的名字出现在 Apple 的大屏幕上!
- 5.更重要的是认识了很多优秀的朋友
作为多年果粉,能在线下参加 Apple 的特别活动一直是我的梦想之一。感谢 Coding Club 和 Swift Student Challenge,让这个梦想这么快就实现了🥰
关于 Decode Dash
反思一:站在巨人的肩膀上
使用 AI 做 App 时,首先要选择高质量工具,并充分参考成熟方案。AI 应该帮助我们提高效率,而不是替我们决定方向。
此外,随着 AI 的发展,开源生态正前所未有地繁荣。在开始前,先让 AI 找找有没有类似的项目,或者工具链上能用的开源项目,这样可以在开发细节上少走弯路。
一个好的 AI 模型和工具,可以省下大量盲目探索的时间。有些时候不是你的能力不行,而是别人借助了更好用的工具。
延伸思考:结合最新框架与技术
如果作品能够结合 Apple 近几年发布或重点更新的框架、设计语言和系统能力,会更容易体现技术敏感度和探索价值。对 SSC 项目来说,这不一定意味着功能要更复杂,而是要让评委看到:作品不只是完成了一个 App,而是在主动利用 Apple 平台能力解决问题。
适合 SSC 的 Apple 技术例子
参考资源
- Apple Developer (external link to developer.apple.com):Apple 官方开发者网站,适合查找平台能力、设计规范、开发工具和示例项目。
- Swift Documentation (external link to docs.swift.org):Swift 官方语言文档,适合系统学习语法、类型系统和语言特性。
- SwiftUI Documentation (external link to developer.apple.com):SwiftUI 官方文档,适合查找界面组件、布局方式、状态管理和交互实现。
- Git Tutorial (external link to git-scm.com):Git 官方入门教程,适合学习版本控制、提交记录和基础协作流程。
- Codex 详细教程 (external link to bilibili.com):Codex 使用教程,适合学习如何用 AI 辅助完成项目开发与迭代。
反思二:选择自己热爱的领域
AI 可以扩展想法,但不能替代我们对问题本身的理解。项目越依赖专业知识,越需要选择自己真正熟悉的领域。
SSC26 我的经历
我选择古典密码学作为项目方向,是因为自己曾经学习过这部分内容。这个领域本身比较抽象,如果能通过可视化方式展示算法运行过程,理解起来会更加直观。
在学习过程中,我曾经做过一个小 demo(encrypt.tyrepo.com (external link to encrypt.tyrepo.com))来帮助自己理解算法流程。这个经历让我确认:这个方向不是凭空想出来的,而是来自真实学习过程中的问题。
(当然,这个 demo 是 2024 年做的,AI 味非常重,当时的模型也不够好,留下了一些 bug,这里就原汁原味地展示出来。)
启发
- AI 生成内容的质量,很大程度上取决于提问者的理解深度。
- 只有自己理解问题,才能判断 AI 的回答是否有足够的质量。
- 对技术、算法或原理类项目来说,可信度比功能数量更重要。
反思三:解决一个真实世界的问题
现在世界变化得很快,新概念很多,更新得也很快。很多人想用“系统性”的方法学习怎么用 AI,结果反而不知从何下手。但实际情况是,AI 每隔几周就有很大变化,几乎没有什么固定的体系可言。最好的学习方法就是 —— 找到一个生活中的实际问题,然后解决它。
问题的来源可以有很多,例如日常生活里琐碎重复的工作,一个你觉得很难用的 App,朋友的烦心事,一个对 AI 不友好的软件,一个你想了很久都没理解的知识点……
举个简单的例子:
我和一名高中数学老师闲聊时,对方说希望 AI 能帮忙整理试卷、讲义这些材料。
老师目前有的资源:
- 1.Word、PDF、TXT、PNG 等不同格式的输入材料(主要是试卷和讲义)
- 2.ChatGPT Plus
- 3.明确的应用场景(例如给一名初中学生出一套试卷,检测目前的水平)
- 4.一台 Mac
期望的输出是:
符合预期、格式规范的试卷和讲义
- 1.格式正确,页面结构稳定,不能出现乱码或者排版错乱的情况
- 2.为了保证题目的准确性,可以配置真题在卷子/讲义中的比例
- 3.需要能够根据需求直接微调页面中的元素
- 4.尽量减少需要手动配置的步骤
- 5.需要详细的答案,并保证答案的正确性
项目的难点是:
- 1.Word 文档对 AI 不友好,Markdown 自由度不够,LaTeX 用来写试卷有点大材小用,结构也不稳定
- 2.输入材料的格式不统一,有些对 AI 友好,有些不友好,AI 也无法跨 Word 和 PDF 搜索里面的内容
- 3.有些材料是图片,使用前还需要先做 OCR
- 4.AI 有幻觉
- 5.老师对复杂的 App 和代码不太了解,整体不能做得太复杂
我的实现思路:
做一个 Mac App,用可视化交互配置模型上下文,用腾讯的 IMA 管理和解析试卷,再调用 Codex CLI 生成结构化的试卷。
做一套满足老师排版要求的结构化文档格式,并提供编辑和可视化预览。
有三个好处:
- 1.用代码约束排版,让 AI 不用花太多时间和 Docx 搏斗
- 2.结构化的输入和输出让用户和 Agent 可以一起编辑
- 3.保留可扩展性(例如之后可以迁移成网页试卷)
同时意味着,放弃:
- 1.Windows 及其他平台的兼容性(其实也并不难兼容,但老师不需要)
- 2.自由度很高的编辑(但收益是不会出现排版错乱)
- 3.没有接入 API,需要绑定 OpenAI 订阅(但是能节省大量的开发和调试成本)
……(省略一万字的决策过程)
一个好产品需要很多思考和迭代,并非一蹴而就。解决一个真实的问题,可以帮助开发者不断地迭代和优化自己的作品。
反思四:围绕限制做减法
SSC 作品和平时自己做项目不一样。SSC 有明确的提交要求和体验时间限制,还要考虑评委的理解成本,所以设计时必须围绕这些限制做减法。
SSC 的典型限制
- 展示时间有限,例如整体体验不能超过三分钟。
- 用户或评委通常是第一次接触作品。
- 现场环境离线,不能依赖网络功能。
- 评委需要在短时间内理解作品价值。
我的反思
我当时的作品加入了较多可视化和交互引导,但后续反馈说明:不了解密码学的用户,即使完成了操作,也未必真正理解核心原理。
问题一方面在于引导不够,另一方面是我做内容的时候太贪心。我试图把过多知识点都放进作品里,导致流程看起来完整,但每个点都没有讲得足够透。
设计原则
- 1.聚焦一个核心问题:不要试图在短时间内展示过多内容。
- 2.降低第一次使用的门槛:用户不应该先猜“从哪里开始”。
- 3.让每一步都有明确目的:交互不是为了复杂,而是为了帮助理解。
- 4.优先保证理解:不要靠堆叠功能来体现完整度。
示例:圆环交互的问题
反思五:保持克制
AI 让生产内容变得很轻松,却没有让理解内容变得更容易。功能可以一直加,用户的注意力并不会因此变多。所以克制不是一种风格,而是需要专门花时间去做的工作。
设置页听起来无聊,却是很重要的产品区域。我的理解是,每多一个开关,就等于把一个自己没想清楚的决定推给了用户。
克制的产品长什么样
AirPods、Home 键、Google 搜索这样的产品都很直观。它们能做的事情不少,但用户第一次上手需要做的动作很少。
这些产品的复杂度并没有消失,只是被做产品的人自己消化掉了。默认行为想清楚了,用户就不用被问那么多问题。
对于小团队做项目,克制不只关系到体验好不好,还直接决定项目能不能继续做下去。
反思六:尽早听取真实反馈
作品不能只在开发者视角中成立。越早让真实用户试用,越早能发现自己看不到的问题。
我本次的反馈来源
主要收获
- 不同背景的人会暴露不同类型的问题。
- 开发者觉得清楚的地方,用户可能完全感受不到。
- 真实反馈能帮助作品从“能运行”走向“能被理解”。
反思七:相信自己,敢想敢做,接受失败
Know more, try more, learn more.
2020 年,我第一次了解 WWDC,被华丽的转场和酷炫的动画吸引,却对它背后的技术知之甚少。
而同样是在 2020 年:
当时网友对于 AI 写代码的态度:
六年过去,当年被写在帖子里嘲笑的那个东西,如今成了我们每天都在用的工具。我也从那个守着直播、只顾着看转场的观众,变成了坐在现场被掌声包裹的人。这中间没有什么天赋异禀的故事。我从来没有提前看清方向,只是每次遇到看不懂的东西,都会去试着了解一下。当然,这个过程里也有不少囫囵吞枣的时刻。
2020 年坐在屏幕前的我其实什么都不懂。看不懂代码,看不懂框架,连 Keynote 里的名词都要一边查一边猜。如果那时候有人告诉我,六年后我会带着自己写的 App 飞过太平洋,会在 Apple 的大屏幕上看见自己的名字,我一定觉得对方在开玩笑。
2024 年底,我第一次装上了 Cursor。说实话,一开始我并不信它。我一边用一边等着它出错,想证明四年前帖子里那些嘲讽是对的。可那天晚上,我看着它把我随口描述的一个想法变成了真的能跑起来的界面,心里那种感觉很难形容。有点被冒犯,又有点想笑,最后剩下的是一种很久没有过的兴奋。原来那道我以为要读完几本书才能跨过去的门槛,是可以先迈进去,再慢慢补的。
我的第一个应用就是那个时候开始的,起因特别小。当时,酷安更新了一个可以发布 HDR 照片的功能,我喜欢拍 HDR 照片,想把它们发到酷安上给别人看,可手机上找不到能把图片转成 HDR 的工具,macOS 上刚好有一个现成的应用。于是我冒出一个念头,能不能把它搬到 iOS 上。就为了这么一件小事,我第一次知道了 Swift,第一次打开 Xcode,也第一次听说 Swift Student Challenge。现在回头看,我后来所有和 Apple 有关的经历,起点就是那个想发图的念头。我在反思里写要去解决一个真实世界的问题,其实我自己最早的那个问题,小到只是想让别人看见我拍的照片。
那之后我就有点收不住了。我又用它做了一个帮自己理解古典密码算法的小 demo,就是前面那个满是 AI 味、模型不行还带着 bug 的页面。它很粗糙,但那是我第一次把一个只属于自己的问题,真的变成了一个能打开的东西。回头看,Decode Dash 的种子就是在那几个晚上埋下的。
所以,如果你现在也站在某个看不懂的东西面前,觉得自己差得太远,我想告诉你,那种感觉不是你的问题。人本来就会排斥自己认知之外的事情,这是天性,不是缺点。真正需要练习的,是在那股排斥感里再往前迈半步。去读那篇看不懂的文档,去下载那个陌生的工具,去把脑子里那个粗糙的想法真的做出来。它可能很丑,可能跑两下就崩,可能被别人一句话就否定掉。但它会变成你的一部分,光看着别人做永远不会。
失败其实没那么可怕,我的仓库里有大量从来没和任何人分享过的东西。一个没做完的 demo,一个被吐槽的交互,一次没拿到的结果,其实这些错误的代价都比我们想象的小得多。更何况有了 AI 之后,从头再来的成本已经被压得很低,推翻一个方案重做,可能就是一个晚上的事。所以做错了可以承认,灵感枯竭了可以先停一停,遇到暂时解决不了的问题,也可以大方地说自己还没搞定。真正拖住人的,往往不是失败本身,而是不肯承认失败。评委只看一次提交,比赛只有一个名次,可你在那个过程里锻炼出来的判断力和执行力、学到的那些知识,会一直属于你。我这一路最珍贵的收获,从来不是那封入选邮件,而是因为它认识的那些同样爱折腾的人,是我和志同道合的朋友在街头聊到深夜的那个晚上。
世界变化得比任何时候都快。今天让大家都觉得陌生的东西,可能就是明年最顺手的工具。这其实是件好事。因为对年轻人来说,它意味着起点每年都在重新洗牌,愿意动手的人永远有位置。不用等自己准备好,也不用等自己足够厉害,现在就可以开始属于你的征途。写下第一行代码,做出第一个能跑的版本,然后把它交给真实的世界。
六年前那个点开直播的我什么都不懂,但至少没有关掉那个窗口。我很感谢当时的自己,当然也感谢 Apple 当时用酷炫的转场把我留下,然后才有了后面的故事。也希望屏幕前的你,愿意做那个先按下开始的人。