命名
命名不仅是定义,更是一种遮蔽。从代码变量到人际关系,我们通过命名简化世界,也因此付出了代价。
只有两件难事
计算机科学界有一句著名的调侃:编程只有两件难事——缓存失效(Cache Invalidation)和命名(Naming Things)。
初学者往往觉得困惑:命名有什么难的?a,b,data,temp,实在不行就 flag1,flag2。但写过几年代码的人都知道,面对一个复杂的业务逻辑,当你停在键盘前,试图为一个变量、一个函数、或者一个类寻找一个恰当的名字时,你实际上是在做一次深度的哲学思考。
你是在定义它的边界。
你把这个变量命名为 isValid,就意味着它只有“是”与“否”两种状态,你排除了“验证中”或“部分有效”的可能性。你把这个模块命名为 UserAuth,就意味着它不应该承担“发送邮件”的职责,除非你决定通过某种肮脏的手段打破封装。
在代码的世界里,错误的命名是灾难性的。如果你把一个实际上不仅负责登录,还顺便负责了初始化数据库连接、清理日志的类命名为 LoginController,后来的维护者就会在寻找数据库连接代码时迷失方向。错误的命名不仅是标识符的错误,更是心智模型的错位。
代码必须精确,因为机器不懂得“意会”。但有趣的是,当我们离开集成开发环境(IDE),回到充满模糊性的现实生活时,我们依然带着这种“通过命名来掌控一切”的强迫症。我们渴望给万事万物贴上标签,以为只要赋予了名字,我们就理解了它,掌控了它。
然而,现实世界的“编译器”,远比我们想象的要复杂。
关系的脚本化
我们最热衷于命名的对象,莫过于人与人之间的关系。
在这个原子化的社会里,两个独立的灵魂相遇,产生了一系列复杂的化学反应:有欣赏,有依赖,有身体的吸引,有智识的共鸣,或许还夹杂着一点点竞争欲和某种说不清道不明的宿命感。这是一团混沌的、流动的、独一无二的能量。
但我们受不了这种混沌。社会规训要求我们迅速给出定义:你们是什么关系?
是“朋友”?是“恋人”?是“炮友”?还是“合作伙伴”?
一旦我们选择了其中一个名字,比如“恋人”,巨大的代价随之而来。这个名字不再仅仅是一个称呼,它是一套沉重的、预先写好的剧本(Script)。
如果命名为“恋人”,那么社会脚本规定:我们需要每天互道晚安,我们需要在特定的节日互送礼物,我们需要对彼此的排他性负责,我们需要在这个名字下履行一系列的权利和义务。
那个原本独特的、可能只属于你们两个人的互动模式,被“恋人”这个通用的类(Class)给覆盖了。你们不再是两个具体的个体在互动,而是两个“恋人”角色的扮演者在对戏。
这就是命名的代价之一:它用通用的脚本,抹杀了个体的独特性。
有多少关系,是因为无法被归类到现有的词汇表中而被迫终结?又有多少人,为了维持一个“夫妻”或“死党”的名字,而痛苦地削足适履,切掉自己灵魂中那些不符合定义的触角?我们在寻求安全感的同时,扼杀了可能性的无限。
情绪的病理化
向内看,我们对自我感受的命名,同样充满了遮蔽性。
现代心理学和精神病学给了我们描述情绪与获得帮助的词汇。这是重要的进步:诊断可以让人得到治疗、支持和合理的休息。但词汇一旦被滥用,也可能被拿来草率地解释一切复杂体验。
以前,一个人可能感到心里空落落的,看着夕阳会流泪,觉得种地没意思,想去远方看看。这是一种混合了存在主义虚无、生理疲劳、对现状的不满以及某种形而上的渴望的复杂状态。
现在,我们很容易立刻给它一个名字:“抑郁”“焦虑”或“职业倦怠”。名字有时是走向专业帮助的入口,不能被随意否定;但它也不自动解释一个人的全部处境。
当我们说“我很焦虑”时,值得同时追问:这份焦虑持续多久、是否影响睡眠和生活、是否需要专业支持,以及生活方式、工作环境和关系中有没有可改变的部分。医学解释与处境解释可以同时成立,不是谁取代谁。
命名的代价之二:它可能让我们过早停止提问。
问题不在于使用诊断或心理学词汇,而在于把它们当成万能盖子。把“社恐”“拖延症”当作玩笑标签,也容易遮住更具体的困难。一个好名字应当帮助人看见问题、获得帮助,而不是让人和旁观者从此不必再理解。
工作的魔法词汇
如果说个人层面的命名还带有些许无奈的自我保护,那么在商业和职场领域,命名则彻底变成了一种操控现实的“黑魔法”。
在这里,语言被精心设计,用来重塑认知,甚至扭曲道德判断。
程序员最熟悉的一个例子:“冲刺”(Sprint)。 在敏捷开发中,我们把两周的一个开发周期称为“Sprint”。在田径运动中,冲刺意味着在短时间内爆发全部力量,达到极速,然后——注意这点很重要——休息。没有运动员可以连续不停地冲刺。 但在互联网大厂里,“Sprint”后面紧接着下一个“Sprint”。通过将常态化的、高强度的劳动命名为“冲刺”,管理者巧妙地植入了一种“短期拼搏、即刻胜利”的幻觉。你感觉自己像个运动员,实际上你只是传送带上的零件。
再看另一个词:“优化”(Optimization)。 当公司决定裁员时,他们很少说“我们要解雇这一千个人,因为管理层决策失误导致资金链紧张”。他们说:“我们在进行组织架构优化”。 “解雇”是残酷的,涉及到具体的家庭生计、房贷和眼泪。“优化”是中性的,是数学的,甚至是积极的。它暗示着去除冗余,提升效率。 通过命名,残酷的现实可能被抽象化。决策者在签署文件时处理的是“数据”,而受影响的人要处理的却是房租、照护与下一份工作;两种语言之间的距离,正是需要被看见的地方。
命名的代价之三:它剥离了事物的道德属性和情感重量,让我们能心安理得地接受荒谬。
把“加班”称为“弹性工作制”;把“剥削”称为“福报”;把“消费主义陷阱”称为“生活方式升级”。每一个新词的发明,都是为了在我们的认知防火墙上开一个后门,让那些原本会被我们排斥的概念长驱直入。
命名的降维打击
回到编程。我们在设计接口时,总是追求 Abstraction(抽象)。抽象的本质,就是忽略细节,提取共性。
命名就是人类认知世界的抽象接口。
世界是高维的,是连续的,是充满了杂质和细节的。而语言是低维的,是离散的,是标准化的。 当我们把一个复杂的事物命名为一个简单的词时,我们实际上是在进行一次“降维打击”。
我们获得了效率。就像在代码中调用 sort() 函数一样,我们不需要知道底层的快速排序是如何交换元素的,我们只需要结果。在生活中,我们用标签快速筛选信息,快速判断敌友,快速做出决策。
但我们也失去了真实。
那些无法被命名的事物,那些在标签缝隙中生长的野草,那些不符合语法的逻辑,都被我们的认知系统自动过滤了。就像一个只认识“红、黄、蓝”三原色的人,注定无法欣赏莫奈的睡莲。
老子在两千多年前就警告过我们:“名可名,非常名。”(能被叫出来的名字,就不是那个永恒的、真实的“名”了)。
维特根斯坦说:“我的语言的界限,意味着我的世界的界限。”
我们生活在词汇构建的牢笼里,还以为透过栏杆看到的是整个天空。
尾声
下一次,当你急于给一种感觉命名,给一段关系定义,或者在周报里写下那些宏大而空洞的词汇时,不妨停顿一秒。
试着去凝视那个事物本身。
去感受那个被叫作“焦虑”的颤抖,也认真判断它是否需要帮助;去理解那个被叫作“暧昧”的眼神,去审视那个被叫作“赋能”的动作。
剥离了名字之后,你还能认出它来吗?
