计算机科学不等于数学

转载 2015年11月18日 21:55:39

一些程序员认为“计算机科学就是数学”。诚然,计算机科学是数学的一个分支学科,而如今我们认为,这种作为计算机科学基础的分支应当是“理论计算机科学“。如Alonzo Church的“λ-演算”和Alan Turing的图灵机,他们为计算机提供了理论基础。当时,二人都自认为是数学家,并明确地从事数学工作。那么如果计算机科学的基础是数学,整个计算机科学怎么不是数学?

简单说来,计算机科学的发展要远胜于他的纯理论根基的发展。人们发明了真实的计算机,它不再只是理论上的机器,这样一来,人们必须面对复杂麻烦的设计、实现、编程以及应用,在这些领域的研究同样属于计算机科学。我对计算机科学的工作定义是:一切皆是在抽象或实现层面的计算。

我认为数学、计算机科学及其理论基础之间的关系见下图:

露营伙伴

与物理学相似,我们也有两个阵营:理论和实验。然而这两大阵营的关系并不像在物理学中的那样。在物理学中,实验师的工作通常是验证理论家提出的理论。如果实验师走在了理论家前面,即实验师发现了现有理论无法解释的结果,理论家就必须提出新的理论来解释新的实验结果。

计算机科学中并不存在“我解释你的结果”和“我检验你的理论”的这种关系。所谓的实验师在这里被称为系统研究员,当一个理论计算机科学家证明了矩阵乘法的时间复杂度是O(n^2.3727),一个系统研究员就永远不会得出相悖于这个理论的结果,这位理论家发现了一个数学真相——没错,我直白地使用“数学”一词。

系统研究员所要做的,就是证明这一理论结果虽然看起来很有趣,但真实的系统无法因此受益。我们(我把自己归为这一阵营)设计和实现新的系统,并从中了解什么是可行的、什么是有用的。

计算机科学理论家和系统研究员并不独立地工作。我擅长数学和理论,以至于我了解自己什么时候在这两方面做得不够好。在曾经参与的一个项目中,为了解决一个有趣的系统问题,我需要一个复杂的模型,这超出了我的能力范围。这时跟我一同工作的理论人员就得向我了解信息,例如我们经过可靠测量可以从系统中得到哪些信息;为了建立模型,还得了解我们的系统能够提供哪些可靠的信息。虽然各自有着非常不同的任务,但我们都在从事“计算机科学”。

学科点名

身处系统阵营,我对于整个系统(至少)有一种直觉,从了解编译器将为某一语言的语义生成何种代码,到操作系统在某一负载下如何工作,以及处理器本身如何执行。我的研究经常得到杂乱的实证结果。宽泛地说,我对提升软件性能感兴趣,那意味着大量的实验、大量的结果和解释。这些过程就不是数学。

也有人并不只是理论家或系统研究员。我给理论和系统之间划了一道很宽的界线,这样的划分并没有覆盖整个领域,很多人同时从事理论和系统的工作,也可能有人觉得这两类都没有覆盖自己的工作范围。当然,这正是我要说的:计算机科学是一个庞大的学科,远不只是数学。

有大量的计算机科学家,他们跨越了这条鸿沟,我认为这在编程语言中特别普遍。在编程语言的研究中所得出的结论或许是理论的,而同样的研究人员,他们能够证明出某些东西,比如一个类型系统,这些人通常即设计语言,又实现了体现理论成果的编译器。总之,理论和系统研究之间的界线并不像在物理学中那样清晰。

第二个例子:网络。TCP拥塞避免算法所负责的部分毫无疑问属于算机科学。也有大量数学推理致力于设计和理解这些算法,然而一切如何实际运转才是真正重要的。这些算法正是设计、实验以及结果解释不断反复再反复的结果。

若有人简单的认为“计算机科学就是数学”,他们就伤害了这个学科中真心不属于数学的那些领域。我们确实是一直在使用数学推理,但所有的科学和工程都这么做。数学是所有实证学科的共同语言,但他们并不都讲同样的故事。

除了编程语言和网络,计算机科学还包括操作系统、数据库、人工智能、文件系统和存储系统、处理器设计、图形学、调度学、分布式并行系统等,我无法一一列举,幸而有人这样做了。所有这些领域都不同程度地“使用”数学,甚至有些还产生了理论性非常强的子领域。尽管我同意这其中的一些领域的理论基础可以说是数学。比如,关系代数是数学,同时也是关系型数据库的理论基础。但如果断章取义地说“数据库就是数学”,那就忽略了所有系统层面上的设计和实现,而这些才是使真正的数据库存于世的原因。

