加入Apple Developer Program已经一个月过去了,这一个月的时间我陆续把曾经就一直在开发的软件全部变成了AppStore的上架产品。想起来最初,我做出的所有东西都是被拒绝的。而现在我已经是六个App的作者。

我愈发在开发软件的过程中觉得这个时代,软件工程师需要的重点技能已经从“足够熟悉一门语言,以实现一些功能”,变成了对系统设计,依赖结构以及架构的全局了解和熟悉。

生成式人工智能的存在已经彻底终结了学习和迁移成本的问题。如果你现在有一个可以运行的Swift程序,那你完全可以让人工智能帮你把它变成实现方法一样的Python,反之亦然。我的Rhylm就是建立在我GitHub的开源软件Brownoiser上的,我当时做的事情就是让Gemini把我的Pytjon翻译成了Swift,那时我甚至不会Swift,也是后来才开始学习语法,以及SwiftUI的声明式结构。

这时候也就引出来辣一个问题。当人人都能用自然语言实现想设计的程序,软件工程师还有什么存在的必要?而我现在的体验是:你依然需要会写程序,但对语言的要求已经从“都得熟悉”变成了“理解一个就行”。甚至你可以只学伪代码。只要你有计算机系统设计的思维,具体的实现交给语言模型真的比你自己做要快多了。而且有时候当AI陷入混乱时,你需要站出来指出问题所在或给出你的解决方案让他们去实现。而没有计算机的基础知识,这些事做不到的。

我前几天在开发Rhylm的桌面端时,遇到过一个相对棘手的问题。Swift UI的NSSlider开放给我的接口不支持接收连续的状态变化时间信号,其“tint”属性只是一个状态变更到另一个状态的。对于这种情况,如果我希望在既使用液态玻璃设计的同时又实现我想要的系统动画,那就得自己动手。

在AI尝试许久也没找到解决方案后,我想到可以利用在NSSlider外建造一个触发操作后在短暂的一秒内连续传递色彩变化信号的loop,直到检测到颜色变化到想要的状态前都继续循环。我把想法告诉了Claude后,他也茅塞顿开并给了我具体实现的手段:绕过声明式定义,用NSViewRepresentable直接对NSSlider内属性trackFillColor动手。预先计算好颜色要怎么变,每一个帧的颜色状态是什么样,然后在操作实际开始的时候一帧一帧的根据你理想的颜色变化曲线去插帧,从而实现一个颜色的动画变化。这个方案果然奏效。

但有两件事,是比较有意思的。其一,是我在此前一直是把SwiftUI看作是只能整个吃掉,但不能改配料的苹果预制菜;其二,我根本就不知道底层的东西是所谓的AppKit,而这不是什么declarative设计,是传统的那种。语言模型在这个过程中做了什么呢?我推测他顺着我的思路发现好像可以绕过SwiftUI传参,但同时继续按常规方法去使用它的一部分。然后他继续顺着这个思路,找到了NSSlider具体的构成,并给了我两个关键的对象:NSViewRepresentable以及trackFillColor,让手动override成为了可能。如果要我自己去调查,那我在思路建立的情况下查到这个只是早晚的事。可花的时间也是时间。而AI就帮我跳过了这个时间。这其实就是在程序设计里用AI去“Google”语言的说明文档。后续RGB的计算等这都是顺理成章的事情,不多赘述。

如果我没学编程语言,我会知道有所谓loop这一概念吗?也许我能用嘴描述,但我一定不会描述的如此具体。现在的语言模型,还没有强大到你说模糊的东西他们就能具体实现的程度(甚至你是甲方,你跟人类乙方说得马马虎虎,他多半也理解不清楚你的意思)所以如果把你自己想象成架构师,或者等待想法被实现的甲方,你给乙方描述的东西一定要尽可能的详尽现实,这样他只用专注于客观层面的技术实现,而这件事情比起主动揣测你的意图,对于AI来说是更加容易的。

同样,很多次和AI的工作里,我发现的错误,我都是从程序设计的思维出发,去思考输入输出的过程,思考我是怎么设计这个模块的,它接收什么数据类型,传递出去的又是怎么,状态变化是由什么参数引起的,等等。对这些足够了解,那么很多时候看到一个错误,你在知道大概是什么导致的情况下跟AI说一说,他们不臆测,顺着你的思路去做这个事情,那实际效果就是你自己去做的十倍速度,也不会会错意。现在专精程序的如Claude Code,GPT Codex等语言模型,他们就被训练的不去发挥想象力,而是严格按照你的指示做事情,不越界也不做多余的事。这就让他们出错的次数相对常规语言模型变得非常之少,也就为思路清晰只缺实现的人,提供了效率指数级飞跃而结果质量相同的途径。

