Uncategorized

开发日志 2: 800+ commit 只为修一个问题?

大约今年三月份的时候,Claude 发布了 Cowork,一个为非代码场景量身订做的多 Agent 平台,我用它来维护了几天的 X(原 Twitter),比我几年来涨的粉都要多。但因为 Claude Cowork 对国内环境的封禁以及其高昂的月订阅费用,换作任何一个考虑到这一层的开发者,也都会催生想要做个平替产品的想法

大约今年三月份的时候,Claude 发布了 Cowork,一个为非代码场景量身订做的多 Agent 平台,我用它来维护了几天的 X(原 Twitter),比我几年来涨的粉都要多。但因为 Claude Cowork 对国内环境的封禁以及其高昂的月订阅费用,换作任何一个考虑到这一层的开发者,也都会催生想要做个平替产品的想法吧。

自然地,我也不例外。

截止目前,“adam-agent-server” 已经在 npmjs 平台上迭带到了 v1.19.1 版本。三个月,874次提交,26+万行代码,300+个计划文档,289个待解决问题,还不包括一些在本地验证失败未合并的分支。但是,从项目开题到现在,它却既没有成为平替,也并不比直接订阅 Claude 来得廉价。也许唯一的成果,产生于平台之外的,是跑通了一个自动化生产播客的流水线吧。好比是我在建一个大型养殖场,最终拿到的结论却是:这套为养殖场定制的上下水系统方案可行。

我是不懂代码的,这并不是一个专业人士的谦词,恰好相反,这正是我在这个项目 800 多次提交后仍然漏洞百出,终于决定要停下来深刻反省后得出的结论。

以前写代码像是修一幢高楼。每个部门都分工明确。设计师负责蓝图,砖瓦匠负责浇筑,乃至于每一个粗分的阶段下又有多层次纵、横交错的明确分工。生在高度工业化时代的我们,对于这种流水线作业并不陌生。要不然,如何有那么多人抱怨个不停、拒绝做一个机械重复的螺丝钉呢?

这就像没有 AI 之前的软件开发,在这一点上,估计更多人与我有同感。说到建筑,也只是觉得熟悉,大多数人并不曾亲身参于。但软件开发对于能够被标题吸引来的你,包括正在码字的我来说,假如我断言:“‘开发’或者说‘开发人员’指的并不是凡参于软件项目的人,而是特指那些将‘项目经理’的想法转化成代码的一小撮人。”。我们是不是可以对一对眼神,然后非常默契地把彼此当成“自己人”了呢?

所以对于我们这些 AI 史前的人类来讲,面对一个能够把多个部门工作一揽子全收,而且每一步都可以漂亮收尾的工具来说,那种惊愕可想而知。这也是对于 AI 工具越是依赖,越觉得威力无穷的的原因之一吧。不过这是顺路感慨,并非当前的主题。我想要真正表达的是,软件工程不是搭乐高,把各种方块组合起来就可以,而是一个需要多个模块集成的复杂系统。任何一个处于 AI 编程元年以前的,无论处在软件工程哪个环节的,都算不上是真正“懂代码”的人。当然,人类群体的多样性允许出现一些高出正常水平太多的天才。此处不予置评,我只讨论一般情况。

像我们这样只见过“树木”而从未真正见“森林”的人,对于 AI 编程最深刻且最自然的体感估计都会是:“只要你有想法就好了,AI 会把你的想法转化成产品”,或者再深刻一点:“只要你有‘可验证’的想法就好了,AI 会把你的想法转化成产品并进行验证的。”

我对这条“铁律”也曾深信不疑,并一再和朋友们调侃,“我们就是缺一个好想法”。可是,我们真的只是缺一个“好想法”吗?

是,也不是。

说“是”是因为,一个好的想法,并不是通常意义上我们口口相传的那种“想法”。不是我们灵机一动,脑子里面冒出来的“好点子”,也不是洗澡的时候突然想通了的一件“事情”,更不是因为每天刷微信,就想要开发一个自动读消息进行语音播报App的“脑洞”。诸如此类,都不是。但什么是一个真正的“好想法”?并非我语焉不详,我对此也只有浅薄并模糊的一点认识,只能尽我所知作出解释,更多的是提供思路。

一个好想法,是经过充分调研之后,以真实应用场景为依托的“结果”。把市场比作土壤,“好想法”就像是种子,是一个可预见、可成长的,经由上一轮“生命周期”结晶而成的,既包含了前代物种基因信息的,又可以被周遭环境影响而孕育出新“生命”的起点。这可能正是《营销想象力》给我的启发,它在我画地为牢的堡垒上炸开了一道口子,虽然我明明看得见有光透过来,但我始终不能窥见其全貌。这样的泛泛而谈,已经抽干了我即有的理解。

