肥龙的唯计算机主义世界观

每一个从事计算机行业的技术人员都应该倍感自豪,因为我们在从事上帝曾经从事的工作——创造。我们在用0和1来创造这个世界上不曾有过的东西。
——题记
记得我在我最近一次的演讲上提到过,如果有人愿意听,我可以用面向对象的思想来跟他讲“物种起源”。这正是我写这篇文章的目的,但是或许你看不到文章里有达尔文的《进化论》以及生物的发展与演变,然而,你可以看到我用计算机中的很多思想、思维方式等等来讲述这个世界的形成和物质的演变。
第一章 知识过程
这篇文章中的一切想法都是我从学校、电视、互联网、朋友等等很多途径学习到并融入自己的思考而形成的,因此,首先得谈一谈计算机这么个无机的东西是如何和我们这个有机的世界联系在一起的。
知识是从哪里来的?具体是谁创造的,我并不能告诉你,我们就假定是上帝吧,但是可以明确地告诉你的是,知识就在我们所存在的物质世界里,对于所有的生物而言,我们通过自己的五感来获取知识,虽然在我们看来,普通的动物们没有思想,但是,它们的脑袋里面是装了知识的,因为他们也有和我们一样的感官,而且他们也要有生存技能,但是他们的知识是如何记录和传递的,我就不赘述了,毕竟我们交流起来太困难了。那么对于人类而言这个过程是怎样的呢。
我觉得需要细分为几个小的过程:
第一, 认知
我们的祖先通过自己的五感首先来完成一个原始积累,于是,有了那些看到的、听到的、闻到的、摸到的、想到的等等。这些东西,统称为经验。
第二, 积累和传递
经验被转到我们祖先的大脑里,具体是什么方式我讲不清,反正就装在里面了,他们发现,如果他们死去,那些令他们自豪的发现会随他们而去,他们出于某些情感的原因,希望把这些东西传递下去,于是,他们想到了2个方法——找一个人讲给他们听,找一种方式记录下来。这也是现在的方式,只不过经过长久以来的积累,我们运用知识,将这2种形式优化了,找一个人讲给他听的这种方式被演化成了“教”,而记录则由结绳记事、壁画等等演变到了纸、硬盘等等。
对于知识的过程我想延伸来说说自顶向下和自底向上,这2种方式的行为交错地贯穿在知识的过程中,比如说,有人会说你看问题很肤浅,只看到了表象,这就是一种典型的自顶向下,我们首先总是有个叫做“第一印象”的东西,然后,一个求知欲很强烈的人会去思考这个“第一印象”的背后隐藏了什么,然后,我们就发现了“原理、原因”等等,然后原理背后的原理是什么?原因背后的原因是什么?别跟我说根本原因,导致根本原因的原因是什么?于是,知识越来越多,为了更清楚地认识这个世界,我们需要知道的东西也更多,心理有不明白,你永远会感觉不爽,于是“路漫漫其修远兮,吾将上下而求索”。这就是自顶向下的知识积累过程,那么自底向上呢?“存在”就是一个自底向上的过程,我们现在看到的每一个东西都是基于某个东西而存在的,而那个东西又是基于另外的东西而存在的,让后有人就提出“鸡生蛋?蛋生鸡?”这就是我一直在说的,人类在认知的过程中是一个发现的过程,而不是创造什么,那些东西都是创世之初就已经存在了的,而现在知识不过是在我们的认知过程中慢慢展现出来。
上面的两个过程,其实在学校里我们就经历过,每一门课的学习都是这样的,但是有时候时自顶向下,有时候是自底向上。比如,数学我们会学习0-9,然后学习0-9的运算,然后慢慢延伸开,就有了数学王国,但是数学的形成却是自顶向下的,0和1之间有什么?小数,0之前有什么?负数,小数里面还有什么有限小数,无限小数…就这样一点点扩展开去。还有很多例子我就不一一赘述了。
说到这里,有人可能会疑惑,既然知识是发现的,那么数字、语言等等这些东西不是创造的又是哪里来的?这些东西的形成是一种必然,数字、数学等等一些理论如果我们不提出,不用符号来表示他们就不存在了?这显然是谬论,我们把公式里的字母换掉用“这个”“那个”之类的代词来替换明显也似乎成立的,所以,都是发现的。而语言的形成是一种必然,为什么世界上会有那么多种语言?这个就得从很多方面来讲了,首先是振动,振动形成波,而某一类波可以人类的听觉来感知,那些东西就叫声音。之所以人类只能感受那些特殊的波,是因为人类在长期的自然选择中逐步形成的,至于具体为什么,问大自然吧。于是,人类、普通动物的发声什么的就被确定了,当然,还有人类感知不了的,那些对于这个问题没有作用,就不讨论了。人类发出的声音现在是有办法进行合成的,合成的原料我们称之为声音元,就好比原子来构成物质(原子以下就不分析了,没意义)。语言不过是声音元的排列组合而已。当然,世界是连续的,我们无法列举所有的声音元,合成也是有差别的,但是人类的感官很差,很多东西感受不了也不必讨论。这还涉及一个非常重要的理论“离散”,后面会详细说。声音元的排列组合是如何形成的?和知识的积累一样,一点点规定、归纳、传承、发展,而这个过程受环境因素影响,到底是一个怎样的一一对应关系?50多亿年,恐怕我说不清,但是可以肯定是有关系的。我是这样来证明这个观点的:我们会发现世界各地的人长相是存在差别的,这个是由环境影响的,已经有人帮我证明了。那么他们发声的能力也不同,于是,语言也不同。于是,我终于证明了语言的形成是一种必然——环境影响。为了方便语言的传递等等,文字的出现过程也和上述差不多,最直接的证明就是那些象形文字,每一种语言配套的文字中总有一些象形的东西,这正是环境影响的很急,至于后面的一些演变,又和人类的意识比如思维方式会对其产生影响,而人类的意识一方面跟他的知识有关,另一方面还要掺入无法表达和描述的情感这个就解释不清楚了。现在的每一个人都不是简简单单的一个人,都是有50亿年积累的人,个中很多东西,我这篇文章实在是没法都说明白。我不过是提供一个思路,你可以顺着我提供的思路去思考那些你想不通的原因。
第二章 离散
前面一章介绍了很多与主题离得不近的东西,是为了方便计算机之外专业的人来阅读,同时也想展示我关于那些问题的思想,下面就要正式开始计算机与世界了。
最一开始,我们《离散数学》的老师总是说,《离散数学》是计算机的基础,我们一点也不以为然,但是当我对计算机的理解一步步加深的时候,我终于明白了,没有离散就没有计算机。
一切的思想都不是平白无故出现的,哪怕是这篇分析源头的文章,也是从我的认知里提取出来的。我想,我的这篇文章的根本原因就是“离散”吧,什么是离散?
首先,你需要回答我“0和1之间有什么”,上面我分析过,有小数,每一个小数之间呢?我们可以不停地分下去,就是分不到头,就好像有人一直在问原子是由什么构成的,构成原子的东西又是由什么构成的?“一尺之槌,日取其半,万世不绝”。这就是我们的世界,一个连续的世界,所有的东西都之间都会没有缝隙,但是它是如何被填满,我们不得而知。因为这是上帝创造的世界,我们对这个世界的理解还不够。终于,我要提到题记里面的东西了,我们为了创造我们的世界,我们需要做一件力所能及的事情来简化这件事,因为我们的能力远不及造物主(这里并不是“神创论”的思想,不过是引入一个概念防止我们陷入“鸡生蛋?蛋生鸡?”的死循环)。我们做了什么?离散!我们假设0和1之间什么都没有,在前面我提到过,人类的感官很差,感受不到很多东西,于是我们假设0和1之间什么都没有,然后通过一些特殊的手段(计算机方面的技术)就会让人类察觉不出来。最容易被人理解的例子就是相片,以前,我们用的照相机用的是胶片,照出来的影像是连续的,通过小孔成像曝光胶片得到的图像也是连续的,上面的线条、颜色、面、空间都是连续的,然而,我们现在用的是数码照相技术,东西就离散了,简单地说,我们拿一张有很多方格子的玻璃纸蒙到一张相片上,把相片分割成了一个个的小块,这些小块达到技术要求的时候就叫“像素”。但是你看得出来相片里面有什么不对么?
第三章 面向对象
面向对象的思想应该是软件编程语言在发展的过程中最了不起的变革了吧,终于,人类把计算机和现实世界的距离拉近了一大步!到底什么是面向对象呢?
单独提出面向对象的概念是没有意义的,首先还是讲讲面向对象之前的思想吧——面向过程。以下棋为例子来说什么是面向过程吧,赢是你的需求,为了达到赢的目的,你就不停地调用你的下棋策略,以便你能应对对手的各种状况,来赢得胜利。对手的每一步所表达的信息,就是你做出对策的依据,而你的策略什么的,是一些你存在脑袋里的一套想法。这就是编程过程中的函数调用啊,在整个过程中只有函数调用的过程,并没有什么实物的出现。或许你还不能理解刚刚的过程,但是当相对于面向过程来讲面向对象的时候,就能看到巨大变革了。
世界不是只有事件的,因为事件都是有个叫做对象的东西干的,比如说人。如果没有人,世界不会这么复杂,动物们过着弱肉强食,吃饭睡觉的和谐生活,人类的出现让人性扰乱了世界本来的秩序。比方说,我用面向对象的思想来描述刚刚的下棋过程:
下棋首先必须有人,人不是直接下棋,人只是一个很大的概念,可以算是一个容器吧,这个容器里面装了很多东西:各种器官等等,这些器官各司其职、各具特点,而人这个概念是负责有序地协调各个器官,人这个概念还包含很多其他的东西——动作等,这些东西是看不到的,只有当人发出动作的时候才有所体现,比如:动脑筋、动手、动脚等等。而像脑筋、手、脚也可以像人这个概念一样拆分,手有很多手指、指甲什么的,手指又有什么功能?指甲又负责什么?一直就这样分下去,就算到了原子也不会完。之所以会这样,是因为我在描述这个连续的现实世界,而通过上一章的离散思想,我们可以只分解到只有0和1的情况。这是物质拆分的情况,而下棋这个事件的进行过程呢?也是一级级来的,首先人调用控制闹的动作去思考,想出手应该怎么动,然后把相关的信息(参数)传递给人,人又通过那些定义好的动作来控制手,让手根据刚刚得到的信息去动,手动的过程又是通过手对手臂、手腕、手指什么的来执行动作,直到棋子的移动。重复上述过程直到棋局结束。同样的,棋子也是一个对象,我们也可以来进行刚刚的分析。
总的来说,某件事情在发生之前,我们首先要找到能够完成这件事的对象(群),然后经过刚刚的过程来完成事件。
2个过程对比,我们看到最明显的变化就是,下面一个复杂很多,但是分析得清晰很多,各个部分的分解就不用说了,各司其职一点也不会乱,什么《五官争功》之类的笑话肯定不会出现了。而且回想起来,现实世界也是面向对象的世界。
最充分的理由就是我之前思考过的一个悖论,我叫它“定义未来”。未来是不是既定的?如果是,那么和未来相关的信息将存放好啊,但是如何存放呢?存在哪里呢?世界上那么多的信息怎么存得完啊?于是,就在我准备说未来肯定不是唯一的时候,我发现了问题的解决办法——面向对象。面向对象的过程还有一个很重要的工作就是“抽象”,很多东西都有共性,我们把具有共性的东西归为一类,也是面向对象编程语言中提到的“类”。说到这里,我不得不感叹“创造编程语言的人也是艺术家,用词之准确,描绘之精辟真的是了不起!”而中国人仅仅只是把class这个词翻译成了“类”…比如说“人”这个概念,我们就可以归为一个“人”类,至于每一个不同的人,我们就先规定好他们身上每个差不多的地方的名称,然后每个人的同一个地方拥有不同的值,比如同样叫头发的东西,可以有黄的也可以有黑的。还有个概念叫继承,在定义的过程中是这样体现的:就和我们对动物等等进行分类一样,什么“纲、目、属”的,一级一级下来,类里分类,形成一个树形的东西。然后,关于这个世界的信息量,减少了N被,我们通过“抽象”这项工作把定义的需要耗费的空间减少了很多。再加上一个叫做“递归”的东西,我们就可以把这个连续的世界给定义完了。比如,一个数学公式s=1+2+3+…+n;家了多少个你知道么?2个数之间的最小距离怎办?a=a/2;如是,我们把世界定义完了,至于未来,我们并没有把结果写下来,只是把未来弄成了必然。每个人出生的环境都是固定的,也就是说,人从外界获取的信息是一定的,因为环境在你出生之前已经存在了,然后你处在那种环境下,你的成长结果也是固定的,你的性格什么的也是由于环境对你造成的影响,至于那些天生的东西,也不是由你决定的,而是在你被孕育的过程中,有孕育你的环境决定的。这些,我们都可以抽象为一些信息量(参数),而你接收到这些信息量产生反应的过程可以看成是一种运算,就是根据你获取的信息量来进行运算,但是运算的公式已经是确定的了,所以结果虽然你之间看不见,但是只有一个。别说有什么算错老大情况,算错了是因为某些你没有看到的信息量,在这个公式中对运算结果的影响。于是,未来什么的,就被这些已经既定的信息量以及既定的运算公式决定了。至于什么出生以后融入环境并影响环境之类的问题,我们需要展开来讲《编译原理》,有兴趣自己去了解一下,怎么用1定义1,0定义0,然后一点一点满满构建出世界,这些纠结的递归思想,尽在《编译原理》。
第四章 创世界
具备了上面的理论基础,计算机的发展史就是人类创造世界的技术发展史。
感谢冯诺依曼创造了世界上第一台计算机,如果将来虚拟世界和现实世界能够无缝连接,你讲成为上帝的始祖。
那么我就来讲讲现在人类是怎么创世界的,这和这个世界的形成又是一个怎样一一对应的过程。人类文明相对宇宙的发展实在是太微不足道了,相对于宇宙的年龄,年轻都不足以形容了。所以,这么嫩的人类,或许还有什么玄机没有破解,就好像我们不能创造出真的生命一样。生命的生生不息是一个不能被打破的平衡,不然就会有物种灭绝,地球也终将毁灭,而人类现在创造出的世界,还无法出现和现实世界一样的平衡。我们赋予我们创造的世界的能量叫做电,电是驱动虚拟世界的代替生命能量的一个概念。就因为这些种种没能解开的谜题,这些种种我们还没能发现的知识,限制了我们创造的世界的完美性,所以,现在我们创造的世界离现实世界还很远。但是,随着时间的推移,那些难题被攻克,人类创造生命、空间是迟早的事情。
那么就开始描述,我们手中那不完善的世界好了——“硅生半导体,半导体生电,电生0/1,0/1生万物”。
生物的运作靠的是什么?暂且称为“生命力量”吧,说不清,我们为了创造自己的世界,用电来代替这个生命的力量,其实电应该是比较接近了,因为生物体内是通过电位差来传递信息,维持生物的正常活动的。只是生物的那种方式,我们还不很清楚,我们还不能套用,不能模仿。生物可以识别很多种电位差,精确感受细微的差值,而我们目前的能力,只能让机器感受个大概——0/1(高和低)。世界是物质的世界,有机是建立在碳的基础上的,有个叫比尔盖茨的人说,人类用碳思考,计算机用硅,既然是同组元素,人能做的,计算机也能做。于是,我们用单晶硅来作为我们创造的那个世界的物质基础。半导体技术帮助我们制造出可控的电位,然后,我们通过技术手段来识别这些高低电位,于是0/1就很轻松地从理论走向了我们创造的世界。然后,从0/1引入计算机到机器语言发展到面向对象语言我就不赘述了,前面有提到。下面就来说怎么通过面向对象的编程语言来构建符合人类观念的世界吧。其实我们创造的世界从硅开始,就好像我们所在的这个世界从宇宙开始,而不是从地球开始。
首先,我们要进行面向对象的分析,就像上一章,我分析人下棋的那个过程一样。我们首先要定义出一个完整的世界,这就是我们写的一个程序吧。虚拟世界的“宇宙大爆炸”是什么时候,我也说不清,反正,计算机的发展过程中,就是不断地利用前面写的一些东西来逐步扩大、发展、完善我们构建的系统。其实,每一个程序都相当于宇宙空间中的一个星球,他们是独立的,他们装在不同的机器里,运行在不同的机器里,当互联网把那些机器联系起来的时候,他们就到了同一个宇宙里,而运行着的系统里的每一个对象,或许就是一个“人”,通过对对象属性的赋值、对象方法的调用,人类创造的世界就这样生生不息的运作起来。
后序:
很可惜,我对文章读者的定位不清晰,一心想着让非计算机专业的朋友也能看懂,结果文章不伦不类,很多东西都没能表达清楚。其实文章的主旨只有一个:“人类在一步步把现实世界中有助于计算机发展的思想等等在经自己思考后,通过自己的技术将其融入计算机”。但是,像这样努力地用通俗的语言去讲述生涩的技术,是我一直在追寻的一门技能,权当练习吧。有时候很烦自己,写文章都写了这么多了,但是还是老是言不达意,如果有人有兴趣来听我口述,我相信你会有对这篇文章不一样的感觉~

你可能感兴趣的:(计算机)