第 21 章
代码编译与算法时代的命理黑箱
当算命术被迫从街头退入室内,它换来的不是安全的避风港,而是一种更深层的质变:在玻璃橱窗后的咨询室里,每一声“命中注定”的断言,都伴随着价目表的翻动声。
然而,这间看似稳固的室内雅座,在二十世纪最后二十年里,遭遇到了一场更为彻底的颠覆。这场颠覆并非来自市政巡查或反迷信运动,而是从一种当时大多数人尚不熟悉的机器内部生长出来。它的显示器上跳动着绿色字符,主机箱里装着一片被称为“中央处理器”的硅片。计算机代码为这门古老技艺提供了一个无需物理坐标、也无法被城管巡查的虚拟庇护所,但这个庇护所并非免费午餐——它索取的代价,是对推演过程的彻底放弃。
占卜作为一种普世文化现象,几乎所有的社会都有某种形式的占卜,可以说碰到問题时求神問卜是普世文化现象,是所有社会当中都存在的一種迷信。然而,代码编译将这一普遍需求导向了一个前所未有的、冰冷的黑箱。
要理解这场变革的完整图景,需要将目光投向二十世纪八十年代中后期中国城市的个人计算机使用者群体。1986年前后,一台配置着8088处理器、512KB内存和双软盘驱动器的IBM PC兼容机,价格大约在人民币两万元左右——这相当于一个普通城市职工十年以上的工资收入。
然而,正是在这样的机器上,一些兼具编程能力和命理兴趣的先行者开始尝试将《三命通会》《渊海子平》《滴天髓》等古籍中的排盘规则转化为计算机代码。这些人大多并非职业术士,而是科研院所的技术人员、大学教师或理工科学生。他们接触命理的方式相当特殊:不是通过传统的师徒传承或街边摊贩,而是通过“文革”结束后重新流通的古籍影印本、港台出版的命理书籍,以及那些在民间悄悄流传的油印讲义。
这些人的书桌上,往往一边摊开着《C语言程序设计》或《DOS中断大全》,一边摞着《三命通会》的影印本——这种空间上的并置,本身就是一个时代的隐喻。他们试图将一种“藉由所謂超自然或以术數運算方法来推測未来”的活动,转化为纯粹的、可重复的机械运算。
这批早期实践者面对的核心问题,本质上是一个算法翻译问题。以八字排盘为例,人工推演的标准流程大致包括:根据求测者的出生年份,在万年历中查取该年立春的精确时刻以确定年柱干支,因为干支纪年起止不以农历正月初一为界,而以立春为界;根据出生月日时,依次推算月柱、日柱和时柱干支,其中日柱需使用特定公式或查表,月柱和时柱则依据“五虎遁”和“五鼠遁”口诀推算;最后根据日干五行属性,排出十神并标注神煞。
上述每一步都涉及大量干支纪年与公历日期的转换运算以及一系列条件判断。对于一个熟练的术士来说,排一个八字大约需要十到十五分钟;而对于初学者,这个过程可能长达半小时以上,且容易在干支换算中出现错误——尤其是当求测者出生在节气交日附近时,需精确校核节气时刻,稍有疏忽便会导致整个八字排盘的偏差。
将这套流程转化为计算机代码,首先要攻克的是历法换算问题。公历与干支纪年之间不存在简单的线性公式,因为干支纪年是基于中国传统历法的一套独立符号系统,其月份划分以节气为准,而非以公历每月一日为界。这意味着程序员必须在代码中建立一张精确的节气时刻表,覆盖从基准年——通常选择1900年或1920年——到当前年份的范围。
早期DOS排盘软件中,这张表通常以数组形式硬编码在源代码里,每一行记录一个节气名称及其对应的公历日期和时刻。程序员从《中国天文年历》或手头能找到的万年历中逐条录入这些数据,再编写一个函数,根据输入的出生日期在数组中查找最近的节气,以确定年柱和月柱的起止点。这项工作枯燥而繁重,却没有任何捷径可走。
一位曾在1990年代初参与排盘软件开发的当事人回忆,他花了两周时间才将1900年至2020年间的所有节气时刻录入完毕,其间反复核对多本万年历,因为不同版本在节气时刻的记载上偶尔存在数分钟的差异——这些差异对于一般用途无关紧要,但对于排盘而言,却可能意味着月柱的干支完全不同。
日柱的计算更为复杂,它将六十甲子的循环逻辑与公历的线性日期系统正面碰撞。计算机程序通常采用的方法是:选定一个已知干支的参考日期——例如,1900年1月1日的日柱干支为甲戌——然后计算输入日期与参考日期之间的天数差,对这个天数差取模60,即可得到日柱干支。
这个算法在数学上干净利落,但它要求程序员首先解决一个看似简单的问题:如何准确计算两个公历日期之间的天数差?这涉及公历的闰年判断规则——能被4整除但不能被100整除的年份为闰年,或者能被400整除的年份也是闰年。这个规则在代码中不过是一个if语句,但它的正确实施需要程序员对格里历的历法修订史有足够了解。
一个常见的早期陷阱是:许多排盘软件在计算1900年之前的日期时,忽略了1582年格里历改革导致的十天删除,以及不同国家采用格里历的时间差异——中国直到1912年才正式采用公历,此前使用的是自康熙年间开始推行的“时宪历”体系下的中国版本格里历。这些历史细节在时间跨度的累积下,会在清代及更早的命例排盘中产生系统性偏差。这类错误在软件发布后很长一段时间内未被发现,因为绝大多数用户只排算当代人的八字,出生于1900年之后的人不涉及这个问题。
神煞和十神的排定,则是代码编译过程中最直接地触及命理规则内部弹性的环节。在人工排盘时,术士根据口诀灵活判断:甲见寅为禄,乙见卯为禄——日干为甲者,遇到地支寅即为“禄”神,其余神煞规则也类似,主要以日干、月支或年支为索引,在四柱中查找对应的地支或天干。对于人脑而言,这个查表过程依赖记忆和熟练度;对于计算机而言,它同样是一个查表操作,只不过表格被替换为多维数组或哈希表。
程序员在代码中定义了一个包含所有可能组合的规则矩阵,输入日干和四柱干支后,程序遍历矩阵,逐一判定位列神煞。从技术上讲,这并不复杂,但它的工作量极其庞大。
《三命通会》中记载的神煞多达数百种,而不同的命理流派对同一神煞的取法又常有分歧。天乙贵人的取法究竟是“甲戊庚牛羊”还是“甲戊兼牛羊”,在命理史上争论了数百年。在人工排盘时代,术士可以根据自己的师承或偏好择一而从;
但在代码中,程序员必须做出一个非此即彼的选择,将其中一种规则硬编码为默认值,或者提供一个下拉菜单让用户自行选择。无论哪种方式,都意味着曾经灵活的解释空间被压缩为一行确定的代码。这行代码安静地躺在源文件里,不参与任何争论,不承认任何例外,它只是忠实地执行程序员赋予它的判断逻辑:如果日干等于甲,且地支包含丑或未,则标记天乙贵人。
这一编译过程从1980年代后期持续到1990年代中期,其成果是陆续出现了一批可在DOS环境下运行的排盘软件。这些软件大多以共享软件或免费软件的形式传播,通过5.25英寸或3.5英寸软盘拷贝,或者上传到早期的BBS电子公告板系统上供人下载。
典型的DOS排盘软件界面极其简陋:黑底屏幕上显示着绿色字符,用户输入出生年月日时后,程序在命令行中逐行输出四柱干支、十神、大运起运岁数及流年排列。没有任何图形元素,没有任何鼠标操作,一切交互都在键盘上完成。1992年前后,一款名为“子平八字”的排盘软件在当时的BBS圈内开始流传,其压缩包大小不过数十KB,解压后得到一个可执行文件和一个存放节气数据的文本文件。
用户启动程序后,光标在提示符后闪烁,输入完成,屏幕清屏,然后从顶部开始一行一行地打印出排盘结果。整个过程大约需要两到三秒——在当时的硬件条件下,这已算得上相当迅速。
这个速度与人工排盘相比是一个质的飞跃。一个术士需要十到十五分钟才能完成的工作,计算机只用两三秒。更重要的是,计算机消除了人工排盘中最常见的错误来源:干支换算失误、节气时刻判断错误、六十甲子循环中的计数偏差。从纯粹的技术角度看,这是一次完美的效率提升和精度提升。排盘,这个曾经是算命术士核心技能之一的工序,第一次被彻底自动化了。
然而,正是从这个看似皆大欢喜的结果出发,机制开始发生更深层的转变。这个转变的核心,在于代码对算命规则的“硬编码”处理。
所谓硬编码,指的是将数据和规则直接写入程序的源代码中,而非通过外部配置文件或数据库加载。在DOS排盘软件中,节气的日期时刻、神煞的取法规则、十神的对应关系、大运的起算公式,全部以常量、数组或条件判断的形式固定在源代码里。这意味着,一旦程序编译完成,所有这些规则都变成了不可更改的二进制指令。用户——包括那些使用这个软件的术士——只能看到输出结果,而无法看到推导过程,更无法修改任何一条规则。
他们输入出生日期,程序输出排盘结果,中间的运算步骤被封装在一个完全透明的黑箱中。
这个黑箱的封闭性带来的第一个后果,是命理规则的分歧被强行终止。在人工排盘时代,当两位术士对同一命例的排盘结果产生分歧时——例如,他们可能因为对真太阳时的理解不同而排出不同的时柱——辩论的焦点在于规则本身:哪一条规则的依据更充分?哪一位前辈的注疏更可靠?这种辩论虽然常常没有定论,但它至少维持了一个知识讨论的空间,使得命理规则在争论中保持着某种可修正性。
然而,当排盘软件普及后,情况发生了变化。如果两款软件对同一命例输出了不同的结果,用户不会去争论哪条规则更合理,而会直接质问:“哪款软件是对的?”这个问题的潜台词是:软件的正确性标准,已经从规则本身的理据转移到了软件的技术权威性上。用户倾向于相信,那个更新版本、更多用户下载、据说是由某位大师审定的软件,输出的结果才是正确的。
规则本身被遮蔽了,取而代之的是对代码的信任。这种信任在绝大多数情况下是盲目的,因为用户看不到代码内部发生了什么。
事实上,不同排盘软件在处理某些关键问题时确实采取了不同的算法,而这些差异往往被用户界面所掩盖。最典型的例子是真太阳时的处理。
八字命理中有一项重要原则:排盘应以出生地的真太阳时为准,而非标准时区的平太阳时。真太阳时与平太阳时之间存在一个差值,这个差值在一年中随季节变化,最大可达十六分钟左右。此外,同一时区内的不同经度,真太阳时也不同。北京位于东经116度左右,而乌鲁木齐位于东经87度左右,两者相差约29度,换算成时间差约为116分钟。这意味着,一个出生在乌鲁木齐的人,如果按北京时间8点整出生来计算,其真太阳时大致在6点左右,对应的时柱地支可能完全不同。
在人工排盘时代,术士处理真太阳时问题的方式相对灵活。他们通常会问求测者出生的大致地点,然后根据自己的经验口诀或手头的时差换算表进行粗略校正。这种校正的精度不高,但它至少是一个有意识的操作步骤,术士知道自己在做什么,也清楚其中存在误差。
然而,在排盘软件中,真太阳时的处理方式被简化到了极致。早期的大部分软件完全不考虑真太阳时,直接以用户输入的北京时间为准。
后来一些软件开始加入真太阳时校正功能,但其实现方式往往是高度简化的:它们通常内置一张中国各省会城市的经度表,用户选择出生地后,程序根据该城市的标准经度与东经120度——北京时间的基准经度——之差,计算一个固定的时间偏移量,再叠加上一个基于日期的均时差公式。这个算法忽略了一个关键事实:同一个省会城市覆盖的经度范围可能相当广阔。四川省东西跨度超过十度,同一省内不同地点的真太阳时之差可能达到四十分钟以上。但软件在出生地下拉菜单中通常只提供“成都”这一个选项,以西昌或达州出生的命例,其真太阳时校正结果存在不容忽视的误差。
更早期的软件甚至没有下拉菜单,只是让用户手动输入一个“经度”数值,而普通用户几乎不可能知道自己出生地的精确经度,只能随意填写或留空。这个问题至今仍未得到彻底解决。
它并非一个简单的技术难题,而是反映了代码编译时代的一个根本矛盾:命理规则出于自身的理论要求,需要精确到“刻”甚至“分”的出生时间,但这个精度所依赖的地理信息数据,在很长一段时间内并不对普通用户开放。GPS定位直到2010年代以后才随着智能手机的普及而成为日常工具,而在此之前的排盘软件只能在这个精度缺失的条件下运行。
于是,代码做出了一种无奈的选择:它用一个看似精确的算法——真太阳时校正公式——去处理一个实际上不精确的输入——用户不知道或无法精确提供的出生地经度,产出一个具有算法精确性但未必符合实际的结果。这个结果在屏幕上显示为“时柱:丙午”,它看起来斩钉截铁,毫厘不爽,但这个精确是代码强加给数据的,而不是数据本身具备的。代码的精确性在这里变成了一个面具,它掩盖的是输入数据的粗糙与模糊。
这种算法精确性向排盘结果之外的领域延伸,进一步改变了算命术的职业生态。当排盘软件的精度和效率远超人工之后,术士群体的技能结构开始发生分化。传统上,排盘是术士的基本功。一个学徒在出师之前,必须能够熟练地心算或掌诀推算八字,这项技能既是技术门槛,也是师徒之间知识传递的核心内容。师父在传授排盘口诀的同时,也在传授口诀背后的原理:为什么“甲己之年丙作首”?为什么“冬至后阳遁,夏至后阴遁”?这些原理构成了术士对命理模型的深层理解,是他们在面对复杂命例时进行灵活判断的基础。然而,排盘软件的出现使得这些口诀在很大程度上失去了实用价值。一个新手甚至不需要记住六十甲子的顺序,只要会操作软件,就能在几秒钟内排出一个八字。排盘技能从必修课变成了可选项,而随着软件界面的日益友好化,这个可选项越来越多地被跳过。
这意味着,新一代术士中的相当一部分人从一开始就没有建立起对命理模型底层逻辑的完整理解。他们可以熟练地操作软件,快速地为顾客排出八字和大运,但当顾客追问“为什么我的日柱是甲子而不是乙丑”或者“这个神煞是怎么算出来的”时,他们无法给出一个基于原理的解释。他们只能指着屏幕说:“软件算的,不会错。”这句话在1990年代的命理咨询室里成为一种越来越常见的回答,它将术士的角色从推演者转变为操作员和转述者。术士不再需要理解推演过程,他们只需要理解软件的输出结果,并将这些结果用话术包装后传递给顾客。推演的核心环节被外包给了看不见的代码,而术士在这个过程中丧失的,不仅仅是技能,也是一种解释的权威。当术士自己都无法解释推演过程时,他凭什么让顾客相信他的断语是基于一套可靠的模型,而不是随机的数字游戏?
这个问题在互联网时代到来后变得更加尖锐。1990年代后期,随着互联网的普及,排盘软件开始从单机程序向网站应用迁移。1999年前后,中国大陆出现了第一批提供在线免费排盘服务的命理网站。用户无需下载和安装任何软件,只需在网页上输入出生日期,点击排盘按钮,服务器端的CGI程序或ASP脚本就会在后台完成计算,并将结果以网页形式返回。这种零门槛服务彻底改变了算命术的传播方式。在此之前,求测者至少需要找到一位术士,支付一定的费用,才能获取自己的八字排盘。而在线排盘网站将这个过程变成了免费的、即时的、匿名的自助服务。任何人,在任何时间,在任何地点,只要有一台能上网的电脑,就可以在几秒钟内获得一份完整的八字命盘,附带十神标注、大运排列和流年分析。
这看起来像是知识的民主化:排盘技术不再被术士群体垄断,而是向所有网民开放。然而,这种开放同时也是一种新的封闭。在线排盘网站的输出结果通常比单机软件更加详细,但它们对底层算法的暴露却更加彻底地隐藏。单机软件至少还有一个可执行文件存放在用户自己的电脑上,理论上可以被逆向工程——尽管这需要相当的技术能力。而在线排盘的计算过程完全在远程服务器上完成,用户连那个可执行文件都接触不到,他们看到的只是最终生成的HTML页面。代码变成了一个绝对的黑箱,它存在于某处机房的一台服务器上,用户不仅看不到它的内部逻辑,甚至连它的存在本身都感受不到。整个过程被简化为一个“输入-输出”的魔法盒子:输入出生日期,输出命运分析。至于中间发生了什么,无人知晓,也无人关心。
这种“输入-输出”模式,在商业逻辑的推动下,进一步演化为更彻底的去技能化产品。2000年以后,一些命理网站开始提供“在线算命”服务,其后台程序不仅完成排盘,还直接输出断语。这些断语是从《三命通会》《穷通宝鉴》等古籍中抽取的典型条文,按照固定的逻辑规则与八字中的特定组合进行匹配后自动生成的。例如,如果八字中出现“日主弱而官杀重”,程序就会自动匹配相应的断语,如“一生多病,凡事不顺,易遭小人”,并将其显示在网页上。整个过程不需要任何人工干预,术士的角色被完全消灭。求测者面对的不是一个活生生的人,而是一个网页界面,上面印着几段由算法生成的、似是而非的断语。
这种算法断语在技术上是排盘软件的自然延伸,但它在性质上已经越过了某个关键边界。排盘是一个数学问题,将出生日期换算成干支八字,这个过程有明确的、可验证的规则,计算机可以做得比人更快更准。但断语不是数学问题。断语是将八字中的符号组合映射到人生境遇的语义解释,这个映射本身充满了模糊性、灵活性和上下文依赖。同一个“日主弱而官杀重”,在不同的大运背景下,在不同的流年环境中,其含义可能完全不同。传统术士在给出断语时,会综合考量命局中其他干支的配合、大运的走向、用神的选取,以及求测者本人提出的具体问题,进行一种高度情境化的判断。这种判断是算命术作为一种实践技艺的核心所在,它不可能被简化为几条if-then规则。
然而,在线算命网站的商业逻辑恰恰要求这种简化。网站需要的是能够快速生成、批量输出、无需人工干预的断语,以满足大量用户同时访问的需求。于是,程序员将古籍中的断语按照一种机械的匹配规则编入代码:如果八字满足条件A,则输出断语B;如果满足条件C,则输出断语D。这种规则在代码中通常表现为一个庞大的条件判断树或规则匹配引擎。它的每一条分支都是确定的,每一个条件都是布尔值——要么满足,要么不满足。神煞天乙贵人要么存在,要么不存在;格局正官格要么成立,要么不成立。在人工判断中,这些概念是有程度、有弹性、有争议的;但在代码中,它们被硬编码为泾渭分明的二元状态。曾经在历代术士的争论中保持着流动性的命理规则,被代码冻结为不可更改的刚性逻辑。
这种冻结带来的后果是多重的。在技术层面,它消除了人工排盘的不确定性,实现了绝对的标准化。一个八字输入任何一款排盘软件,输出结果应该是完全一致的——如果两款软件的输出不一致,那必定是其中一款的代码有bug,而不是它们对规则的理解不同。这种标准化回应了算命术历史上一个长期存在的尴尬:不同术士对同一命例的排盘结果经常不同,这使得算命术难以建立一种可验证的权威。代码解决了这个问题,但解决的方式不是通过学理论争达成共识,而是通过技术强制消除分歧。分歧没有了,不是因为大家达成了一致,而是因为大家不再争论,或者说,争论的场所被代码占领了。这场持续了两千年的规则之争,以这样一种方式画上了句号:不是某一派理论说服了其他派别,而是一个程序员在键盘上敲下了一行代码,选择了其中一种算法,而其余的算法被永久地排除在了可执行文件之外。
在社会层面,这种标准化瓦解了传统师徒口传心授的知识传递网络。在人工排盘时代,术士的技能是在师徒关系中逐步习得的。这种关系不仅传递技术,也传递信任:徒弟信任师父,是因为师父的口诀在实践中被验证为有效;顾客信任术士,是因为术士的技能来自一个可追溯的师承谱系。信任的链条是人与人的关系。然而,当排盘软件取代了师父的角色,成为排盘技能的来源时,信任的链条被重构了。新入行的术士不再需要拜师学艺,他们只需要下载一个软件,或者打开一个网站。他们的技能不再来自某个具体的人,而是来自一个匿名的代码。顾客对术士的信任,也越来越多地建立在对软件的信任之上。当一个术士说“软件算的,不会错”时,他实际上是在将自己的权威寄托在代码的权威之上。而代码的权威来自哪里?来自它的技术性——它是一种计算机程序,而计算机程序在当代文化中被普遍认为是精确、客观、不会出错的。这种信任是脆弱的,因为它建立在无知之上:顾客不知道代码内部发生了什么,大多数术士也不知道,他们只是选择相信。
这种信任的脆弱性,在2000年代初期的一次网络讨论中得到了颇具戏剧性的呈现。当时,一位命理爱好者在论坛上发帖,声称他发现了某款知名排盘软件的一个严重错误。他指出,该软件在处理1984年11月某日出生者的八字时,将月柱错排为“乙亥”,而正确的月柱应该是“甲戌”。他提供了详细的手工排盘过程作为证据。这个帖子引发了热烈的讨论,有网友补充说,他们用其他几款排盘软件排同一天的结果,确实得到了“甲戌”,说明前一款软件确实有误。开发该软件的程序员随后出面回应,承认了错误,并解释说,问题出在节气表中录入“立冬”时刻时,将“23时46分”误写为另一个时刻,导致程序判断该命例出生在立冬之后,从而错误地使用了下一月的月柱。
这个错误很快被修正,但讨论并没有就此结束。有网友追问:“除了这个已经发现的错误,你的软件里还有多少没有被发现的错误?”这个问题击中了要害。在人工排盘时代,一个术士的错误可能会被同行发现,也可能会在后来的实践中暴露出来,因为术士的排盘过程是可以被重现和检验的。但在代码排盘时代,排盘过程被隐藏在二进制指令中,一个错误可能潜伏数年而无人察觉,因为它只在特定日期、特定条件下才会触发,而绝大多数用户永远排不到那个日期。这个事件揭示了一个更深层的悖论:代码排盘在消除人工误差的同时,也制造了一种新的、可能更隐蔽的误差来源。人工误差是分散的、个别的、可追踪的;代码误差是集中的、系统性的、难以察觉的。一个术士排错一个八字,影响的只是当天的那一个顾客;而一款排盘软件的代码中如果存在一个bug,它可能影响成千上万个用户,这些用户分布在不同的时间、不同的地点,彼此之间毫无联系,他们永远不会知道,自己手中的那份八字排盘从根子上就是错的。
这种风险的性质,与传统算命术的风险性质完全不同。它不再是“算命准不准”的问题,而是“输入数据在处理过程中是否被正确转换”的问题。换句话说,它从命理学的认识论问题,转变成了软件工程的质量控制问题。然而,大多数用户并没有意识到这个转变。他们看到的,是图形界面日益精美的排盘软件,是功能越来越丰富的在线算命网站,是“专业版”“大师版”“至尊版”等令人眼花缭乱的版本升级。1990年代后期到2000年代,Windows操作系统取代DOS之后,排盘软件的界面设计经历了一次大规模的“美化”运动。早期的命令行界面被替换为带有按钮、菜单、对话框和彩色图表的图形界面。八字排盘结果不再是一行行干巴巴的纯文本,而是被精心排版在一个带有方框、线条和着色区分的大表格中。十神用不同的颜色标注,大运画成时间轴,流年以小字号列表形式排列在下方。有些软件甚至加入了“命盘解读”功能,自动生成一段数百字的命理分析报告,语言风格模仿传统命书的笔调,夹杂着“日元得令”“食神生财”“官印相生”等术语,读起来颇有几分专业风范。
这些设计变化在表面上提升了用户体验,但在实质上进一步加深了黑箱的封闭程度。精美的界面在用户与代码之间增加了一个视觉层,这个视觉层越是友好、越是“专业”,用户就越倾向于相信输出结果的权威性,而不是去质疑其背后的算法。一个值得注意的现象是,许多排盘软件在“关于”页面或启动画面中,会列出该软件所依据的理论经典——《三命通会》《渊海子平》《滴天髓》《穷通宝鉴》等,以此暗示其学术正宗性。但这些经典中的哪些规则被采纳了,哪些被舍弃了,哪些存在争议,软件从不说明。用户被引导着相信,他们正在使用的是“三命通会的现代版”,但实际上,他们使用的只是某个程序员根据自己对《三命通会》的理解——或误解——而编写的一套代码,而这套代码的正确性从未经过严格的学术检验。那些被列出的经典书名,在界面上扮演着一种装饰性的权威背书功能,它们不再是被阅读和争论的文本,而更像是一种商标。
到2010年前后,随着智能手机的普及,排盘软件从桌面端迁移到移动端,成为一个随身可用的App。这一迁移进一步将排盘行为融入日常生活。求测者不再需要专程拜访术士,也不再需要打开电脑登录网站,随时随地掏出手机,点击App图标,输入生辰,八字立现。
排盘这个动作,从一项需要专业技能和专门工具的工作,变成了一个像查看天气预报一样简单的日常操作。
App商店中的排盘软件数量激增,免费下载成为主流模式,盈利方式转向广告植入或高级功能付费。一些App的下载量达到数十万甚至上百万次,这意味着有数以百万计的手机用户,每天在使用这些软件排算自己的八字。算命的入口被彻底打开了,但打开入口的钥匙,掌握在软件开发者手中。
这数以百万计的用户,在按下“排盘”按钮的那一刻,便将自己的出生时间交给了代码。代码忠实地执行着程序员预设的算法,将年、月、日、时四个数字转换成甲子、乙丑、丙寅、丁卯等天干地支的组合,再将这些组合与神煞表、十神表、格局表进行匹配,最终输出一份密密麻麻的命盘。整个过程通常在一秒之内完成,屏幕上显示的信息量远超任何一位传统术士在十分钟内能够手写完成的内容。但这一秒之内,没有任何一个步骤是“理解”的。代码不“理解”什么是“甲子”,什么是“正官”,什么是“用神”。它只是在执行指令:将变量A的值与数组B中的第N项进行比对,如果相等,则输出字符串C。这种“执行”在效率上是完美的,在意义上是空洞的。
代码将算命术从一种实践技艺逼入了数字黑箱,而在这个黑箱的深处,曾经让算命术得以在数千年历史中不断自我修正的那种核心能力——对规则的质疑、争论和灵活运用——正在被一行行确定性的代码静静埋葬。
到2015年前后,主流排盘App的代码库已经膨胀到数万行甚至数十万行。一个典型的iOS排盘App,其源代码中用于处理神煞匹配的规则引擎,包含了超过两百种神煞、每种神煞对应的多套取法规则,以及数千条条件判断语句。这些语句嵌套在十数个层次的函数调用中,彼此之间形成了复杂的依赖关系。即使是该App的开发者本人,也无法在不借助文档的情况下,完整说清某一条断语是从哪个规则路径推导出来的。
代码已经成长为一个超出任何单个人类理解力的复杂系统,它忠实地运行着,但它运行的逻辑,对所有人而言都是不透明的。
这些App的累计下载量已经突破了千万次门槛。千万次下载,意味着千万个用户,千万次按下“排盘”按钮,千万次在屏幕上看到那些由算法生成的吉凶断语。这些断语以零边际成本复制传播,每一次输出都不增加任何额外的计算开销,但它们每一次出现在屏幕上,都在强化着一种印象:命运是可以被精确计算的,而这个计算的结果,就写在眼前这行方正的字句里。
这种算法黑箱的冰冷与不可解释性,与人类面对未知压力时寻求慰藉的深层心理形成了尖锐对立。研究顯示,人们在面对未知压力时会變得較為迷信,因此更可能尋求占卜等被視為迷信的手段来解決問题。然而,代码编译时代的算命术提供的,恰恰是一种抽离了人情对话与解释弹性的、预设了某种超自然力量或命運会造成影響的机械输出。当屏幕上的那句“一生多病,凡事不顺,易遭小人”以字体工整的方块字呈现时,它不容置辩,却也无法提供任何安慰。
当排盘软件以零边际成本吐出冰冷且不可更改的吉凶断语时,被剥夺了推演过程与解释弹性的求测者,不得不面对一个没有温度的算法黑箱。他们得到了速度,得到了便利,得到了一个看似精确无误的答案,但他们失去的,是一个可以追问、可以质疑、可以讨价还价的意义生成过程。屏幕上的那句“一生多病,凡事不顺,易遭小人”,以字体工整的方块字呈现在那里,不言不语,不容置辩,如同一道来自虚空的判决。而这道判决的背后,是数万行无人能完全读懂的代码,以及一个被冻结在二进制指令中的、失去了所有弹性的古老知识的静默残骸。