所以,当我说:“是的。我们确实缺一个好想法。”的时候,我想表达的“好想法”,正是我极力想解释清楚的这个概念。但我也同时说了“不是”,而它所要陈述的意思是:“我们不是‘只’缺一个好想法。因为即便有一个‘真正’意义上的‘好想法’,也并不意味着能够如我们预期一般变成一个产品,更遑论一个成功的产品。”

至此,又引入了另一对概念:“产品”和“成功的产品”。这让我想起一个使用 AI 的误区。当 AI 把实现一个无关功能的边际成本降到几乎为零的时候,我们更容易“顺手”修掉一个无关痛痒的问题,更容易“顺手”实现一个看着“锦上添花”但其实“画蛇添足”的新功能。而这些看似并不起眼的“顺手”累积起来的时候,我们已经把一条蛇画成了“天龙八部”。当然,和“营销”一样,我并没有足够的理解来进一步阐述什么是“成功的产品”。只是话到当时,一时兴起,留下一个“到此一游”小插曲。

那为什么我觉得光有一个好想法还不够呢?原因有三。

一、缺乏好产品的鉴赏力

凡谈到 AI,就有一个必然绕不过去的话题:当 AI 接管了我们的方方面面后,我们人类还剩下什么?我曾经取巧地说:“还剩下历史”,这只是在耍小聪明。不过我们可以从两个极端来进行推演。假如 AI 接管了一切,人类也确实只剩下了“历史”,这个问题便不必谈,因为不需要。假如 AI 什么都没接管,只是像蒸汽机车、芯片等诸多造成历史转折的通用技术一样,成为了又一次工业(亦或产业)革命的动力。按照历史自身循环演化的规律来看,大体上也只会出现阶级的重组,王朝的兴衰而已,对于个体来讲,这种变化在时间上是缓慢和持久的,是渐近而温和的。我们只要顺着水游,其它的事不必做,也做不了。

但怕就怕 AI 只接管了部分的人类活动。它既没有让人类完全失去存在的意义(当然,没有 AI 也可能不具备存在的意义,开发日志不讲哲学),又没有润物细无声般温和地只在大尺度时间维度上带来变化。我打个不恰当的比方,一幢房子,如果地震足够小,可能晃都不晃上一下,生活在里面的人自然是无感的;如果震级足够大,大到摧枯拉朽,把它变成了一片废墟,大家都一起归天,也不必要再作何分析感想。但是,如果震级既没有大到让建筑完全垮塌,又没有小到几乎无感,此时又可以分成两个假说:震一下就结束了,还是说持续了很长一段时间?对于前者来讲比较简单,只是多了一次突如其来的天灾人祸后的善后。但对于后者来讲,如果震级不定还持续不断,它首先滋生的便是“恐慌”,加上每一层对于震动的体感并不相同……我的想象力已不足以继续推演,只是突然想到两部电影《雪国列车》和《饥饿游戏》。

不过,就此打住。这段分析只是想论证另一个不相关的想法,也是想给自己“万一分析不准,也有退路”做一点铺垫。我真正想说的是:“对于 AI 的讨论,在各个阶段都层出不穷”。我也只截取其中一小段,即“AI 品味论”来以此强行拉回到“开发日志”的讨论范畴之内。

所谓品味,倒也确实是字面意思。直白来说,就是你到一家饭馆,对它菜品的鉴赏能力。有人可能会问:“我去吃饭,求的是吃饱和实惠,这和鉴赏有什么关系呢?”。的确,你道出了 AI 对我们生活其中一个最有有影响力的方面,倒不是说 AI 可以当饭吃了,不过照例可以用做饭来打个比方。如果哪天有人发明了一个做饭机器,任何菜式,不论哪个国家的,只要你提出要求,就能保质保量送到你面前。你觉得这个时候,单就饮食上来讲,把人和人区别开来的因素有哪些?

对了,就是品味。如果制作的成本低到可以忽略,那么决定质量的唯一因素,就是提出要求者的鉴赏力,也即“品味”。

但是做菜的比喻其实简单。对于软件工程来说,从立项到确定方向,从制定计划到代码实现,从MVP到集成测试,这其中要求的品味并不全部集中在“一个”传统的角色之上。立项的品味来自产品经理,代码实现的品味来自开发者,集成测试的品味来自 CI 工程师。而这还只是对整个开发体系做了非常简化的抽象得出的模型,实际操作中对于全流程把握的能力要求只高不低。

换句话说,以前我只负责砌墙,我只需要有“横平竖直”的眼光就够。现在我管了整个项目,我需要对从基建到装修的全过程都有足够用(还不是优秀)的“眼光”才行,更别说对于一个单一工种的匠人来说,只有“眼光”还是不够的,得提升到“审美”的层次,才能做出高于一般水平的成果。

