返回到【全文目录】
目录
5.3 浅探计算学科的本质
能行性问题是计算学科的根本问题是
学科的形态
当计算当作一门学科得到认可之后,整个学科的发展有了明确的方向。作为一名专业人员的成长,需要区别于非专业人员的是,要能把握住专业的核心。在计算学科的发展过程中,由于专业与行业外在的表现太丰富了。为了回答这个问题,需要认识计算学科到底应该是什么样的?这个问题的探讨源于一系列的质问,包括:
要回答这样的问题,从学术研究的角度,需要首先对学科有一个明确的定义,甚至要论证其是否能够称为一个学科。
研究过程和方法不在此处铺开来讲,最终的结果是,历经四年,ACM和IEEE/CS共同推出《计算作为一门学科》的报告,给出了学科的定义。在这个讨论过程中,出现过多种说法,最终写入报告的简短定义是:“计算学科是对描述和变换信息的算法过程的系统研究,包括它的理论、分析、设计、有效性、实现和应用。”这个定义抽去了用于计算的装置的具体形态(电子计算机还是其他的生物计算机、量子计算机等),而是把握住了要去面对的最实质性的对象——信息,并且抓住了进行信息处理的关键——算法,也指明了从事这个学科的人员可以实施的工作方向——由理论到应用。
在对学科进行定义的同时,报告中确定了计算学科所研究的根本问题是能行性问题,也就是什么能被(计算机有效地)自动进行。“能行性”表述依然很抽象,但放眼看来,确实是抓住了学科最关键的部分,涉及到硬件和软件在内的理论、方法、技术的研究,以及应用研究和开发。
关于能行性,在很早以前,我国古代学者就认为,对于一个数学问题,只有当确定了其可以用算盘解算它的规则时,该问题才是可解的。这已经体现了算法化思想,是我国古代学者对“能行性”问题的朴素的理解。近代形式化方法和理论研究的发展,最终促使人们在计算本质的认识上取得了突破性进展。
现代计算机的原型是20世纪30年代后期英国数学家图灵提出的图灵机。图灵机通过形式化的方式阐述了计算的本质,转用自然语言的描述为:任何计算,在本质上都可以还原为计算者(人或者机器)对一条两端可以无限延长的纸带上的一串0、1进行变换、最终得到一个满足预先规定的符号串的变换过程。进而发现,存在一些问题是不能用任何机械过程解决的。即存在一些问题,是图灵机无解的。图灵对计算本质的描述,揭示了计算的能行性的本质,提出了可计算性的概念。
在计算机的构造方面,由于连续对象很难进行自动化处理,从“能行性”的角度,决定了计算机本身的结构,以及它处理的对象都是离散的。连续对象必须经过离散化后,才能被计算机处理。
计算过程可以从能行性的角度进行描述。一个问题在判定为可计算问题后,为求解这个问题,必须给出实际解决该问题的操作序列(软件角度的指令序列和硬件角度的执行指令的序列),同时还必须确保操作序列的资源(时间和空间)消耗是合理的。计算学科中大量的研究内容与分支学科方向与之相关。例如,集成电路技术、数字系统逻辑设计、数值计算方法、算法设计技术、计算复杂性理论、密码学、人工智能等,都是围绕这一基本问题展开的,其核心是计算的效率。
计算正确性是需要关注的基本问题,其中体现着能行性问题:一个问题在给出了能行的操作序列,必须确保计算的正确性。正确性不能保证,计算没有意义。围绕正确性的分支学科与研究方向包括:算法理论、程序设计方法、形式语义学、计算语言学、容错理论与技术、电路测试技术、程序测试技术、软件工程、网络协议等。
硬件和软件的工程中体现着能行性。为了实现自动计算,需要发明和制造自动计算机器,要在理论上提供观察和描述计算的平台,而且要实际制造出能够真正运行的自动计算机器。更进一步地,计算的平台在使用上还必须方便,于是有了计算模型、计算机体系结构、实际的计算机系统、系统软件和工具软件、高级程序设计语言、软件开发工具与环境等学科分支。
在计算机的应用中体现着能行性。任何项目在投资活动之前要提交可行性研究报告,需要对市场、收益、技术、法规等项目影响因素进行具体调查、研究、分析,确定有利和不利的因素,分析项目的可行性,评估项目经济效益和社会效益,及时停止不适合开展的项目,避免损失的发生。
对大学生而言,心中放着能行性这样一个核心的问题,将有助于在学习专业的过程中形成的对学科的完整认识,有助于融会贯通所学知识。能行性在学科中的普适,也使我们能够追求在基础层面的全面发展,避免了对学科、行业的片面理解。
所谓学科形态,大体上是指这门学科在历史发展过程中,形成的学科思维结构和知识结构的外在样式。系统地学习某一门学科的专业知识,把握住学科的基本形态是很重要的一件事。例如,汽车专业的大学生,认识到的知识形态是驾驶汽车、维修汽车,还是设计汽车,这对于他从事和汽车相关的工作,将有非常大的影响,进而影响到了专业学习目标的确定。回到计算机学科,其学科形态更难以把握,尤其是当今软件产品已经成为了计算机系统的主要成分,软件的不可见性是一个明显的障碍。
计算机学科的三种形态是:抽象、理论和设计。
第一种形态是抽象(abstraction),也称模型化,是指在思维中对同类事物去除表象的、次要的方面,抽取共同的、主要的方面,从而做到从个别中把握一般、从现象中把握本质的认知过程和思维方法。典型的抽象方法的步骤为:(1)确定问题并形成假设;(2)构造模型并做出预言;(3)设计实验并收集数据;(4)分析结果。这种源于实验科学的方法,广泛地用在算法、数据结构和系统结构等模型的构造过程中。通过对所建立的模型的假设、利用各种设计策略,在一定理论框架指导下进行实验,分析计算的局限性、有效性、新计算模型的特性,以及验证对未加以证明的理论的预测。
第二种形态是理论(theory),是指为理解一个领域中对象之间的关系而构建的基本概念和符号。计算学科的理论用来建立和理解计算学科所依据的数学原理,表现为定义、定理和性质及其证明。理论源于数学,对于计算学科来讲,指的是以离散数学为代表的构造性数学。在理论方面的研究,一方面建立完整的理论体系,另一方面,在现有理论的指导下,建立解决具体问题的数学模型,从而实现对客观世界的理性认识。
第三种形态是设计(design),是指为解决某一个应用领域中的问题而构造系统或装置的过程,这里的系统可以是硬件系统,也可以是软件系统。设计源于工程学,具有较强的实践性、社会性和综合性,在实现中要受社会因素、客观条件(包括其他相关学科)的影响。设计的基本过程包括:需求说明、规格说明、设计和实现方法、测试和分析。
这三种学科形态值得在学习过程中随机研习,多加体会。在此,我想用一个经典问题,和读者一起对此初步浅浅浅地品味一番。
18世纪时,欧洲有一个风景秀丽的小城哥尼斯堡(今俄罗斯加里宁格勒),那里的普莱格尔河上有七座桥,将河中的两个岛和河岸连结起来,城中的居民经常沿河过桥散步。那么,一个人怎样才能一次走遍七座桥,而每座桥只走过一次,最后回到出发点?
这就是著名的“哥尼斯堡七桥问题”,如图5–3所示。大家都试图找出问题的答案,但是谁也找不出这样一条路径,并且,谁也不敢断定这样的路线是不存在的。
著名数学家欧拉知道这个问题后,他没有像其他人一样跑到哥尼斯堡去走走。他这样看这个难题:
把南北两岸和两个小岛抽象为四个点A、B、C、D,而把这些桥抽象为连接两个点的一条线,这样,“七桥问题”就表示成了如图5–4所示的由点和线条组成的简单图,解决“哥尼斯堡七桥问题”就等价于图中所画图形的一笔画问题,即从某一点出发,经过每条边一次仅一次,最后回到原点。
这个图如果能够一笔画成的话,对应的“哥尼斯堡七桥问题”也就解决了。
欧拉用的办法就是抽象方法!他把问题中的桥、岸、岛等具体事物的具体形态去掉了,而只留下了反映事物本质的要素,从而使人们的思维能够集中在要解决问题的核心,不被与问题无关的表象的现象所迷惑。而如今,人们在处理诸如此类的结构,也将其抽象为图的问题,然后再进行处理。例如由城市、乡村为点,城市之间的道路、水路、航线、公交车为边形成的交通图;网络工程中由计算机、各种网络设备为点,它们之间的连接为边的网络连接图;在当前流行的社交网络中,由用户为点,用户之间的好友关系为边的社交网络图。这种简单的用点和边构成的图模型,将外在形态各异的问题,变成了同一类的问题。
欧拉将问题抽象之后,并未像别人一样,在纸上对各种可能的一笔画方案画来画去,以求找到一种可能,而是通过对点和边在数量上的关系进行了研究。欧拉发现:
如果存在经过每条边一次且仅一次回到出发点的路径,则充分必要条件是:(1)图是连通的;(2)在图中与每个顶点相连的边数必须是偶数。
这个结论能够通过数学方法严格证明,是图论中的一个重要定理。据此,由于与A点相连的边是5条,与其他点相连的边是3条,都不是偶数,这样的路径是不存在的。
这就是理论的力量!以后,人们再也不必为这个事情争来争去了。在经过抽象得出模型之后,通过对其中包含的因素进行定义,研究其性质,推导并证明其中存在的定理,这些结论性的成果成了解决实际问题的依据。由于理论是在数学的层面上形成的,其严谨性保证了结论的可靠性。欧拉据此发表了论文《与位置几何有关的一个问题的解》,为一个新的学科——图论(Graph Theory)的诞生奠定了基础。今天,图论已经广泛地应用在计算机科学、运筹学、控制论、信息论等学科中,成为对现实世界进行抽象的一个强有力的数学工具。这个被计算学科视为经典的理论分支也在指导着数不清的工程项目,这是支撑可靠的设计的基础。
最后讲讲设计。不少人一说抽象和理论就头疼,但设计还好,这是直接生产产品的环节。设计的过程是给定问题,结合技术要求和条件,设想和考察各种可能的解决方案,直到得到一个可靠的、成本符合要求的设计成果。科技发展到现在的程度,软、硬件产品的设计是个复杂的问题,需要抽象和理论的支持。例如,要设计的产品是汽车卫星导航系统,需要实现两个城市之间路径的规划。为此,定义好需求后,首先需要将其抽象为图模型,路径规划对应的就是图论中的最短路径问题,涉及这个问题的基础性问题已经形成理论体系,可靠性得以保证,同时也有多个现成的算法可以利用。也就是说,这个最核心的问题可以在理论指导下完成。而到实际的产品中,这个最短路径中的“短”可以是最短的距离、最少的时间,或者是最省钱,这是在设计中要考虑的问题。在实际的工程项目设计中,诸如质量保障、进度安排等等各个环节,都能在理论的指导下进行。
理论是前人经验的结晶和浓缩,在理论指导下的设计,即是建立在丰富经验基础上的实践。忽视理论,意味着一切工作都是基于直接经验,直接经验建立的周期和可靠性,都是一个不可把握的因素。有人空有理论而实践水平不高,这样的理论学习没有意义,但不是说理论没有用,只能是他没有能力用上去而已。这正是给我们在学习中提出的问题,让实践工作能在理论的指导下进行,做到能活学活用。
计算学科变得越来越庞大,生产环节的分工越来越细化,追求全才也已经不是当前的一个现实选择。计算机类专业的学生,需要对整个学科的形态有个总体的把握,也要根据自己的目标,在某些方面形成专长。这是一个非常必要的选择。例如,经常听人建议如果想读研究生,要学好理论课。为什么这样说?肤浅的回答是,考研科目就是这些课程,这是应试思维的延续。深层的原因是,研究生作为更高一个层次的教育阶段,对抽象和理论提出了更高的要求,重视理论课是必然的结果。
返回到【全文目录】【下一节】