每隔一段时间,某个开发者论坛就会燃起一场战争
Python 和 JavaScript 谁更烂,Rust 是否会取代 C++,Arch Linux 用户是否比 Ubuntu 用户更懂 Linux,Vim 和 Emacs 哪个才是编辑器的终点。争论者烈,参与者众,持续时间往往远超任何有意义的技术讨论。帖子动辄数百楼,措辞越来越激烈,最终总是以互相拉黑或版主锁帖收场,然后在下一个帖子里重新开始
旁观者很容易得出结论:这些人在浪费时间
但这个结论本身就是错的,他们不在讨论技术,技术只是载体。他们在做一件更古老的事:捍卫身份
我把这种现象叫做技术族群主义 (Techno-Tribalism)
它不是技术讨论的失控状态,而是一种稳定运行的社会结构:以技术选择为图腾,以工具认同为边界,形成具有强烈内外群体意识的族群,并在族群受到威胁时启动系统性的防御机制。理解它,需要从头说起
先做一个思想实验。
假设有人问你:Python 和 Go,哪个更好?
一个有意义的回答,起码需要知道以下信息:这是什么规模的系统?团队有多少人,平均水平如何?性能要求是什么量级?这个系统需要维护多少年,由谁来维护?
没有这些信息,“Python 和 Go 哪个更好”是一个无法回答的问题,因为问题本身是残缺的。脱离场景约束谈语言优劣,就像脱离路况和驾驶目的比较两辆车,比的是说话人心里的图腾
但技术社区里绝大多数的语言争论,从一开始就抹掉了所有约束条件,直接进入”哪个更好”的擂台
这个动作是技术族群主义运作的前提条件
因为一旦引入具体场景,讨论就会变得有条件,结论就会变得相对,而相对的结论无法支撑身份认同。身份认同需要的是无条件的正确:我的选择是好的,在一切情况下都是好的。所以争论必须在真空中进行。在真空中,胜负才能是纯粹的,图腾才能是神圣的
抹掉场景,是技术族群主义的第一个动作
二、结论在前,论据在后
正常的推理路径是:观察现象,分析证据,得出结论。
技术族群主义的实际推理路径是:我用 Python,我认同 Python 社区,Python 是好的,找证据证明它好。
认知科学把这个叫做 motivated reasoning——动机性推理。结论在先,论据是事后补充的装饰品,功能不是发现真相,而是支撑已有立场。
这个过程几乎完全是无意识的。没有人在心里对自己说”我先决定 Python 好,然后去找证据”。他们真诚地相信自己在做客观分析。但如果你仔细观察他们处理反例的方式,就会发现一个规律:凡是支持自己立场的证据,都被接受;凡是不支持的,都能找到理由排除。
你拿出 benchmark,对方说测试场景不对;你拿出工程案例,对方说规模不一样;你拿出论文,对方说学术脱离实践;你指出某个已知缺陷,对方说这个缺陷在实际使用中根本遇不到。
每一个反驳单独看都有一定道理。benchmark 确实可以被设计,工程案例确实有上下文,学术确实和工程有距离。但当这些反驳被同一个人对任何不利证据系统性地使用时,它们就不是在做认知修正,而是在做认知防御。
更准确地说:他们不在寻找真相,他们在排除威胁。而且他们自己不知道这件事。
人一旦在某件事上投入了时间、学习成本、职业选择、社交圈子,这件事就不再只是工具了。它变成了自我叙事的一部分。这个过程是渐进的,分几个阶段完成
第一阶段是选择。你选择了 Python。在这个阶段,它还只是工具,你知道它有优点也有缺点
第二阶段是投入。你花了几百小时学习,读了很多文档,写了很多代码,遇到了问题,解决了问题,积累了经验。你开始有了”用 Python 做事”的能力感
第三阶段是社群。你加入了 Python 社区,认识了一些人,参与了讨论,可能贡献过代码,在社区里有了一定位置。你开始有了”Python 人”的身份感
第四阶段是融合。某个时刻,你已经不是”一个使用 Python 的人”,而是”一个 Python 开发者”。这个标签成了你对自己的描述方式之一。工具和自我之间的边界,已经模糊到难以分辨
到了第四阶段,批评 Python 就是在批评你这个人做出了错误的选择、投入了错误的方向、在一个错误的社群里浪费了时间。这不再是技术讨论,是对自我价值的直接威胁
这个过程我给他起了一个正式的名字:器我融合 (Tool-Self Fusion):工具(器)与自我(我)的认知边界消失,工具变成了自我的延伸,对工具的评价等同于对自我的评价
路径依赖加上沉没成本,是器我融合的物质基础。投入越深,绑定越紧,松动它的代价越大。用了十年 Vim 的人,比用了一年的人更难接受”其实 IDE 也挺好”,因为前者在这个选择上投入了更多的自我。质疑工具,就是质疑他过去十年的判断,以及那十年里那个做出判断的人
当个体的器我融合聚合,就形成了部落
技术族群的结构,和人类历史上任何形式的族群结构高度同构。它有共同图腾——语言、框架、工具;有起源神话——“Linus 在业余时间创造了 Linux”;有内外群体的划分——“真正的程序员用 Vim”;有精英层级——核心贡献者、布道师、资深用户;有入会仪式——Arch Linux 的手动安装,从零配置 Neovim;有异端审判——“你还在用 Python 2?”,“你用 ORM?说明你不理解数据库”
这套结构的功能是维持群体凝聚力。内外群体的区分越清晰,群体内部的认同感越强。所以技术族群需要异端,需要敌人,需要持续的外部威胁。语言圣战是族群的正常运作状态。没有对立,就没有边界;没有边界,就没有归属
Linux 发行版社区是观察这个结构的绝佳样本,因为它的技术差异小到几乎可以忽略。Arch 和 Ubuntu 对于绝大多数使用场景来说,功能上的实际差距微乎其微。但围绕它们形成的身份认同有着截然不同的文化气质:Ubuntu 是”给新手的”,Arch 是”给真正懂 Linux 的人的”
Arch 用户身份的核心是苦行僧叙事:我手动配置了一切,我理解每一个组件,我没有依赖任何预设,我选择了困难的路。这套叙事的功能是地位性的:通过主动承担痛苦,换取族群内部的精英身份
这解释了为什么 Arch 社区对”我用 archinstall 脚本安装的”会有那么强烈的反应。从技术角度看,用安装脚本还是手动安装,结果完全一样。但从族群角度看,用脚本跳过了入会仪式,相当于没有完成成人礼就声称自己是成年人。这是对族群边界的僭越,必须被纠正
技术族群主义有一个属性,让它比其他形式的身份政治更难被识破:它披着理性的外衣
球迷知道自己在情感上支持一支球队。被质疑时,球迷会说”我就是喜欢这个队,怎么了”。这是一种诚实,他们承认自己在做的是情感投入,而不是理性分析
技术族群主义者被质疑时,说的是”你不懂技术”
这个差别至关重要。球迷的回应划定了讨论的性质:这是情感偏好,不需要理性辩护。技术族群主义者的回应则宣称:这是理性判断,而且是对方能力不足才无法理解
这种宣称之所以能成立,是因为技术圈有一套根深蒂固的自我认知:我们是理性的人,我们用数据说话,我们不像普通人那样感情用事。程序员处理的是严谨的逻辑和可验证的系统,职业本身强化了一种”我不会犯非理性错误”的自我叙事
但这套认知,反而成了最大的盲点
认知科学里有一个概念叫 identity-protective cognition:当信息威胁到自我认知时,大脑启动的不是分析,而是免疫反应,其速度和自动性与身体排异相似。关键在于,这个过程发生在意识层面之下。当事人感受到的不是”我在防御”,而是”我在分析,然后发现对方的论据有漏洞”
越相信自己理性的人,对这个过程的防御越弱。因为他不会质疑自己的结论是否来自动机性推理——他确信自己没有这个问题。而这种确信,恰恰让动机性推理在他身上运作得更顺畅,更彻底,更难被外部打断
结果是:技术圈里一些最聪明的人,同时也是一些最难被理性说服的人。智识能力越强,为既有结论构建辩护的能力越强,motivated reasoning 的质量越高,越像真正的理性分析。在外人看来,他们确实像是在讲道理。在他们自己看来,他们也确实在讲道理
但他们不是在讲道理。他们在保卫自己
“我吃过的盐比你吃过的米都多。”
这句话在技术圈有无数变体。“我做了二十年开发,这种事我见过太多""你用 Python 才两年,等你写到十万行再来和我说""这个方案听起来很美好,实际上根本跑不起来,我被坑过”
表面上,这些话在提供经验参考。实际上,它们在做一件完全不同的事:用时间投入置换认知权威,然后用认知权威终止对话
它的逻辑结构是:我在这件事上花的时间比你多,所以我的判断比你更可信,所以你应该接受我的结论,所以讨论结束
这个结构有两个致命的漏洞
第一个漏洞是把时间量等同于认知质。吃了很多盐,不代表你理解盐。用了二十年 C++,可能只是在同一套思维框架里重复了二十年。经验的积累需要一个前提:你在经历中进行了真实的反思和修正。没有反思的经验,会导致路径依赖的加深,而不是认知的增长
第二个漏洞是默认经验的方向是正确的。二十年的经验建立在某些前提假设上,如果那些假设本来就有偏差,那么建立在它上面的经验越多,偏差越固化,越难修正。一个在局部最优解里打了二十年转的人,在某些具体问题上,判断能力可能真的不如一个想清楚了底层逻辑的新人
但这两个漏洞都不是重点
重点是”我吃过的盐比你吃过的米都多”根本不是认知陈述,而是权力陈述。它的功能不是论证,是终止。它在说的是:这个讨论到此为止,我的地位不允许被质疑
这种话出现的时机,几乎总是当事人无法在内容层面继续辩护的时候。当论据耗尽,就切换到资历。这是讨论失败的信号,但它被包装成了权威发言的形态。识别这个切换,是判断一场对话是否还有继续价值的最可靠指标之一
Rust 是近年来技术族群主义最清晰的样本之一,值得单独解剖
Rust 本身是一门有真实优点的语言。内存安全、零开销抽象、强大的类型系统、优秀的工具链,这些是可以验证的技术属性。这一点必须先说清楚,因为技术族群主义的分析不依赖于图腾本身是否有价值。一个真正有价值的工具,同样可以成为族群的图腾,而且往往因为真实优点的存在,让神话更难被识破
Rust 社区在过去几年里完成了一个跳跃:从”Rust 是一门有价值的系统编程语言”,跳到了”未来的一切系统软件都应该用 Rust 重写”,再跳到”不用 Rust 是在犯错误”
这个跳跃是纯粹的信仰的跳跃
Rust 的学习曲线陡峭,所有权系统需要相当长时间才能真正掌握。这本来是一个需要权衡的属性,但在 Rust 社区的叙事里,它变成了资产:正因为难,才证明了使用者的能力。这和 Arch Linux 的苦行僧叙事结构完全一致:困难被转化成了地位的来源
于是”学 Rust 很痛苦”变成了”学 Rust 是一种修炼”,“学会了 Rust”变成了”我是更好的程序员”,“在项目里用 Rust”变成了”我在做正确的事”。工具成了品格的证明
与此同时,Rust 社区发展出了完整的异端审判体系:用 C++ 是在”玩火”,用 Python 是”不认真对待性能”,用 Go 是”选择了平庸”。批评 Rust 的人,绝对不是在提出技术观点,而是”还没理解 Rust 的价值”,或者”太害怕改变”
这套叙事的精妙之处在于它是自封闭的:任何批评都可以被解释为批评者能力不足或认知落后,而不是语言本身有问题。这种结构在哲学上叫做不可证伪命题——没有任何证据能够推翻它,因为所有反例都会被内化为对批评者的质疑。在宗教里,这种结构叫做信仰
Rust 是好语言。但围绕它形成的身份政治,和语言本身已经几乎没有关系
还有一种人,值得单独说
他们不是当下的技术族群主义者,但会在任何有建设性的讨论出现时冒出来,留下一句”然后呢,能改变什么”,然后离开
这种姿态看起来是清醒,实际上是另一种形态的技术族群主义,只是图腾从具体的语言变成了抽象的”看穿了”
他们大多经历过一个可辨认的轨迹:早期有强烈的改变欲望,后来碰了壁,幻灭了,得出结论”什么都没用”,然后在这个虚无的立场上稳定下来。虚无成了新的身份:我是看穿了一切的人,我不再被任何叙事欺骗
这套身份认同有一个内在需要:任何人提出有建设性的东西,都必须被否定。因为如果它有用,就意味着当年的放弃不是无可奈何,而是主动的选择。这是他们无法接受的
所以他们反驳的不是你的论点,而是你还在认真做事这件事本身。你的存在状态对他们构成威胁,因为它揭示了一种他们亲手关闭的可能性
和技术族群主义者一样,他们的防御机制不是论证,是消解:你说什么都没用,什么都改变不了,努力是幼稚的,认真是可笑的。这是认知免疫反应的另一种形态,只是方向反了过来:捍卫”没有图腾值得捍卫”这个元立场
这个结构不只存在于技术圈
选择技术圈作为切入点,是因为它方便观察,不是因为问题只存在于这里
同样的结构,存在于所有人类群体形成身份认同的地方。政治讨论里,左右之争的激烈程度和任何具体政策的复杂度早就脱钩了。饮食文化里,纯素食者和肉食者之间的对立,和营养科学的实际争议完全不成比例。教育理念里,应试和素质之争,大多数时候是阶层认同之争,不是教育学之争
内容不重要,结构是一样的:
人需要归属。归属需要图腾。图腾内化成身份。身份受到挑战时启动防御。防御用所在领域的理性语言包装。于是它看起来像是在讨论那个领域的具体问题,但实际上是在保卫领地
技术族群主义让这个结构特别清晰的原因,是它有一套显性的”理性人”自我叙事,与实际运作之间的张力格外突出。宗教团体从不宣称自己完全理性,政治团体的非理性是可以公开承认的。但技术圈真诚地相信自己在理性地讨论客观问题:这使得结构和自我叙事之间的矛盾,在这里是最无遮掩的,也是最值得解剖的
最后一个问题:知道这个结构,有什么用?
第一个用处是停止浪费时间。识别出对方处于身份防御状态,就可以知道继续提供论据没有意义。对方的大脑处理的不是你的论点,而是威胁信号。拿出更好的证据,只会触发更强的防御,不会产生认知更新
第二个用处是理解说服从何处发生。真正的认知更新,不发生在公开争论里,不发生在被逼到墙角时,不发生在对方拿出无可辩驳的证据时。它发生在私下,发生在没有观众的时候,发生在一个人自己坐着想事情的时候。公开争论最多能种下一颗种子,但种子发芽不需要观众不需要对手,需要的是安静和时间
第三个用处,也是最基本的:用它审视自己
这篇文章描述的结构,不是”他们”的问题。每个人在某些领域都有图腾,都有程度不同的器我融合,都有触发免疫反应的阈值。区别只在于自我觉察的程度,以及这个结构在多大范围内接管了判断
真正的技术判断是什么样的?它是后置的,是有条件的,是愿意在场景改变时修正结论的。它不需要一个语言永远是好的,不需要自己的选择永远是对的,不需要通过贬低其他工具来确认自我价值
识别不能消除这个结构,但它改变了结构运作的方式:从无意识的自动驾驶,变成一个可以被观察、被质疑、被选择性打断的过程
这已经是能做到的、最有意义的事了
