1、众所周知,计算机基本计数系统为二进制,即“0”和“1”,这与“阴”和“阳”是相对应的。在今天的计算机系统中,一个字节(byte)由八位(bit)构成,最多28256中情况。当然,这样少的状态,肯定不足以表示千变万化的世界。于是,科学家又发明了字(word)的概念,即将两个以上的字节合并起来。如果两个字节合并,即16位,可以表示21665536种状态;如果三个字节合并,即24位,可以表示22416777216种状态;如果四个字节合并,即32位,可以表示2324294967296种状态。依次类推,如果是八个字节合并,即64位,能表示的状态就相当可观了。 然而,即便如此,在博大的世界面前,64位的二
2、进制状态所能表示的状况依旧很不足。世界上可能远远不止264种事物,更何况每种事物还自己的特有属性和不同状态。于是,科学家们又发明了相对独立的编码系统。不同的对象只有在相应的系统里才能被正确解读,否则毫无意义。通过这样的处理,有效地避免了相同编码可能引起的错误,更重要的是,大大地扩展了每个系统的相对独立空间,极大地提高了计算机的存储和运算能力。在数据总线32位的计算机中,图像解码器能够轻松地解读色深24位的图像。每个像素占用3个字节,从纯黑色(0,0,0) 到纯白色(255,255,255),总共可有16777216种不同的组合,足以表现色彩斑斓的世界了。 从2位“0”和“1”到64位“0”和“
3、1”,两个简单的数字不断重复就能够描述博大多彩的世界,在计算机发明的初期,科学家们需要有多么大的勇气和多么丰富的想象力才能坚持下去,以完成这个看来似乎不可能完成的任务。二、逻辑的世界 计算机科学是“1”和“0”的世界,是高电平和低电平的世界,是“联通”和“断开”的世界,是“真”和“假”的世界,是逻辑的世界。 古希腊杰出的思想家亚里士多德(B.C.384B.C.322年)被人们公认为逻辑学的创始人,他将关于科学证明的论述从几何学中抽象出来,形成了以同一律、矛盾律、排中律三大基本规律为核心的逻辑体系。亚里士多德强调思维形式与存在形式的一致性,认为逻辑的形式是客观事物存在形式的反映。在亚里士多德看来
4、,形式逻辑不仅存在于是思维之中,也存在于经验世界之中,所以,世界也是形式逻辑的。 在今天的计算机科学中,形式逻辑的规则得到了淋漓尽致地运用。形式逻辑的同一律规定了“1”和“0”的确定性;矛盾律规定“1”不是“非1”,“0”不是“非0”;排中律规定“1”和“非1”、“0”和“非0”既不能同真,也不能同假,如果其中一个为真,另一个必定为假。在计算机电路的设计中,形式逻辑具体表现为简单逻辑电路的与门、或门、非门运算,还表现为复合逻辑电路的与非门、或非门、与或非门运算。计算机中绝大部分电路就是由这些可以对“1”和“0”两种相反状态进行运算的基本逻辑电路组成的,“1”表示真,“0”表示假,运算结果决定程
5、序的走向,控制着计算机操作。例如,以下C+代码即需要通过或门逻辑电路实现: if ( a = 1 | b = 1 ) c = 1; else c = 0; 如果a为开关1,b为开关2,c为灯泡,在并联电路上,只要开关1和开关2有一个接(一)循环算法中的“量变”与“质变” 量变是质变的基础,任何事物在发生质变前都有赖于量的积累。反映到现实生活中,我们要做成任何事情,都必须朝着目标一步一步地向前推进。那么,在计算机中,如何实现类似的目标呢?可以用下面的循环语句来实现: for ( i = 0; i n; i+ ) ai = bi; 这是将数组b中的各元素的值赋值给数组a,逐个赋值,直到所有的元素赋
6、值完,通过单个元素的操作,最后成为整个数组的赋值。 在程序设计中,程序员大量使用循环语句,因为循环语句是实现量变到质变哲学思想最有力的工具。(二)二分法中的“一分为二” 在计算机程序设计的检索算法中,有一种称为二分查找法的,充分体现了物质无限可分的哲学思想。二分法首先假定,有一组数字或字符串已经按照升序(或降序)排好,要在其中查找某个数字或字符串,我们每次只需要将要查找的数字或字符串与这一组数据处于中间位置的那个进行比较,如果比处于中间位置的那个小,我们就到左半部分去查找,反之,我们就到右半部分去查找。再将要查找的数字或字符串与这一半数据处于中间位置的那个进行比较,视大小决定是到一半数据的左半
7、部分查找还是右半部分查找。如此不断重复地使用同样的方法,直至找到或找不到。例如,在一组升序数中查找3: -1 0 1 3 4 6 8 9 10 -1 0 1 3 1 3 3 二分查找法将数据从1分成1/2、1/4、1/8使查找效率成倍提高。由于查找目标是确定的,与物质无限可分的思想不同,二分查找法实际上运用的是一种有限可分的思想。(三)递归方法中“矛盾”的化解 递归方法是计算机科学中一种很重要的方法。所谓递归就是将一个较大的问题归约为一个子问题,子问题再归约为子问题,直到最后一个子问题,不同层次的子问题与原问题在结构上是相同的,解决问题的方法就是将最后一个子问题作为出口,层层向回求解。从程序设
8、计的角度看,递归方法就是程序调用自身,层层嵌套;程序从嵌套最深的内层开始,逐步向外层求解。 例如求解n!问题: int f(int n) if ( n = 1 ) return 1; else return n * f(n-1); 因为1! = 1是已知的,所以求解n!时,n = n * (n-1)!,依赖于(n-1)!的值,依次类推,直到2!依赖于1!,到达递归出口,即可求解。 实际上,计算机科学中的很多问题,都要求我们首先对实际问题进行具体分析,从问题本身抽象出一个数学模型,然后设计一个符合这个数学模型的算法,最后根据算法编写程序,运行程序以解决问题。从哲学意义上讲,就是要求我们透过表面现
9、象,抓住主要矛盾,深入分析本质,掌握变化规律,形成正确认识,最终解决问题。这是我们解决实际问题一种十分有效的方法。四、具体与抽象的哲学方法 认识从实践中产生,又反过来指导实践,这就是实践、认识、再实践、再认识的认识论思想。在计算机科学中,面向对象的程序设计方法深刻体现了认识论的一般规律,充分展示了具体抽象具体的哲学方法。面向对象的思想就是用面向对象的观点和方法来认识和描述客观世界。客观世界中的任何事物都可以称为对象,面向对象就是从客观实际出发,具体对象具体分析,去粗取精,去伪存真,由此及彼,由表及里,建构关于对象的数据模型和对象间的通信关系。例如,北大学生都是有姓名、性别和学号的,我们就可以依
10、据这些得到关于北大学生的抽象概念;当然,如果对象具有某些动作特性,也可以作为操作考虑进去。于是,我们可以建立以下关于北大学生的数据模型: class PKU_Student public: string Name; string Sex; int No; PKU_Student(string name, string sex, int no) Name = name; Sex = sex; No = no; ; 关于北大学生的数据模型是从许许多多北大学生的特性抽象而得来的,北大学生作为对象是具体的,北大学生的类概念是抽象的,这个阶段是一个从具体到抽象的过程。有了抽象的类概念之后,我们就可以用它
11、来方便地解决具体问题了。例如,如果我们需要记录一个北大学生的有关信息,就可以: PKU_Student studentA(John,male,12715); 语句PKU_Student studentA就是创建一个具体的对象,括号中的三个参数是将详细信息赋予我们创建的对象。PKU_Student是抽象的类概念,而studentA是具体的对象,这个阶段是一个从抽象到具体的过程。 实际上,不仅仅是应用软件,计算机操作系统的设计也普遍运用了由具体到抽象再到具体的哲学方法。为了做到公平分配计算机资源,科学家依据生活中排队的方法创造了队列机制;为了提高运行效率,科学家模拟工作中分工协作的方法创造了并发机
12、制;为了防止和打破无休止的僵持和停滞局面,科学家创造了各种消除进程死锁的机制。可以说,计算机科学中由具体抽象而来的方法和机制比比皆是,而我们在计算机上每一次点击鼠标或输入数据,就是这些抽象的方法和机制在悄然帮助我们调度计算机资源,以完成我们的具体任务。 毫无疑问,计算机及其科学是一个世纪以来人类最重要的发明,它改变了世界,同时也改变了人类的思维方式。然而,我们在为科学家们的聪明才智叹为观止的时候,千万不要忘记,也许从科学家思考发明计算机的那一天起,人类的思维就已经走入难以回头的死胡同。无论是普林斯顿结构还是哈佛结构的计算机,其基本机制都是建立在二进制逻辑之上的。这种机制是脱离了具体对象和内容的
13、一种抽象,是与内容分离的纯粹的形式逻辑;而人类思维是历史的和辩证的,是主观与客观的统一,是形式与内容的统一,是形式逻辑与辩证逻辑的统一,这是发展至今的计算机科学所难以企及的。 在亚里士多德去世2100多年以后,德国哲学家黑格尔(17701831)对他创立的逻辑学进行了猛烈的批评,并对其进行了辩证法的改造。从科学技术角度讲,世界正缺少黑格尔式的能够大胆对计算机的逻辑和机制进行辩证法改造的科学家。如果我们能够自觉地在学习中将哲学思想与科学技术融为一体,在掌握科技知识的同时,时刻不忘理解其中的哲学智慧,这对培养我们自己的创新精神和能力将大有裨益。只要我们坚持这样学习,我们就有理由相信,对于计算机科技的革命性进步,世界或许不需要再等待另一个2100多年了。参考文献:1肖萐父,李锦全.中国哲学史M.人民出版社,1984.2冒从虎.欧洲哲学通史M.南开大学出版社,1986.3施彼德.脉冲与数字电路M.中国人民解放军电子工程学院,1994.4李春葆.C程序设计教程M.清华大学出版社,2004.5高守传.Visual C+开发指南M. 人民邮电出版社,2007.