计算机科学哲学(斯坦福大学哲学百科全书)


主要是关于计算机科学到底是数学还是工程还是科学的争论,摘要部分重点如下:
计算机科学的语言分为两种:程序规范设计语言如Java和广义语言如UML,它们的基本本体及其阐述要求的方式各不相同。

基于谓词逻辑和集合论
它主要用于单个程序模块或简单设备的套件规范。UML具有非常丰富的本体和各种表达机制。例如,它的类语言允许软件模式的规范。通常,架构描述语言用于精确指定软件系统的体系结构。
这些语言使用包括诸如组件,连接器,接口 和配置之类的概念的本体。特别是,用Rapide,Darwin或Wright编写的架构描述是使用基础数学语义定义的形式中的精确表达。

但这些语言的表达的逻辑功能是什么?从表面上看,它们只是用正式语言表达的。然而,当基础本体论明确时,这些语言中的每一种都表明它是一种形式本体论,可以自然地作为一种类型理论。根据这种解释,这些表达是规定性定义。因此,每个都在其系统的形式本体中定义了一个新的抽象对象。

计算机科学的认识论地位
当计算机科学成为一个不同于数学的独立学科时,在20世纪60年代和70年代之间就出现了定义计算机科学认识论地位的问题。自20世纪70年代以来,很明显计算机科学必须被部分地视为一门数学学科,部分地被视为科学学科,部分地被视为工程学科,因为它利用了数学,经验和工程方法。尽管如此,关于计算机科学是否必须主要 被视为数学学科,工程学分支或科学学科的争论仍在进行

1.计算机科学作为数学学科
计算机科学的每一种认识论特征都是基于本体论,方法论和认识论的承诺,即关于计算工件性质的假设,软件开发过程中涉及的方法,以及由此涉及的推理类型,是演绎的,归纳的,或它们的组合。

计算机科学的数学本质的持有者假设程序是数学实体,人们可以追求理论计算机科学的形式化方法所提供的纯粹演绎推理。程序的指令可以被认为是数学句子,以及如何根据公理系统给出编程语言的形式语义。如果程序规范以正式语言提出,并且程序代码用同一种形式语言表示,则形式语义提供了一种证明方法。

计算数学分析的最初动机来自数学逻辑。它的起源可以在希尔伯特关于谓词演算的可判定性的问题中找到,:是否有一个算法或一个程序用于判断逻辑的任意句子是否可证明(Entscheidungsproblem)?为了解决这个问题,需要在逻辑和数学中建立有效或机械方法的非正式概念的严格模型。这首先是一项数学努力:必须建立一种非正式概念的数学表示法。

2.计算机科学作为工程学科
在20世纪70年代,日益复杂的程序,软件系统在日常环境中的应用日益增多,以及随之而来的市场需求激增,导致计算机科学家(学者和从业者)的利益偏离了程序正确性,倾向于管理这些系统复杂性和评估其可靠性的方法。

事实证明,提供正确性的数学证明大多是不可行的。计算机科学研究发展为能够提供正确性统计评估的测试技术。

计算机科学评估计算系统的可靠性的方式与土木工程对桥梁或航空航天工程对飞机的影响相同,特别是,虽然经验科学研究“存在”的东西,但计算机科学关注的是“可以存在”的东西,即如何制作工件或脚手架之类,因此它应该被认为是“数学工程”。

3.计算机科学作为一门科学学科
软件测试和可靠性测量技术因无法确保没有代码错误,在许多情况下,特别是在评估所谓的安全关键系统(如飞机,火箭,核电站等控制器)时,使用形式方法和经验测试来评估计算的正确性和可靠性。计算机科学可以被理解为一门科学学科,因为它利用演绎和归纳概率推理来检验计算工件。验证和测试方法通常共同参与推进实施计算系统行为的假设,并提供证据(通过算法或经验)支持这些假设。

计算机科学与经验科学相提并论的论点:
计算机科学是一门经验学科。我们称之为实验科学,但是像天文学,经济学和地质学一样,它的一些独特形式的观察和经验并不符合实验方法的狭隘刻板印象。尽管如此,他们还是实验。每个新建的机器都是一个实验。实际上,构建机器对自然提出了一个问题; 我们通过观察运行中的机器并通过所有可用的分析和测量手段对其进行分析来聆听答案。(Newell&Simon 1976:114)

自从Newell和Simon的图灵奖演讲以来,很明显计算机科学可以被理解为一种经验科学而且是一种特殊的科学,这与计算实验的本质有关。

事实上,目前关于计算机科学认识论地位的大量争论涉及到定义什么样的科学问题,特别是计算机科学实验的性质。