科学!

要探讨计算机科学的特点,就不能忽略显而易见的事实。它是科学吗?我不会去讨论这个,并非没有这个兴趣,实在是因为有人已经比我做的好了。Cristina Videira Lopes 在她的一篇出色的论文中涉及了这个主题,我从文章中也了解到Stefan Hanenberg的一篇论文中有类似的主题。在这个问题上我想说的一切都是源自他们的观点。

良好初衷

那些声称“计算机科学就是数学”的人通常初衷都是好的,但他们一般认为计算机科学仅仅是编程,这当然不对。任何曾经指导过新手程序员的人都知道,向新手解释那些偶然的复杂性下面所蕴藏的根本性的东西是多么困难。

把整个计算机科学的所有学科都称为“数学”过于简单粗暴。与数学相关、根基是数学,这是不错——但是,稍等,把计算机的理论基础同设计以及实现本身分为一类,仍然言之有义。这就是计算机科学。

具体数学 计算机科学基础(第2版).pdf 免费下载

下载地址: 具体数学 计算机科学基础(第2版).pdf
  • jiongyi1
  • jiongyi1
  • 2018年01月21日 11:47
  • 153

计算机科学和数学的关系

计算机科学和数学的关系有点奇怪。二三十年以前,计算机科学基本上还是数学的一个分支。而现在,计算机科学拥有广泛的研究领域和众多的研究人员,在很多方面反过来推动数学发展,从某种意义上可以说是孩子长得比妈妈...
  • lao_mage
  • lao_mage
  • 2006年06月09日 12:30
  • 2350

数学在计算机科学中的重要性

数学在计算机科学中的重要性数学是一门工具性很强的科学,它与别的科学比较起来还具有较高的抽象性等特征。起初是计算机科学工作者离不开数学,而数学工作者认为计算机对他们可有可无,但是现在是互相都离不开对方了...
  • FnqTyr45
  • FnqTyr45
  • 2017年09月21日 00:00
  • 512

计算机科学与技术学科整体概况之学科总体介绍

计算机科学与技术是研究信息过程、用以表达此过程的信息结构和规则及其在信息处理系统中实现的学科。计算机科学与技术研究的主要对象是现代计算机及其相关的现象。该学科的工作集中于计算机系统的结构和操作、计算机...
  • Penlee
  • Penlee
  • 2010年09月09日 20:47
  • 631

计算机科学与数学

计算机科学与数学 (2011-10-09 08:49:32) 标签: 校园 分类: 工作篇 计算机科学       计算机科学com...
  • junecau
  • junecau
  • 2011年11月12日 17:13
  • 5729

计算机科学中引用最多的数学书

负喧提到计算机科学经典论文,网上还有一个类似的统计,就是CIteseer的一项功能“Most Cited Articles”。刚才随便看了一下,突然发现费勒的《概率论及其应用》居然高居15,是排名最高...
  • turingbook
  • turingbook
  • 2007年02月28日 01:26
  • 15452

计算机科学,数学,语言

有一次找到了数学的感觉高中的时候就很喜欢数学老师也就自然很喜欢数学结果上大学以后……以前很多“高人”都说学程序都不用学什么数学看C++ 看windows 看 linux就可以了明白C++就仿佛明白了所...
  • OpenHero
  • OpenHero
  • 2007年08月15日 23:41
  • 1773

计算机需要的数学基础课

其实大学时间很紧张的,对于我这种从乡下进城的小伙子。我曾经幻想在大学谈一场恋爱,但那是不可能的。哈哈,怎么可能会有女生愿意陪你练编程,学计算机,做数学题啊。别傻吊了,好好学习吧,大学狗。 说来也奇怪,...
  • LoveJiaYu
  • LoveJiaYu
  • 2016年12月30日 20:21
  • 502

关于数学与计算机科学

关于数学与计算机科学个人以为数学是计算机科学的基础。说不要数学的计算机科学之言论,都是无稽之谈。数学好,不等于计算机科学学得好,做得好,但是数学不好,对计算机科学就会学得不好,特别是以后的研究工作和生...
  • GlietBoy
  • GlietBoy
  • 2007年08月28日 22:02
  • 571

MIT《计算机科学数学》Chaper05-Induction

一般归纳法:     假设谓词P对于自变量n∈N,P(n)为true的条件为:    1. P(0) 为真,并且    2. P(n) implys P(n+1)对于任意的n均成立,则    谓词...
  • BOBOyspa
  • BOBOyspa
  • 2017年08月03日 16:49
  • 155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机科学不等于数学
举报原因:
原因补充:

(最多只允许输入30个字)