最近我对一件事感触特别深。一个真正好用的Skill,不是写出来的,而是在实战里一点点磨出来的。这段时间我一直在折腾自己用Rust写的工具apifire,以及基于它封装的一套apifire-skills。项目放在这里:https://github.com/lispking/api
最近我对一件事感触特别深。
一个真正好用的 Skill,不是写出来的,而是在实战里一点点磨出来的。
这段时间我一直在折腾自己用 Rust 写的工具 apifire,以及基于它封装的一套 apifire-skills。
项目放在这里:
https://github.com/lispking/apifire-skills
一开始我也想得很简单:
Skill 这东西,把能力封装好、调用链路打通、参数设计清楚,差不多就算完成了。
但真把它丢到实际场景里去用,我才发现,事情远没有这么简单。
很多时候,“能用”只是起点,“好用”才是真正困难的部分。
程序员很容易有一种错觉:
“这个功能我已经实现了,说明它已经完成了。”
这句话在很多场景下没问题,但放到 Skill 上,往往是不成立的。
因为 Skill 和普通代码不太一样。
普通代码更关注的是逻辑是否正确、性能是否达标、边界是否覆盖;
但 Skill 作为一种更接近“使用体验”的东西,它除了要正确,还得顺手。
顺手这件事,光看代码是看不出来的。
你写的时候觉得设计很优雅,参数很合理,结构也很漂亮;
但真到自己每天去调用、在真实工作流里反复使用时,各种问题就会自己冒出来:
这些问题,只有在实战里才会暴露。
也就是说,Skill 不是写完之后再看效果,而是必须在使用中反过来定义它该长成什么样。
最近在做 apifire-skills 的过程中,我越来越明显地感觉到:
Skill 最难的地方,从来不是“把功能包起来”,而是“把使用成本打下去”。
很多 Skill 刚写完时,看上去其实都挺像那么回事:
但一到实际使用阶段,你就会发现,很多设计虽然“合理”,却并不“好用”。
比如有些 Skill,表面上只做一件事,实际上却要求用户提供很多上下文。
用户本来只是想完成一个动作,结果却要先理解你的参数设计、你的前置假设、你的输入边界。
这时候你就会意识到:
你虽然封装了能力,但并没有真正封装掉复杂度。
对作者来说,这个 Skill 已经很清晰了; 但对使用者来说,它可能依然很重。
而真正好用的 Skill,不是让用户觉得“这个设计挺完整”, 而是让用户觉得:
“我几乎不用思考,它就帮我把这件事处理掉了。”
这其实是在逼着开发者不断问自己一个问题:
现在这个 Skill,到底是在帮用户省事,还是只是把原本的代码接口换了一层皮?
这个问题很扎心,但特别重要。
我现在越来越相信一件事:
纸面上设计出来的 Skill,和真实环境里跑出来的 Skill,往往不是同一个东西。
因为你在写的时候,脑子里默认的往往是理想路径。
你会假设:
但真实环境从来不按这个剧本走。
一旦上实战,问题会变得非常具体:
这些问题不是代码层面的问题,至少不只是代码层面的问题。 它们更像是“产品体验问题”。
而这也正是 Skill 最有意思、也最折磨人的地方: 你以为自己在写工具,最后你会发现,你其实是在做产品。
如果让我总结最近做 apifire-skills 最大的感受,那就是一句话:
好用这件事,没有一次到位,只有反复返工。
流程通常都是这样的:
先写出来。 然后拿去实际使用。 接着发现这里别扭、那里不顺。 再回来改参数、改提示、改默认行为、改边界设计。 改完继续用。 继续被真实场景教育。 然后再改。
这个循环听上去很朴素,但真正做起来特别消耗耐心。
因为它意味着你必须不断推翻自己之前“已经差不多了”的判断。
有时候你优化的不是核心逻辑,而是一些看起来很小的细节:
这些细节单独看都不大, 但真正的“好用”,往往就是这些地方一层层堆出来的。
这也是我最近特别强烈的一个感受。
很多东西,半小时确实能搞出来。
尤其对熟悉某个领域、熟悉某套框架的人来说, 封装一个能力、补一层接口、做一个能调用的原型,其实并不难。
难的是后面那部分。
难的是你愿不愿意承认:
第一版往往只是“能跑”,离“能长期使用”还很远。
半小时能完成的,大概率只是这些东西:
但一个真正能放进工作流里、能反复复用、能让人愿意长期依赖的 Skill, 一定不是这样长出来的。
它需要你在真实使用里不断问:
这些问题没有标准答案。 只能靠一次次使用、一次次失败、一次次重构,把感觉慢慢磨出来。
我觉得这是一个特别普遍的问题。
工程师天然喜欢“实现”这件事。 因为实现是明确的、可验证的、可展示的,也是最容易带来成就感的。
你写完一段代码,跑通一个流程,接上一个系统,马上就会觉得: 这件事完成了。
但“打磨”不是这样的。
打磨没有那么强的完成感,甚至很多时候是反过来的。 它会让你意识到,原来你以为已经完成的东西,其实只是刚开始。
而且打磨往往很琐碎:
这些事不炫,也不好拿出来讲。 但最后决定一个 Skill 到底是“有人愿意一直用”,还是“写完就躺在仓库里吃灰”的,恰恰就是这些事。
所以现在我对 apifire-skills 的看法,已经不太像“我写了一个项目”,
更像是“我在慢慢养一个产品”。
先把它做出来,当然重要。 但真正有价值的是后面的过程:
把它放进真实世界里,接受真实使用的拷打。
因为只有经过这个过程,你才会慢慢知道:
到最后,一个 Skill 是否好用,标准并不是“代码有多漂亮”, 而是它能不能自然地融入真实工作流,成为用户愿意反复调用的一部分。
而这件事,最近让我感触特别深。
现在回头看,我越来越觉得:
好用的 Skill,从来不是设计出来的,而是打磨出来的。
先做出来,再放进实战; 在实战里发现问题,再反过来改; 改完继续用,继续暴露问题,继续优化。
这中间没有捷径。
更不是半小时就能完成的事。
半小时,也许足够你写出一个“能用的东西”; 但一个真正顺手、稳定、能长期复用的 Skill, 一定要经历更长时间的实战、返工和打磨。
这也是我最近做 apifire-skills 时,最大的感受。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!