计算机科学是一个年轻的学科,它的诞生可以追溯到20世纪40年代。1945年第一台电子数字计算机ENIAC的出现和存储程序模型的诞生引起人们了对自动计算广泛的学术兴趣。在过去的60年里,计算机科学给人们提供了解释现象的各种方法,其中最引起注目的是计算模型和算法。计算领域的研究者曾经试图借助各种不同的学科和研究方法,尤其是系统科学和复杂性科学的方法,来解决计算机科学中的一些疑难问题。
在电子数字计算机短短的发展历史中,学科交叉使计算机科学的发展成为可能,但这个领域的迅速扩张使人们感到定义计算机科学的困难,同时也给计算机科学家提出了挑战:第一,对于什么是计算机科学,难以把握最本质的特征。人们以往对计算机科学特征的描述要么太狭隘,只能适用于计算机科学的一些子学科,要么太宽泛而没有把其它学科排除在外。甚至连计算机科学是不是一种“科学”,都是大有争议的;第二,很难找到一套确定的规则来指导计算机科学研究,因为计算机科学家研究的领域包括:程序、逻辑、形式、人、复杂性、机器、可用性和系统,而这套规则应该涵盖软件工程、复杂理论、可用性、程序心理、信息系统管理、虚拟现实和建筑设计等领域。这就大大增加了问题的难度。
伴随着计算机科学的发展,计算机引出的哲学问题的引起了人们的深入思考。随着时代的发展,计算机科学哲学也随之兴起。本文将简要介绍计算机科学研究的三个传统引发的哲学问题、计算机科学哲学的发展以及目前计算机科学哲学研究的一些特定问题。
一、计算机科学研究传统引出的哲学问题
计算机科学所涉及的问题非常广泛,关于计算机科学的哲学问题也十分宽泛。大致说来,计算机科学研究有三个传统,即数学传统、工程学传统、经验科学传统;计算机科学的哲学问题包括这三个传统引发的哲学问题以及计算机对社会的影响的问题。
1. 数学(理性主义)传统,1936-1969年间,现代计算机科学主要研究“机械结构解释的广度和局限”。【1】早期的计算“科学家”是发展自动理论、探究可计算性、研究计算基础及其符号化的数学家。理论的计算机科学把计算机程序看作是数学客体。“计算机程序是数学表达式”。【2】“计算机程序的建立像解决微分方程一样是数学活动”。【3】早期的程序语言是用来解决数学分析和符号处理中的问题的。
2. 工程学(技术统治)传统。自从软件危机爆发后,计算机科学的研究焦点转向研究可靠、高效、可持续的软件工程。计算机工程师把软件看成是与桥梁、机动车一样的人工产品。“第三代”程序语言把注意力集中在与工程相关的领域,包括模件、可靠性和再利用。但是软件工程对技术的狭窄范围的关注招致了广泛的批评。
3.经验科学传统。软件科学是把计算机科学看成是关于“自然类”(kind of nature)的学科,虽然它认可数学模型的分析方法,但它把计算机程序看成是“自然现象”而不是是数学客体。软件科学包含观察、分析、检测和经验证实的科学方法。软件科学的成就包括程序语言和范式、形式方法和程序验证、软件进化定律、软件复杂性等。
由计算机科学引出的哲学问题大致包含以下几类:
形而上学方面:计算机的主体是什么?计算机程序是数学实体、人工产品还是“自然类”?或者说,如果计算机科学是科学,它是数学的一个分支还是工程学的一个分支?计算机科学像数学一样具有实在性/反实在性吗?Uuix汇编语言是被发现的还是被发明的?
本体论方面:什么是计算机程序?元软件、软件和硬件之间的关系是什么样的?程序承担什么样的本体论上的义务:它们承载真实世界中的客体还是程序中定义的类?计算机科学中的东西是客观的、普遍的还是不受时间影响的?本体论被程序语言改造了吗?
认识论方面:计算机科学中的知识与信念和假设有什么区别? 数学在计算机科学中的作用是什么?数学模型将代替工程事业吗?计算机科学是一个经验理论吗?计算机科学里的实验是什么样的?与经验科学里的实验有什么不同?在计算机科学中做的实验所获得的知识具有什么样的地位:它是关于真实世界的还是关于运算法则的?计算机程序是一个科学的理论吗?
方法论方面:计算机科学使用什么方法?计算机科学如何发展?计算机科学家怎么工作、他们应该怎样工作?论证、逻辑、验证、概念、示范和一致性在计算机科学中起着什么作用?计算机科学家像数学家一样证明数学公式吗?像工程师一样建造东西吗?像自然科学家那样检验假说吗?
伦理学方面:我们能够信任计算机所做的决定吗?我们应该制造智能计算机吗?软件能被专利化吗?软件有著作权吗?