计算机科学发展的动力

计算机科学发展的动力

姚尧

计算机对现代人来说并不陌生。我常常在坐车或者吃饭时和不是学计算机的朋友闲聊。出乎意料的是他们总会认为学计算机就是学会十分懂得如何组装电脑、如何重装操作系统,或者如何入侵他人的计算机做一些破坏活动,至少从话语表面上看如此。

不错,设计硬件体系结构、编写操作系统和网络安全攻防属于计算机科学领域研究的问题。但很少有人问:为什么现在到处都是冯诺依曼体系结构、Windows操作系统、这样充满问题的计算机网络呢?如果要回答这些问题,就必须讨论到计算机发展的深层理由:为什么也称学习计算机也是学习一门科学,计算机科学能够发展成为一门独立科学的动力是什么。

很多人知道计算机科学的出现源于应用数学的发展,最早是应用数学的一个分支。计算机科学活动本身就有数学精神涵于其中。冯诺依曼认为一门纯粹数学分支的发展最初是深受实际经验的启发和推动,一经形式化和高度抽象之后便为纯粹审美的目的所指导。虽然不十分肯定,但是我的体会是,计算机科学同样是源于人类经验和实际问题的。而计算机科学的纯粹部分,即理论计算机科学,一方面深受数理逻辑、集合论和组合数学的影响;另一方面,当计算机科学家在深入分析抽象计算方法本质的过程中发现了其独特的魅力。

我认为计算机科学发展的动力来源于三方面:考察自然和人类心智获得的经验、数学理论和社会实际的问题、以及计算机科学各个方法之间深刻的联系带来的优美体验。

人类在现代之前对自然和心智的考察积累的丰富的经验推动了早期计算机科学思想。古巴比伦人发明算盘用来做60进制的运算,可能是为了物品计数和天文历法。60进制运算、计数观测天文与制定历法的活动主要依据自然观察。Leibniz非常强调二进制运算、建立真假二元的形式逻辑之中的逻辑思想。Leibniz设想这样的代数化的逻辑能够表示、推演出所有的人类知识。另外他认为当时东西方的主流哲学意识也融合在其中:“1代表上帝,0代表虚无,上帝从虚无中创造了万物”;“凡物皆阴阳二气,相克相生”。统一的逻辑表示、推演以及机器制造正是计算机科学的最初动力。

步入现代之后,地球上的人类交流越来越频繁,哲学的、科学的、数学的经验不断的积累。大量理论或实际的应用问题产生,推动计算机科学迅速崭露头角。Hilbert非常强调数学问题对数学发展的根本作用。正是尝试解决Hilbert“判定问题”的过程中创造了现代计算机科学的内核,可计算性以及图灵机模型、递归函数。

至于解决实际的问题诞生的发明就更多而且广为人知。包括生产、生活、战争:打卡式织布机(编程织布图案)、Harvard Mark I(弹道计算)、Colossus(破译德军Enigma密码机)、ENIAC(火炮计算)、EDVAC(Manhattan工程制造核弹)等。回过头来看,随着人类交流越来越密切、越来越追求便利,大型机转向小型个人机、单机组合成网络、继电器-电子管-晶体管-编译器-集成电路-微处理器-鼠标与图形界面-RISC体系结构-个人电脑与现代操作系统-互联网-网络病毒-手机-光纤-电子商务-分布式计算-搜索引擎-运筹优化与数据分析-专家系统-终极人工智能之梦这样的趋势就不难理解了。

最后我们有了现在的花花世界,世界上充斥着无数人造物品(论文也是其一)、方法和理论。各种纷繁的方法和理论之间需要整理分类、思考其中的联系和矛盾。在这个思考的过程中,越来越抽象的概念被提出、学科门类越来越细。理论计算机科学方面,数理逻辑、计算理论和计算复杂度理论很好的结合在一起。依据图灵机作为通用的计算模型判断抽象问题可否计算,解决各种可计算问题算法的计算复杂度根据时间或空间度量的多项式函数分类。如此理论计算机科学的核心主体建筑的构架完成了。理解理论计算机科学之深刻和优雅的人都会体会到。

回顾数学发展的历程和动力,不难发觉计算机科学和数学有共同的基础。算法分析之父、数学家 Donald Knuth   (b. 1938,中文名“高德纳”) 除在巨著 The Art of Computer Programming  (《计算机程序设计艺术》) 第一卷第一章讲述数学基础之外还跟人合著 Concrete Mathematics  (《具体数学》) 作为教授计算机科学基础的教材。可见一斑。

posted on 2019-01-06 15:08  冰山上的博客  阅读(710)  评论(0编辑  收藏  举报