一个空的 App.js 和一个闪烁的光标,感觉充满了无限可能。没有约束。没有告诉你该怎么做的样板代码。但那块空白画布并不是自由,它是一个重新从零开始构建宇宙的公开邀请。

空白屏幕税

只用一个编译器和一个文本编辑器开始一个项目。第一天感觉充满了活力。你选择文件夹结构、命名规范,以及禁用按钮的确切灰色调。到了第三天,兴奋感消失了,真正的苦差事出现了。

你意识到构建一个简单的列表并不只是写一个 map 函数那么简单。你必须决定在数据加载时骨架是什么样的,是脉动还是滑动,以及在它出现之前应该延迟多久。你必须决定当网络在滚动中途失败时会发生什么。是自动重试?显示一个按钮?还是永远缓存上一页?你必须决定两个活动过滤器如何交互,以及当这种组合返回零结果时,空状态是什么样的。你甚至必须决定对你的用户来说,“零结果”意味着什么。

这些都是形式化问题。将一个模糊的概念转化为具体、一致且可重复的行为是软件构建中最难的部分。代码本身仅仅是这些选择的转录。这就是为什么无限的定制化不是一个功能,而是一种税收,而且账单会以微决策的形式到来,其累积速度比你预期的要快得多。

持续不断的决策成本

把每一个架构选择都当作一种订阅。当你编写初始实现时,你支付了第一笔款项。然后你每个月都要继续支付。

当一名新工程师加入并询问为什么你选择了自定义重试逻辑而不是标准库,而没人记得原因时,你支付了代价。当浏览器更新破坏了一个手工编写的触摸处理器,因为没人记录为什么那个阈值被设置为 48 像素时,你支付了代价。当安全补丁迫使你重构你那套定制的身份验证流程,因为它从未预见到刷新令牌轮转(refresh token rotation)时,你支付了代价。

如果没有人为你做决定,那么一切都会变成你的问题。想要完全按自己意愿构建的自由,与永远拥有它的负担是不可分割的。你成为了那些行业早在多年前就已解决的模式的唯一权威。你把时间花在维护基础架构上,而不是盖房子。

AI:速度陷阱

人工智能让这种动态关系变得更加危险,而不是减轻了负担。大语言模型可以在 30 秒内生成一个完整的身份验证模块。它可以在你的咖啡变凉之前,搭建好状态层、起草缓存策略并编写导航守卫。

但问题在于:AI 降低了做决策的成本,却让承担决策后果的成本保持在同样的高位。你现在可以比历史上任何团队都更快地创造技术债。代码在演示当天运行良好。它通过了冒烟测试。六个月后,当 OAuth 提供商弃用某个端点,或者缓存失效逻辑在慢速连接期间发生竞态条件时,你正在调试那些你外包给机器的决策。

隐藏的账单总会到期。它以工程工时、上下文切换以及开发速度的缓慢侵蚀来偿还。

十年如一日地购买“无聊”

一个好的框架或平台不是笼子。它是一种对时间的购买。

考虑一下几乎每个现代应用中的标准配置。用户需要登录。数据需要在屏幕之间移动。远程信息需要存储在本地,这样界面才不会停滞。人们需要在不丢失上下文的情况下进行导航。这些是通用功能,而非差异化优势。

一个成熟的框架会一次性将这些模式形式化。它决定了:

  • 加载状态是什么样的以及何时出现
  • 网络错误如何传递到界面
  • 当两个导航参数或活动过滤器发生冲突时如何解决
  • 当底层服务更新时,本地数据会发生什么

然后,它在您睡觉时记录行为、测试边缘情况并推送补丁。你可以把精力投入到最后那 10% 真正属于你的部分。那些新颖的交互。特定的业务