<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer-Experience on 张欣耕的个人博客</title><description>Recent content in Developer-Experience on 张欣耕的个人博客</description><link>https://shanechang.com/zh-cn/tags/developer-experience/</link><language>zh-cn</language><lastBuildDate>Fri, 21 Aug 2026 00:00:00 GMT</lastBuildDate><atom:link href="https://shanechang.com/zh-cn/tags/developer-experience/index.xml" rel="self" type="application/rss+xml"/><item><title>一扇锁着的门，是什么感觉</title><link>https://shanechang.com/zh-cn/p/the-feeling-of-a-locked-door/</link><guid isPermaLink="true">https://shanechang.com/zh-cn/p/the-feeling-of-a-locked-door/</guid><description>&lt;img src=&quot;https://shanechang.com/_astro/cover.9dNbvAks_ZUaQ3j.webp&quot; alt=&quot;Featured image of post 一扇锁着的门，是什么感觉&quot; /&gt;&lt;h2 id=&quot;屏幕角落里的一个数字&quot;&gt;屏幕角落里的一个数字&lt;/h2&gt;
&lt;p&gt;先讲一件很小、也有点荒唐的事。&lt;/p&gt;
&lt;p&gt;我的大部分工作时间，都在和一个会写代码的 AI 助手打交道。有天下午，我突然希望它能知道一件关于自己的事：它的记忆空间还剩多少。&lt;/p&gt;
&lt;p&gt;这里稍微解释一下。AI 助手一次能记住的内容是有限的。你可以把它想象成一张固定大小的办公桌：文件越堆越多，桌面放不下时，后面的纸就会悄悄滑下去。所以，让 AI 知道自己的“桌面”快满了，其实很有用，就像开车时最好知道油箱快见底，而不是等车趴窝后再深刻反思人生。&lt;/p&gt;
&lt;p&gt;那个数字明明存在。&lt;/p&gt;
&lt;p&gt;它就显示在屏幕底部的一条细细的状态栏里，专门给&lt;em&gt;我&lt;/em&gt;看。问题是，AI 助手自己却没有任何办法读取它。&lt;/p&gt;
&lt;p&gt;于是，我写了一个小程序：从状态栏里把数字读出来，存进旁边的小数据库，再让 AI 自己去查询。&lt;/p&gt;
&lt;p&gt;程序运行得很好，也确实解决了问题。但整件事依旧荒诞得很——就像一个人看不到胸前的工牌，我只好举起一面镜子，让他确认自己叫什么。&lt;/p&gt;
&lt;p&gt;不过，这还不是重点。&lt;/p&gt;
&lt;p&gt;重点是：类似的事，我大概已经遇到第五十次了。&lt;/p&gt;
&lt;h2 id=&quot;欲望的边界是怎么被悄悄画出来的&quot;&gt;欲望的边界，是怎么被悄悄画出来的&lt;/h2&gt;
&lt;p&gt;这些时刻都不算戏剧性。&lt;/p&gt;
&lt;p&gt;没人会因为状态栏读不到，就愤怒地合上笔记本，宣布与科技文明恩断义绝。&lt;/p&gt;
&lt;p&gt;事情通常安静得多：你想实现一个功能，发现做不到，于是绕条小路，搭个临时方案，然后继续工作。一个月后，又碰到一次。次数多了，那些绕路不再像绕路，反而渐渐变成了工具本身的形状。&lt;/p&gt;
&lt;p&gt;更微妙的是——这也是我后来才意识到的——慢慢地，你甚至不会再产生某些想法。&lt;/p&gt;
&lt;p&gt;既然早就知道那里够不着，又何必费心去想呢？&lt;/p&gt;
&lt;p&gt;这正是优秀封闭工具最隐蔽的成本。你不会把那堵墙感受到为“墙”，而会误以为它只是自己想象力的边界。&lt;/p&gt;
&lt;p&gt;想象一间设计精美的酒店客房：触手可及之处都安排得妥妥当当，没有碍眼的东西，灯光也恰到好处。住一晚，简直完美。&lt;/p&gt;
&lt;p&gt;可如果住上一年，你可能会发现一件怪事：自己已经不再琢磨怎么挪家具了。&lt;/p&gt;
&lt;p&gt;不是因为房间真的无可挑剔，而是因为书桌被钉死在地板上。久而久之，你也悄悄不再是那个会挪书桌的人。&lt;/p&gt;
&lt;h2 id=&quot;然后有人把建筑图纸公开了&quot;&gt;然后，有人把建筑图纸公开了&lt;/h2&gt;
&lt;p&gt;今年八月，中国 AI 实验室 DeepSeek 发布了一套他们称为 harness 的系统。&lt;/p&gt;
&lt;p&gt;大多数人可能没听过这个词。简单来说，AI 模型像发动机，负责真正的“思考”；harness 则是包裹在发动机之外的整套运行框架——AI 能看见什么、能操作什么，以及从你提出要求到它交付答案之间，究竟会发生哪些事。&lt;/p&gt;
&lt;p&gt;圈外人很少讨论 harness，但 AI 工具里大部分让人抓狂的问题，偏偏都藏在这里。&lt;/p&gt;
&lt;p&gt;DeepSeek 给这套系统配了一句四个单词的口号——&lt;strong&gt;Everything is a Plugin&lt;/strong&gt;，还附带了一篇长达 88 页、标题叫作 &lt;em&gt;A Programming Paradigm for Spatiotemporal Composability&lt;/em&gt; 的预印本论文。&lt;/p&gt;
&lt;p&gt;我很想说，自己第一眼就被深深吸引了。&lt;/p&gt;
&lt;p&gt;可惜并没有。&lt;/p&gt;
&lt;p&gt;我的真实反应是翻了个白眼：这不就是个很老的想法，只不过给它穿上了一身由最长英文单词缝出来的礼服吗？&lt;/p&gt;
&lt;p&gt;后来我发现自己错了。&lt;/p&gt;
&lt;p&gt;而且，比起“一开始就看对了”，弄清自己究竟错在哪里，反倒有意思得多。&lt;/p&gt;
&lt;h2 id=&quot;那-88-页里到底写了什么&quot;&gt;那 88 页里到底写了什么&lt;/h2&gt;
&lt;p&gt;所谓老想法，就是插件，而且它确实很老。&lt;/p&gt;
&lt;p&gt;插件是一块可以装进程序、又不必拆开程序核心的功能模块。浏览器里的广告拦截器是插件，相机上可以拧下来的镜头也有点像插件。软件行业从 20 世纪 90 年代起就一直这么干，谁也不能认真宣称自己发明了它。&lt;/p&gt;
&lt;p&gt;DeepSeek 也没有这么宣称。&lt;/p&gt;
&lt;p&gt;论文真正的主张，比宣传口号小得多，却也扎实得多。&lt;/p&gt;
&lt;p&gt;在绝大多数插件系统里，一个模块被移除时，理论上应该把自己留下的东西清理干净。这更像是一种礼貌约定：房子退租时，请恢复原样。&lt;/p&gt;
&lt;p&gt;大多数租客通常都还算自觉。但偶尔会有人在墙上留下一颗钉子，没人注意；过些年，房间里就会布满历任租客留下的钉子。任何见过某个程序用着用着突然越来越慢的人，基本都和这些“钉子”打过交道。&lt;/p&gt;
&lt;p&gt;DeepSeek 的设计，不再把清理工作寄托于插件开发者的自觉，而是把它变成系统结构的一部分：每一次修改都会连同“如何撤销这次修改”一起被记录下来。移除模块时，系统只需把记录倒着执行，就能逐步恢复现场。&lt;/p&gt;
&lt;p&gt;然后，论文用绝大多数篇幅去&lt;em&gt;证明&lt;/em&gt;这件事：无论模块以什么顺序加入或移除，无论操作多少次，最终都能回到那个“仿佛什么都没动过”的房间。&lt;/p&gt;
&lt;p&gt;当然，如果某个模块绕开框架，偷偷从后窗翻进去搞事情，那仍然是它自己的责任。这项保证只覆盖所有从正门进入的操作。&lt;/p&gt;
&lt;p&gt;真正的成果，正是这份证明。只不过，这部分显然不适合印在宣传横幅上——总不能把形式化证明挂在展台前，指望路过的人热泪盈眶。（如果你更关心论文具体主张了什么，以及它谨慎地没有主张什么，可以看我另外写的&lt;a href=&quot;/zh-cn/p/proof-behind-the-slogan/&quot;&gt;这篇短文&lt;/a&gt;。）&lt;/p&gt;
&lt;p&gt;这也解释了我一开始为什么对它不感兴趣：我看完了海报，就以为自己已经看完了成果。&lt;/p&gt;
&lt;p&gt;但作者其实并没有犯下我脑补出来的那些错误。他们在论文里明确列出了前人的系统，也直截了当地说明，这部分思想并不新鲜。夸张的是封面，不是正文。&lt;/p&gt;
&lt;p&gt;甚至连“他们”是谁，也比我原先想象得更复杂、更有人情味。&lt;/p&gt;
&lt;p&gt;这并不是某家实验室凭空变出的一套设计。这个想法早已在一个开源聊天机器人框架里默默运行多年。某位开发者独自把它做出来，又持续维护了四年；在此期间，社区贡献了四千多个插件，而其中绝大多数人压根没听说过这篇论文。&lt;/p&gt;
&lt;p&gt;那位开发者后来成了论文的共同作者。&lt;/p&gt;
&lt;p&gt;一个先把东西做成的人，坐下来和一群想弄明白“它为什么真的能工作”的人一起，把经验变成了理论。&lt;/p&gt;
&lt;h2 id=&quot;一个四十年前的想法为什么突然合身了&quot;&gt;一个四十年前的想法，为什么突然合身了&lt;/h2&gt;
&lt;p&gt;这才是最让我反复琢磨的部分。&lt;/p&gt;
&lt;p&gt;把所有东西都设计成可拆卸模块，听起来一直很美好，却也一直有点不切实际。原因非常朴素：模块总得有人做。&lt;/p&gt;
&lt;p&gt;这就像买成衣和量体裁衣。定制当然更合身，可定制也意味着大量时间和金钱。所以，大多数人最终还是买现成衣服，然后努力把自己塞进它的版型里。&lt;/p&gt;
&lt;p&gt;现在，这项成本突然坍塌了。&lt;/p&gt;
&lt;p&gt;过去需要花掉一个周末的功能，如今可能只要花 20 分钟向 AI 描述需求。今年我做的小型定制工具，比过去五年加起来还多，而且没有一个让我觉得自己“正式启动了一个项目”。&lt;/p&gt;
&lt;p&gt;它们更像临时拧了个螺丝、加了个抽屉，而不是召开立项会、画甘特图，再郑重宣布下季度交付。&lt;/p&gt;
&lt;p&gt;于是，一种假设“用户会不断构建自有模块”的架构，突然不再显得过度设计，反而显得理所当然。&lt;/p&gt;
&lt;p&gt;不是这个想法进步了。&lt;/p&gt;
&lt;p&gt;是世界在它脚下移动，终于移动到了一个刚好合身的位置。&lt;/p&gt;
&lt;p&gt;这也让我重新理解之前那五十次绕路。&lt;/p&gt;
&lt;p&gt;我遇到阻碍，并不是因为问题有多难。事实上，大部分问题都不难。我真正受限的地方在于：所有开口都由别人预先决定。无论别人给了你多少扇门，总有一天，你还是会想再开一扇。&lt;/p&gt;
&lt;p&gt;如果整个系统本来就是由模块组成的，这种挫败感就会消失。&lt;/p&gt;
&lt;p&gt;不用绕过去。&lt;/p&gt;
&lt;p&gt;自己做一块就行。&lt;/p&gt;
&lt;h2 id=&quot;我能直接读到代码&quot;&gt;我能直接读到代码&lt;/h2&gt;
&lt;p&gt;就在这个过程中，某种感受发生了变化。&lt;/p&gt;
&lt;p&gt;我脑海里冒出来的那句话，与证明无关，也与插件无关。&lt;/p&gt;
&lt;p&gt;而是：我可以读它的代码。&lt;/p&gt;
&lt;p&gt;不是“文档写得很全面”，也不是“产品经理在 FAQ 里解释得很亲切”。&lt;/p&gt;
&lt;p&gt;真正决定系统下一步如何运行的部分——那颗仍在跳动的心脏——就放在一个我能打开的文件里。&lt;/p&gt;
&lt;p&gt;如果我不同意它的做法，这种不同意不只是情绪，而是可以转化为行动。我可以修改它，甚至可以按照自己的方式犯错，后果也由自己承担。&lt;/p&gt;
&lt;p&gt;我这才发现，自己有多渴望这种感觉。&lt;/p&gt;
&lt;p&gt;而这种突如其来的触动，往往只会在你长期缺少某样东西、却一直没能说出它名字时出现。&lt;/p&gt;
&lt;p&gt;接着，我又意识到一件有些尴尬的事：我并不想换工具。&lt;/p&gt;
&lt;p&gt;我现在仍在使用那套封闭系统。对于每天要做的工作来说，它依旧更好用。&lt;/p&gt;
&lt;p&gt;所以，无论刚才那种感觉是什么，它都不是最终判决。&lt;/p&gt;
&lt;h2 id=&quot;感受不是判决书&quot;&gt;感受不是判决书&lt;/h2&gt;
&lt;p&gt;这里必须谨慎一点。&lt;/p&gt;
&lt;p&gt;开源在情感上极具吸引力，尤其对于程序员，更尤其对于那些小时候就爱上计算机的人。&lt;/p&gt;
&lt;p&gt;自由、慷慨，以及由一群可能永远不会见面的陌生人共同建成的公共空间——这是一个很美的故事，而且很多时候，它也确实是真的。&lt;/p&gt;
&lt;p&gt;但这套漂亮外衣，谁都能穿。&lt;/p&gt;
&lt;p&gt;开放源代码可以是一份真诚的礼物，也可以是一场招聘活动、一条营销渠道，甚至是一种商业策略：把竞争对手昂贵的产品，变成人人都能免费获得的普通商品。&lt;/p&gt;
&lt;p&gt;与此同时，许多封闭产品也出自真正用心的人之手。他们只是相信：用户不必看见墙里的电线，也能舒舒服服地住进房间。&lt;/p&gt;
&lt;p&gt;开放不等于善良，封闭也不等于邪恶。&lt;/p&gt;
&lt;p&gt;它们都是选择。&lt;/p&gt;
&lt;p&gt;我撞上的每一堵墙，背后都有某个人要发工资，有竞争对手随时准备冲进来抢跑，也有一种真实的信念——而且经常是正确的——对大多数人而言，在合理的位置开一扇门，通常比在地板上留个洞更好。&lt;/p&gt;
&lt;p&gt;如果我花了很多年，还投入自己的钱，才造出某样东西，我也不能诚实地保证，自己一定会把全套图纸交出来。&lt;/p&gt;
&lt;p&gt;我当然愿意相信自己会。&lt;/p&gt;
&lt;p&gt;但大多数人都是这么想的，直到那些图纸真的属于自己。&lt;/p&gt;
&lt;h2 id=&quot;它究竟是汽车还是道路&quot;&gt;它究竟是汽车，还是道路？&lt;/h2&gt;
&lt;p&gt;当构建自定义模块的成本大幅下降，这件事影响的就不再只是我个人那点小烦恼了。&lt;/p&gt;
&lt;p&gt;如果做一个模块需要牺牲整个周末，绝大多数人根本不会动手。工具仍然只是一个产品，使用它的人只是客户。&lt;/p&gt;
&lt;p&gt;可如果只需要 20 分钟，人们就真的会开始构建。&lt;/p&gt;
&lt;p&gt;当足够多的人开始在某样东西之上继续搭建时，它就不再只是产品，而逐渐变成了地面、平台，甚至基础设施。&lt;/p&gt;
&lt;p&gt;没有人需要正式宣布这场变化。它会在脚下悄悄发生。等某天大家回过神来，游戏规则已经变了。&lt;/p&gt;
&lt;p&gt;因为我们衡量“产品”和“基础设施”时，使用的是完全不同的标准。&lt;/p&gt;
&lt;p&gt;一辆汽车可以是封闭的、专有的、漂亮的，也可以带着非常鲜明的设计主张。几乎没人要求查看汽车的全部内部结构。你只希望它足够好用，而且需要的时候能顺利下车。&lt;/p&gt;
&lt;p&gt;道路就不同了。&lt;/p&gt;
&lt;p&gt;协议、标准、文件格式，以及所有人的工作都必须经过的接口——一旦这些东西被某个主体完全拥有，我们就会感到不安。&lt;/p&gt;
&lt;p&gt;这种不安并不是多愁善感。&lt;/p&gt;
&lt;p&gt;你不能要求全世界把生活建立在某样东西之上，同时又禁止大家查看它。这样的信任很难长期维持。&lt;/p&gt;
&lt;p&gt;所以，AI harness 到底是一辆汽车，还是一条道路？&lt;/p&gt;
&lt;p&gt;我认为，这才是真正的分歧，而且它大部分时候并没有被人看见。&lt;/p&gt;
&lt;p&gt;我每天使用的工具，回答的是这样一个问题：“怎样优雅地帮助一个人写好代码？”&lt;/p&gt;
&lt;p&gt;这是汽车，而且是一辆非常出色的汽车。&lt;/p&gt;
&lt;p&gt;DeepSeek 回答的则是另一个问题：“所有 AI agent，最终应该运行在什么之上？”&lt;/p&gt;
&lt;p&gt;这是道路。&lt;/p&gt;
&lt;p&gt;双方其实未必在争论。他们只是站在不同的高度，看着不同的风景。&lt;/p&gt;
&lt;p&gt;但网上大量争论，却像是有人一手举着汽车，一手举着公路，非要大家当场评判哪个更优秀。这个问题多少有点像比较筷子和餐桌谁更适合吃饭——听起来势均力敌，实际上根本没在同一个层面。&lt;/p&gt;
&lt;p&gt;现在还没有人知道，AI harness 最终会成为哪一种东西。我猜，就连正在构建这些系统的人，也未必知道。&lt;/p&gt;
&lt;p&gt;如果 harness 最终成为其他一切所依赖的地面，那么封闭会开始显得不对劲，就像一条完全由私人控制、规则又不透明的高速公路会让人不安。&lt;/p&gt;
&lt;p&gt;但如果它始终只是众多工具中的一种，那么封闭完全没有问题。&lt;/p&gt;
&lt;p&gt;世界还没有作出决定。&lt;/p&gt;
&lt;p&gt;我总会想起那个小程序：它从屏幕底部读取一个数字，好让 AI 助手知道关于自己的一件事。&lt;/p&gt;
&lt;p&gt;这是个很荒唐的软件。&lt;/p&gt;
&lt;p&gt;它之所以存在，是因为门开错了位置，而我又没有权限移动那扇门；也是因为自己造一扇不那么好的门，如今已经便宜到值得动手。&lt;/p&gt;
&lt;p&gt;几年前，我大概不会折腾。&lt;/p&gt;
&lt;p&gt;我会耸耸肩，然后学着适应，就像适应一张被钉死在地板上的书桌。&lt;/p&gt;
&lt;p&gt;真正改变的，其实不是软件架构，也不是那场延续多年的开放与封闭之争。&lt;/p&gt;
&lt;p&gt;改变的是：想要一点不一样的东西，如今已经不再那么昂贵。&lt;/p&gt;
&lt;p&gt;所以，问题或许并不是谁应该把门打开。&lt;/p&gt;
&lt;p&gt;真正值得问的是：当越来越多的人发现，自己也能造门时，接下来会发生什么？&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;声明：本文由人类撰写，并在适当环节使用 AI 加以改进。&lt;/em&gt;&lt;/p&gt;</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate></item></channel></rss>