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

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

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

露营伙伴

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

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

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

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

学科点名

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

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

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

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

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

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

科学!

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

良好初衷

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

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

计算机科学不等于数学相关推荐

  1. 计算机科学中的数学等(视频)

    [南开大学] 算法导论课程(参考书:算法设计) @张圣林老师 [南开大学] 算法导论课程(参考书:算法设计) @张圣林老师_哔哩哔哩_bilibili 算法导论课程[2020最新版] 算法导论课程[2 ...

  2. 计算机科学区别于数学和物理学,新编大学计算机基础

    第一章 单元测试 1.问题:冯.诺依曼发明了一种计算模型,被称为"冯.诺依曼机",不同于图灵机是一种假想模型,冯.诺依曼机为现代计算机的工程化实现提供了理论基础,其核心思想是二进制 ...

  3. 【调剂】2021赣南师范大学数学与计算机科学学院招收数学专业和电子信息调剂生...

    点击文末的阅读原文或者公众号界面左下角的调剂信息或者公众号回复"调剂"是计算机/软件等专业的所有调剂信息集合,会一直更新的. 2021赣南师范大学数学与计算机科学学院招收数学专业( ...

  4. 布朗大学计算机科学博士怎样,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...

    最近正是留学申请季,也是大三/高二党开始备战明年申请季.无论对于高中生.本科生.还是硕士生来说,上哪所学校和学什么专业成为了现阶段最令人头疼的问题. 很多人瞄上了现在最大热的一个专业--计算机,因为它 ...

  5. 贵州师范学院数学与计算机科学,贵州师范学院数学与计算机科学学院

    百科分类: 培养目标 数学与计算机科学学院数学专业的培养目标是:德智体全面发展,综合文化素质较高,勇于革新创造:系统掌握有关数学与计算机科学技术的基本理论.基本知识和基本技能,有较高的实践能力:有较丰 ...

  6. 排列组合在计算机科学的应用,数学在计算机科学的应用.doc

    PAGE 1 数学在计算机科学中的应用 第 PAGE III 页 数学在计算机科学中的应用 摘 要 摘要:计算机教学资源是现代化教育的主要物质基础,我们也要积极.主动地运用多媒体教学资源,提高利用多媒 ...

  7. 数学与计算机科学虎扑,数学发展到今天还有继续研究的必要吗?

    只为灿烂的瞬间2020-06-29 13:41:48 点灭只看此人举报 自己不懂的东西就不要乱评论,容易闹笑话 自己不懂的东西就不要乱评论,容易闹笑话 亮了(1020) 回复 查看评论(3) 萨姆辛2 ...

  8. AP计算机科学A和数学,A Level数学、IB数学及AP数学,三者有哪些具体区别?

    三大主流课程A-Level.AP.IB一直都受到很多人的青睐,它们在科目设置上,都有数学,那么,三者的数学课程有哪些区别呢?下面,跟随锦秋小编来看一下A-Level.AP.IB数学的区别. A lev ...

  9. 池州学院数学计算机科学,池州学院数学与计算机科学系.ppt

    池州学院数学与计算机科学系.ppt 池州学院数学与计算机科学系 陈精兵 交通管理中的黄灯问题 --二阶常微分方程 的应用 一.问题引入 在十字路口的交通管理中,亮红灯之前,要亮一段时间的黄灯,这是为了 ...

最新文章

  1. [Elixir008]Nested Module里的动态函数调用方式
  2. jsp工程防止外部注入_防止 jsp被sql注入的五种方法
  3. C++ 标准文件的写入读出(ifstream,ofstream)
  4. java.util.zip.zipexception_Java 压缩zip异常,java.util.zip.ZipException: duplicate entry: 问题...
  5. nmon--linux压力测试工具
  6. JQuery入门 初级插件02
  7. SVN客户端日志无法显示的解决
  8. 5.被动回复用户消息
  9. PHP获取git提交信意_代码提交规范检查与修复 php_codesniffer + composer-git-hooks
  10. 2018华为软件精英大赛
  11. 【AS3代码】擦窗户效果(也就是流行的妄撮游戏)
  12. 跪了,腾讯数据工程师用Python可视化绘制的中国GDP数据地图,大佬就是不一样
  13. 2019第十届蓝桥杯国赛c++B组真题
  14. js自定义函数传参(字符串)问题
  15. Android memery data sample
  16. 为什么JBX写的代码在编译时,总是少字符呢?
  17. 服务器安全设置全攻略
  18. js 幻灯片放映图片_20个响应式图像库和幻灯片放映(2018)
  19. K8s 多节点部署流程
  20. 防火墙虚拟化技术详解(上)

热门文章

  1. promise-async-await
  2. Django 流式响应中文csv样例
  3. vSphere ESXi命令行使用方法详解
  4. Agile in a Flash:万物皆渐进(14)
  5. libtool的工作原理
  6. .NET与java的MVC模式(3):ASP.NET 页生命周期概述
  7. 步步为营 .NET 代码重构学习笔记 十一
  8. mac finder变慢解决办法
  9. 实现DUBBO服务环境隔离
  10. 读javascript高级程序设计10-DOM