道可道,非常道;名可名,非常名。
无名天地之始,有名万物之母。
故常无欲以观其妙;常有欲以观其徼。
此两者同出而异名,同谓之玄。玄之又玄,众妙之门。
《道德经》第一章,一上来就很“反直觉”。
我们平时做技术、做产品,最喜欢什么?喜欢定义。
需求要定义,字段要定义,接口要定义,流程要定义,指标要定义。最好每个东西都有名字、有边界、有负责人、有排期。
这当然很重要。没有定义,团队无法协作;没有命名,系统无法表达;没有文档,复杂工作很快就会变成一团乱麻。
但老子第一章提醒我们:能被说清楚的,往往只是事物的一部分;能被命名的,往往已经不是事物的全部。
这句话放到今天的技术和产品世界里,依然非常锋利。
一、道和名,到底在说什么?
“道可道,非常道。”
这里的第一个“道”,可以理解为事物背后的规律、运行方式、真实逻辑。第二个“道”,是说出来、表达出来、描述出来。
所以这句话不是说“道不能说”,而是说:凡是能被完整说出来、固定写下来的规律,都不是永恒不变的规律本身。
比如你写了一份《系统架构设计文档》,它当然有价值。但它不是系统本身。真正的系统,存在于代码、流量、依赖、历史包袱、团队习惯、线上故障和用户行为里。
文档只是地图,系统才是地形。
“名可名,非常名。”
这句话也不是反对命名。恰恰相反,命名非常重要。程序员都知道,好的命名能救命,坏的命名能让人怀疑人生。
但老子提醒我们:名字只是人为切出来的标签,不等于事物本身。
比如一个字段叫 status,看起来很简单。可你真去维护它,可能会发现里面藏着十几种状态:
- 未提交
- 审核中
- 审核失败
- 已发布
- 已下架
- 已删除
- 被风控拦截
- 用户不可见但运营可见
名字叫 status,但真实世界从来不只是一个字段名那么清爽。
“无名天地之始,有名万物之母。”
没有名字之前,世界是混沌的、整体的、未被切分的。有了名字之后,我们才能分类、识别、沟通、管理。
这和做产品很像。
用户最开始只有一个模糊感受:“这个东西不好用”“这里很麻烦”“我找不到我要的”。产品经理要把这种模糊感受拆成需求、流程、页面、交互、指标。
命名让世界可操作,但也会让我们误以为自己已经理解了世界。
二、需求文档不是需求,PRD 也不是用户
做产品的人,最容易遇到这个问题。
用户说:“我想要一个导出功能。”
于是需求文档里写:
增加数据导出功能,支持 Excel 下载。
看起来很明确,对吧?
但这只是“名”。它被命名成了“导出功能”。真正的“道”可能是:
- 用户要向老板汇报,所以需要一张能直接放进周报的表
- 用户要做二次分析,所以需要结构化数据
- 用户不信任系统页面,所以想把数据拿到本地留档
- 用户只是想分享给同事,并不是真的需要 Excel
如果不继续追问,你可能会做出一个非常标准、但并不好用的导出按钮。
最后用户还是不满意,因为他真正想要的不是“导出”,而是“可交付”“可分析”“可证明”“可协作”。
这就是第一章的意思:名字是入口,不是真相。
产品经理如果只停在需求名称上,就会变成“功能搬运工”。用户说要什么,就排什么;老板说做什么,就拆什么;竞品有什么,就抄什么。
但真正好的产品判断,往往发生在命名之前。
你要问:
- 用户为什么这样说?
- 他在哪个场景下说的?
- 他说的是方案,还是问题?
- 这个需求背后有没有更简单的解决方式?
很多时候,用户嘴里的“我要一个按钮”,翻译成人话其实是:“我现在没有安全感。”
这才是产品工作有意思的地方。
三、变量名不是业务,接口名也不是设计
程序员同样逃不开“名”的陷阱。
比如你看到一个变量:
const isValid = checkUser(input)
看起来很清楚:用户有效。
但什么叫有效?
是格式有效?权限有效?账号状态有效?风控有效?会员有效?当前业务场景下有效?
如果你不看上下文,只相信变量名,很容易踩坑。因为代码里的“名”,常常只是某个历史时刻留下来的简化表达。
再比如一个接口叫:
GET /api/order/detail
听起来只是“订单详情”。但它可能承担了太多职责:
- 返回订单基础信息
- 返回支付状态
- 返回物流信息
- 返回售后入口
- 返回优惠券展示
- 返回运营活动配置
- 顺便埋点
- 顺便触发一次状态刷新
接口名叫 detail,但真实行为可能已经变成了“订单详情页后端总控中心”。
所以成熟的程序员不会只看名字。他会看调用链、数据流、异常分支、历史提交、线上表现。
因为他知道:命名帮助我们理解系统,但系统不会因为命名好听就变简单。
四、“无欲以观其妙”:先别急着下结论
“常无欲以观其妙”,这句话特别适合排查问题。
线上出故障时,很多人的第一反应是找一个熟悉的原因:
- “是不是数据库慢了?”
- “是不是缓存穿透了?”
- “是不是前端没传参数?”
- “是不是某个人昨天改坏了?”
这些猜测不一定错,但如果太早认定答案,就会被自己的经验带偏。
“无欲”不是没有目标,而是先放下执念。先看现象,别急着贴标签。
比如一次接口超时,你可以先看:
- 超时从什么时候开始?
- 是全部用户,还是部分用户?
- 是所有接口,还是某个接口?
- 是平均耗时上升,还是 P99 抖动?
- 是代码变更、流量变化,还是依赖服务异常?
这就是“观其妙”。
它不是玄学,而是系统性观察。
你暂时不急着证明自己是对的,才更可能看到事情真实的样子。
五、“有欲以观其徼”:带着目标,看清边界
但只观察也不够。
“常有欲以观其徼”,意思是当你带着目标去看,就能看到边界、结果、路径和限制。
排查问题时,观察之后要收敛:
- 哪条链路最可疑?
- 哪个依赖最近变更过?
- 哪个指标最先异常?
- 哪个修复动作风险最低?
做产品也是一样。
你既要“无欲”地观察用户,不急着把用户行为塞进自己的预设里;也要“有欲”地做取舍,明确当前版本到底解决哪个问题。
只无欲,容易变成漫无边际的调研。
只有欲,容易变成带着 KPI 找证据。
好的产品和好的工程,都需要这两种视角来回切换。
先打开,再收敛。先看见复杂性,再做简化。
六、一个产品例子:用户真的需要“标签”吗?
假设你在做一个笔记产品。
用户反馈:“能不能加一个标签功能?我想给笔记分类。”
这听起来很合理。很多产品都有标签,做起来也不算太难。
但如果你只听到“标签”这个名字,就很容易直接进入方案:
- 支持新建标签
- 支持给笔记打标签
- 支持按标签筛选
- 支持标签管理
功能上线后,用户可能一开始很开心,但过一阵子就不用了。
为什么?
因为他真正的问题可能不是“缺少标签”,而是:
- 笔记太多,找不到以前写过的内容
- 内容之间没有关联,知识很难沉淀
- 分类本身太累,坚持不下去
- 搜索不好用,只能靠人工整理
如果看到了这一层,你的方案可能就不一样了。
你也许会优先优化搜索,也许会做自动关联,也许会在用户写作时推荐相关内容,也许会减少手动整理成本。
标签是“名”,信息找回才可能是“道”。
七、一个技术例子:重构不等于变好
技术团队里也有很多容易让人兴奋的词。
比如“重构”。
一听到重构,很多人会默认这是好事:代码更优雅,架构更清晰,系统更现代。
但真实情况没那么简单。
有些重构确实是在降低复杂度;也有些重构,只是把熟悉的复杂度换成了不熟悉的复杂度。
旧系统的问题是方法太长、模块太乱;新系统的问题可能变成抽象太多、链路太深、排查太难。
表面上看,名字从“老代码”变成了“新架构”。但系统的本质问题未必解决了。
所以判断一次重构值不值得,不是看它用了什么模式,也不是看目录结构漂不漂亮,而是看:
- 变更成本有没有下降?
- 故障定位有没有更快?
- 新人理解有没有更容易?
- 核心链路有没有更稳定?
- 业务迭代有没有更顺畅?
名字会让人兴奋,结果才会说明问题。
八、穿过名字,看见结构
这一章看起来很玄,其实非常务实。
它不是让我们否定语言、否定命名、否定文档。恰恰相反,我们需要这些东西。没有名字,人无法协作;没有定义,系统无法建模;没有抽象,复杂度会把人压垮。
但老子提醒我们:使用名字,但不要被名字困住。
看到“增长”,要问增长什么、为什么增长、代价是什么。
看到“留存”,要问用户留下来是因为价值,还是因为迁移成本。
看到“中台”,要问它是在复用能力,还是在制造流程。
看到“AI 能力”,要问它到底解决了什么真实问题。
技术世界尤其如此。
看到“微服务”,别先激动,先问团队有没有治理能力。
看到“低代码”,别先排斥,先问目标用户是不是需要降低门槛。
看到“DDD”,别先套概念,先问领域边界是不是真的清楚。
所有名词都有用,但所有名词都危险。
因为它们一旦变成口号,就会遮住真实问题。
九、总结
如果把第一章翻译成今天的工作语言,我会这样说:
需求文档不是需求,接口名称不是接口行为,产品指标不是用户价值,技术方案不是系统本身。
我们需要命名,因为命名让复杂世界变得可讨论。
但我们也要穿过命名,因为真正的问题常常藏在名字后面。
一个人变成熟的标志,是不再轻易被词带着跑。
听到一个概念,他会问场景。
看到一个方案,他会问代价。
拿到一个需求,他会问动机。
面对一个系统,他会问它真实如何运行。
这就是《道德经》第一章给技术人的第一课:
别急着定义世界,先学会看见世界。
当你能在“名”之外继续往前走一点,就已经站在“众妙之门”前了。