所以说,“one-man-army” 到底够不够打,得看你自己有没有足够宽覆盖一个领域、甚至是跨领域的“品味”。

二、缺少一个止损点

“再给我点时间,我一定能做得更好!”,可对于我们人类来讲,其实最稀缺的是“时间”,也只是“时间”。当然,这只是在一般尺度上归纳出的只适用于哲学探究的答案。我真正想说的是,任何一个项目,都是在“成本”和“收益”不断转化中截断的一个部分。

我并不是说收益下降到一定程度后,项目就变得不值得或者负担不起,而是当它的“边际成本”和“边际收益”达到一定比例后,会被市场上涌现出的另一些更“高效”的项目淘汰掉。

当你做一个产品,却不管不顾市场反应,只把它当一个宠物一样“付出”,你就从一个“生产者”变成了“消费者”。你不再拥有给它赋能的权利,相反的,它会主动地表现出“需求缺口”,让你自发地、毫不节制地耗散时间、精力、金钱……不一而足。但是你却在忙碌中自我陶醉,对于偶而闪现出的一些反常现象视而不见,而终于盲目到再次被时间驱使,变成机械的傀儡。

自然,我不会什么高深的“项目”、“市场”理论,或许在口气上也偏向“说教”,但这些都是我对自己失败的产品开发进行清理复盘的时候,油然而生的一些切身体会。

伤口不多,但是够深。

三、缺乏想象力

我多次提到最近读的一本书《营销想象力》,倒也可以说,作为想要把 AI 这种新奇生产力工具用到游刃有余的地步,或者说,你用它来做出一款优秀产品之后走完最重要的一步,即变现,营销能力必不可少。

但我想说的,是对于产品的想象力。如果你不曾梦想过去到一个地方,你怎会知道你实现了你的梦想?又怎会知道去哪?更别说怎么去。假如你完全想象不到一个东西,即使“阿拉丁”把它放到你的面前,你如何确定它就是你想要的东西?再者说,你如何跟”神灯”描述你要的是什么?

是的,可以类比。

比方我想要一个苹果,当然这句话其实应该这么说:“我想要一个像苹果一样的东西”,。但它已经偷换了概念,因为按前文所述,我们不应该有“苹果”这个概念。

不如我们以上帝视角来看整个过程,小王想要一个东西,只有我们这些旁观者知道他想要的是“苹果”,他自己大概有一个模糊的概念,但并不是“苹果”完整的意象,也没有“苹果”这个概念。他会怎么说?

可能是:“我想要一个水果,像橘子一般大小,但是皮很薄而且光滑,吃起来口感类似梨,但是水分更少”。也可能是:“给我一个光皮的水果,一拳大小,水分少一点,吃起来要甜,不用剥皮,洗了就能吃的”。但不管是哪个版本,我们都需要在已知的存在物上面叠加自己额外构思出来的一部分特症。因为如我这样的普通人,想象力就像叠高塔,只会建立在已经存在的意象上面。唯有少数异类天才,才有能力在完全未知的区域搭起空中楼阁。

这些是对于结果的想象,即我想要某个东西,它有某些特症。但是当你在现状和结果之间画一道线,我们就有了千千万万条去往目的地的通路。于是,知道了起点和终点,怎么去,又成为了问题。

我们以桥梁来类比。你很明确,要从此岸去往对岸,你需要“一座”桥(游过去、飞过去等不考虑)。但假如你没有桥的样子,假如你是第一个想造出“桥”(在桥还未被命名之前)的人,若非你心里先有一块木板平铺在两个支点上的框架,进而想象出“桥”的雏形,然后再从支撑点考虑,想象出“桥墩”,以此类推。若非你每一步,都需要在已知上面叠加一个你认为的未知,这个已知的东西是怎么也不会自发变成另一个东西的(当然,人世间也有自发转换的东西,比如种子变成树苗,但这种情况下,和你又有什么关系?)。

所以,如果我说“你想象出你想要的东西,就有了目的地。你想象出怎么去往这个地方,你就有了交通工具。而不论是想象出一个终点,还是勾勒出起点到终点的连接线,我们都是在已知条件下,在自己的品味加持下,对未有之事(或物)的创造。但是,如果有人已经先你一步到了你想去的地方,你便不要再假装你想去的不是那。更明智的做法是,以他人的终点为起点,以他人的品味为基调,立刻开始想象你的下一段探险。”的时候,你是不是也和我一样,重又对未知充满了期望呢?

说到底,真正的盲目不是看不清,而是你假装看不见。

N
norvyn

独立 iOS 开发者,写字的人。在一座有海的城市,慢慢地做一些小而确定的东西。

评论

加载中…

留下评论