第二十章 布尔运算
“不对吧?”尤基皱着眉头:“师父,好像不是这样的。在棋牌类游戏里面……还有,还有驾驶里面,电脑比生物脑厉害多了。”
向山点了点头:“没错,但是一个下棋厉害的计算机,也只能下棋。它永远不会懂‘为什么要下棋’这件事,甚至不一定知道自己在“下棋”。如果它的造物主不做出指示,那么它一辈子也别想再去做第二件事。”
这应该是……是很久很久之前的事情了?向山觉得,这可能是自己出生之前就发生了的历史。那个时候,有一位指挥家。他是一位21-三体综合征患者——所谓的“先天愚型儿”。或许他仅仅是因为出生在音乐世家,所以将“模仿指挥动作”当成一种游戏,但他确实以“指挥者”的身份登上了舞台。那么他的大脑之中是否存在“音乐”呢?
或许确实,这个可怜人心中确实知晓什么是音乐的吧。
但在“音乐”之外的事情,他就不怎么能够理解了。
而计算机内孕育的智能,比这个更加极端。毕竟,即使是先天愚型儿,也知道饿了、渴了。身体不舒服会哭。但哪怕棋力足以碾压棋圣的AI,也不会产生“我还需要电源”或者“我就是想要更多计算资源”的想法。
“实际上,计算机所能做的事情,从来没有超出人脑的部分。纸笔运算……见鬼,你好像不知道什么是‘纸’。”向山摇了摇头,随手抄起一根铁杄,在地上写出q and p。
两个值,1或0,TRUE或者FALSE。
二生三,三生万物。
计算机的一切都是从这里出来的。
“我现在要教你的东西,叫做‘布尔运算’。”向山如此说道:“人类用一根铁杄,就可以在地上完成布尔运算,从而模拟计算机的任何程序——不,这里应该反过来。计算机不过是代替了人的手,在地上写布尔运算的式子。它们只不过是比人类手写更快、更快。仅此而已。”
“这个运算的方式,诞生自伟大的乔治·布尔。在乔治·布尔之前,莱布尼茨和巴贝奇也在做同样的事情——他们尝试用机器进行计算。巴贝奇或许一度接近这个境界,但是终归是没有达到。而布尔和所有的前人都不一样。就好像艾萨克·牛顿试图在时间与空间的维度中描述物质运动的轨迹一样,布尔在尝试描述精神运动的轨迹。这是开天辟地的成就。当然,布尔算法和真正的人类思维的差距,就好像牛顿力学和真实世界的差距一样。但是,这已经是起步了。”
“在布尔之后,人们意识到,齿轮与杠杆可以执行计算、神经网络可以执行计算、不断开合的电路可以执行计算,就算是一堆化学设备,也一样可以执行计算——布尔算法,就将人类思维的一角,拆解成了机器可以理解的东西。”
人类用电路模拟神经网络、执行布尔计算的历史,甚至比冯诺依曼架构更早——早在1943年,神经生物学家沃伦·麦卡沃克和数学家沃尔特·皮茨就制造了第一个可以执行布尔计算的人工神经网络。
而在布尔的时代之前,还有一个发明家,叫做约瑟夫·雅卡尔。他发明了一种全新的织布机。这种织布机可以用打孔的卡片操纵机器上的针线,编织经纬。相似的东西,历史上独立出现过很多次。这种“打孔卡片”甚至可以追溯到中国的东汉时期。
这就是图灵机“打孔纸带”的祖先,是只有若干个字节的、最原始的存储器,是机器们最早的“记忆”。
而希尔伯特为了研究纯粹数学而提出的计划,催动了图灵机的诞生。
最后,这些结果,最终汇聚到另一个叫做冯·诺依曼的人手中。
于此,人类历史上前所未有的工具诞生了。人类的社会、生活乃至政治、军事都为之改变。
“但是,工具总归是工具。”向山如此告诫自己的弟子:“它的本质,仍旧是创造了几千、几万条手臂,为你来执行布尔运算。计算机能够做到的,你自己用布尔运算能够做到的,只不过计算机更快——当然,这种‘快’已经达到了本质上的改变。”
“对于一般的使用者来说,你只需要将任务交给这‘若干的手臂’,就可以等待结果了。但这样是练不成内功的。内功有成者,就等若是能最大限度发挥这无数臂膀的力量,甚至将意志传递到这些手之间。”
“所以,你必须从布尔运算开始学习。”
在内功的领域,数学是“道”,而布尔运算就是“一”。
道生一,一生二,二生三,三生万物。
布尔算法本身不复杂,只是逻辑学的一些延伸。高中程度的数学差不多就够学个入门了。
剩下的,就是大量练习了。
向山花了点时间,向尤基讲述这些问题的精要所在,然后在脑子里直接编写了一个习题册,点对点传输到尤基的脑芯片里。
尤基离开房间的步伐非常沉重。
向山满意的点了点头。他心里有种感觉——这种事情他早就想做一次看看了。
不知道为什么,可能是过去的经历对他造成的影响?
反正他还蛮高兴的。
………………………………………………………………………………
尤基终于做完了习题,回到了自己的房间。
然后他发现,房间里面的气氛完全变了。
向山闭着眼睛,如同冥想一般对着那台终端。终端的屏幕之上,无数的符号刷新一般出现又消失。更多的代码覆盖在代码之上。
而与那终端相连的犬型义体,则在做着各种动作。
向山在参悟每一行代码的意义,然后用自己的代码替换原本的代码。
他要尝试掌握这种不曾见过的组件。
“尤基,习题已经做完了么。”向山依旧保持原本的姿势:“你的脑部芯片是可以随时取下的类型吗?现在方不方便给我一片看看?”
尤基点了点头:“可以是可以……”
他低下头,后侧的颅骨打开。随后,一块备用芯片弹了出来。
义体的驱动芯片永远都有两块或以上。当其中一块出了BUG崩溃之后,另一块就会瞬间接管身体,同时,出BUG的那一块就会快速Watchdog,重新启用。
和向山那种一体式的颅骨有所不同。尤基这种现代式的人工颅骨开启本来就很方便。
尤基将自己的备用芯片递给向山:“师父,你这是干什么?”
“很快就弄好了。弄好了再说给你听”向山摇了摇头。最开始没有注意到这一点,确实是他太大意了。这个时代,上位者对弱者的生杀予夺,比他想象中还有严重。他当初只是发现舒尔茨医生请自己上网,所以就天真的断定绝大多数赛博义体都没有时刻连接网络。
在收尤基为弟子的时候,他只想着避开了村里的监控路线。
但之前镇长的话却提醒了他。
不管社会是怎样的,永远不要小视暴政者对人的掠夺。
实际上,应该还存在一个普通人并不知道、或者根本无法使用的频段。在这个非民用的频段上,所有的义体都是连着网络的——只是那些义体的使用者并不知道。
唯一值得庆幸的是,现在的那些“真正统治集团”,似乎人手不足,或者有其他客观上的困难,没有时时刻刻的监视着每一个人。
——啧……过去应该还没有这个严重。
——但是,这个极端状态,我应该是设想过的。
“练武不练功,到头一场空”。内功设计之初,就包含了对抗这种状态的想法。
因此,在给自己恢复了些许内功之后,向山就给尤基搭建抵御外邪的力量,清除芯片之中的后门。
很快,向山就将芯片整个检索了一遍。果然不出他所料,这个玩意里面,确实存在几个他没有见过的协议,指向了某些具备信号发射机能的端口。
这个端口是用短波通信,信号较为微弱,数据传输能力有限,估计也就只能上传低质量的音频或者图像。
但这就意味着,统治者确实可以在任何时候,对任何个人进行窥探。
“很好,至少值得庆幸的是,这个时代并不存在军队和警察,领主自由裁量权太大……他们最多只能意识到,我可能是个侠客。”
向山很快就在尤基的芯片里面写入了防火墙,使它拒绝那个特定端口的远程访问,并发送伪造的图像。然后他抹去了另外几个协议。
当然,在做这些事之前,他先做好了备份。
向山将芯片还给尤基,道:“自己试一试,有什么不对的地方跟我说。如果没问题的话,等会再帮我一个忙。”
向山自己现在驱使义体,是靠镇长赠送的那一枚廉价芯片。而那一枚驱动芯片里,同样有可能存在后门。向山的人工颅骨不像尤基这样可以自由开合。如果没有特殊的工具,他就必须得靠别人帮忙,才能将插进去的芯片取出来。
这就相当于将自己的大脑暴露给其他人。向山必须有一个可以信任的助手,才敢做这种事。
另外,他也必须杜绝“进行到一半的时候,助手被人远程脑控,手指一个哆嗦戳进自己脑子”的状况。因此他才优先给尤基准备了“灌顶”。
尤基一面将自己的数学作业传输给向山检查,一面按照向山的吩咐,跑跑跳跳,测试一下驱动芯片是否有BUG。
人类在很早的时候就学会了“不要追求没有BUG的编程”这件事,只要程序能跑起来,存在BUG也无所谓。
高级语言按照“类型论”的分法,大致可以分为“类型不安全语言”“类型安全语言”与“强规范化语言”。强规范化语言倒是可以保证“不会出错”,这类语言对于任何程序都能给出唯一结果并且停机,绝对不会陷入死循环。但也正因为强规范化语言舍弃了“循环”的概念,失去了图灵完备,所以任何错误系统根本不予识别不准运行。
简单来说,强规范化语言就是“程序跑起来就绝对不会出错,里面但凡有一丢丢错误就跑不起来”的状况。
而侠客们,则偏向于使用“类型不安全语言”。这种语言的使用者,日常就处于“我写的代码不能跑了?这是为什么?我写的代码能够跑了?这是为什么?”的疑惑当中。这种语言很容易就产生“无法预料的错误”——这种“无法预料”可以说是数学本身注定的,在程序跑起来之前,就连编写者本身也无法预测。
当然,这种“难以理解”,对敌人来说也是一样的。
向山宁可麻烦一点,在写任何程序之前都做好几次测试,也要选择“类型不安全语言”。
但向山的水平似乎真的还可以。尤基的驱动芯片依旧可以正常的驾驭义体。