我尝试过让AI自己给自己找错误,结果就是越来越混乱。大概原因,还是因为AI本身是没有意图和主观能动性的。他们在等待你的指令,而你现在让他们去猜问题在哪,那很多时候也许他们就会为了解决问题而碰到你不希望他们碰的依赖或者模块。我曾经在开发Inserable的时候就因为Gemini不停的摧毁我的依赖而放弃使用AI,转为手动设计。那时才感觉到人的效率比起思路清晰的AI,是要低这么多的。

以小见大的说,了解原理和事情运作的规律,你也就拥有了足够精准的还原出原理和规律的自然语言能力,而这就是驱动AI做你想走的事的必要条件。现在的我如果希望进行一个机器学习的研究,那么我可以说算法给公式给实验步骤,具体的代码苦力活AI做的比人更快也比人更好。我只需要去看具体算法应用是否正确就行。

这也就引申出了新的问题:如果现在的我继续往后这样创造下去,那我就永远不会有时间在深度的积累中有所长进。作为数学与统计系学生的我,现在在工程能力上的突出,与其说是在展现我“跨学科思维”或者“面面俱到”的优点,更不如像是浪费时间和光阴,去做现在本不应该做的事情。因为我并没有在开发软件的时候用到任何我的学科知识,所以这件事情什么时候做都可以。但我的学科无法因为软件的开发而获得长进,这也帮不到我的考试,帮不到我对理论知识更深的理解。

我很清楚,我需要理论,我需要数学统计,我需要最底层的东西。我无数次的发现自己就差临门一脚就能说出一个具体的优化方案,却因为之前的非线性优化内容忘记的差不多了,而没办法立刻从数学语言的角度解释我的观点。你不可能说自己永远拿到手里的都是人训练好的调好的,损失函数参数弄的明明白白的模型,很多时候要开拓和创新,要做别人没做过的事情继续去拓宽领域新的可能,你就必然不能是那个靠AI去给你知识,而不去开拓的人。必须拥有知识,知其所以然,否则,我不就是自己嘴里“空有想法,却不切实际”的只会给prompt,遇到复杂问题也得靠AI的人吗?现在也许我还能靠以前的学科思维解决NSSlider这种问题,那未来呢?当AI强大到自己能想出来“这个地方参数传递锁了类型,那我把它窍开手动传参”时,我大概也就是个现在的所谓“码农”一样进垃圾堆的时候了。而且,谁还需要第二个提醒事项?谁还需要第二个白噪音App?这些都是我展示自己审美的东西。但是就跟我的音乐,我的艺术设计一样,这些软件也只能作为美学和个人想法,理念的说明。它们并不能直接在我所从事的数据科学行业,对我最直接的竞争力和行业最直接看的能力有所帮助。

只有我做出自己理想中的这些项目时,我才能真正把程序设计和数据科学结合到一起。比如手写latex转换成代码的机器视觉项目,比如智能学习本地音频pattern给你相似采样推荐的Sonodex Extension,比如读取频谱自动对比目标曲线,然后自动分段应用静态曲线的机器学习EQ。我现在做,就算能做出来,那用的也不可能是我亲自优化和设计过的算法。

所以,该停止了。创造也好,怎么也好,已经够了。也许还是可以把时间花在SSC2026,但这个之后,任何现有的项目都没有继续维护和延展的必要了。论作品的数量,广度,质量,我觉得就现在拿出手的这六个东西,没有一个会不是我的骄傲。它们全部都不是为了炫技而存在的东西,而是奔着明确要解决问题而诞生。领域横跨productivity,到health,到utility再到developer tools。作为一个刚开始一个月的人,我应该切实的为自己感到一些兴奋。与此同时,也该认识到边际效应已经拉到了最大。接下来任何在这个方面的成长都会造成资源精力效率的浪费。如果利用好接下来的时间将学业落后的东西追起来,我想我应该可以称呼自己无所不能了,也不会在github看着自己几个我自己知道有点小儿科的开源项目而叹气。确实该做点不一样的东西了,而它们需要算法,需要知识。AI帮不了我。这只能从大学里自己用时间去铸造,去弥补。