小C的第一宇宙
wangc
Oct 14, 2017
阅读本文需要 18 分钟(按字数)

就喜欢看一些概览性的东西。计算机科学技术发展到现在分支领域已经很多了,以前就去看过一些书籍什么《计算机科学概论》呀,《计算机科学技术百科全书》呀等…最近在Youtube上关注到一个Domain of Science的频道,今年九月份刚出了一个Map of Computer Science的视频,看过之后真是感觉太棒了,一张图带你了解计算机科学理论,工程技术和计算机应用的全部(主要)内容。

笔记摘录自Map of Computer Science(需要翻墙)

看不了的可以看下面我翻译的文章。😇

image (要高清图的点这个连接)

前言

计算机是人类大脑的延伸,一开始科学家制造计算机是为了解决算术问题,但很快计算机的功能就被广泛拓展了,比如互联网技术、人工智能和用计算机用来模拟整个世界。

但是,不可思议的是,这一些都是建立在0和1的表示处理和变换之上的。 计算机正以无法置信的速度变小变快。现在手机的计算能力已经超过了60年代超级计算机计算能力的总和当年阿波罗11号的整个登月系统如今甚至只需要在两个任天堂就能完成。计算机科学如今已经扩展出了很多相互关联的分支,下面把计算机学科分为三大领域。

计算机科学理论

理论的研究是所有学科的奠基性内容,他关注的是一个学科最本质的问题。因为理论的研究是高度抽象的,所以往往能成为整个学科贯通性的内容。计算机学科无论怎么样变化,每天又多了那些新技术,表面上纷繁复杂,实际都超不出这些基础理论的范围。

图灵机

图灵机模型被认为是计算机的基本理论模型,往后的所有计算机基于图灵机的思想。如下图一个写着数字0和1的纸条穿过一个盒子便是图灵机。

另外值得一提的是lambda演算。如果图灵机的思想代表了算法和机器的原型,那么lambda演算则是现在所有的编程逻辑和语言的基础。

image

计算机硬件

有图灵机的思想发展至今,现在的计算机当然由更多部分组成,例如硬盘,键盘,音响,显卡,屏幕等等,对应硬件的研究也称为计算机学科重要的一部分。(感觉硬件归到工程技术比较好,不过以图为准吧)

image

可计算性理论

计算机如此强大,但是计算机是万能的吗?可计算性理论就是研究这个的。但遗憾的是很久以前就证明了计算机并万能的,有些问题是计算机注定无法解决的。

如下图,这个只能向前走的机器人,在这个悖论的楼梯上将永远走不到尽头,其实这就是著名的停机问题。

image

计算复杂性

虽然计算机不是万能的,好在计算机能够做的事情已经非常多了。但有时候解决一个问题如果花费一年的时间,甚至是一亿年的时间,那么我们也是不能接受的。

如果说可计算性理论只研究问题能不能解决,那么计算机复杂性理论就在研究问题能不能在我们能够接受的时间(或其他资源)范围内解决。

下图表示的是问题按复杂度的分类。 image

算法

算法研究的是我们如何去解决问题、如何去更好更快的解决可计算问题。算法是独立于所有的编程语言以及计算机硬件的,并且我们可以通过上面的计算复杂度理论来衡量一个算法的优劣。

如下图是一个经典的算法问题,数字的排序。图中示例了两种不同的算法来解决这个问题,两个算法的复杂度是不一样的。

image

信息论

我们称现在为信息时代,但信息是什么呢?信息论始祖香农对此有一个很有意思的定义,他称信息是“用来消除不确定性的东西”。从这个定义出发,开始对信息这个概念进行量化的表示,进而研究信息的接收、存储与传播等等,这也是网络技术的理论基础。

下图介绍了图片(信息)的压缩,还有编码理论。

image

密码学

我们用计算机和信息技术,构建了虚拟的信息世界,但是如同现实世界一样,我们虽然生活在一起,但是我们很多东西是不希望被别人看到的,于是就有了门和锁。在信息世界中,这个门和锁就是密码,研究怎么样加密和破解密码就有了密码学,这也让数论在现实应用中终于有了用武之地。

image

逻辑学

逻辑学是现代科学的基础,也是计算机技术的基础,为什么计算机永远不会出错的?(出错的是程序员或硬件)那就是因为计算机是严格根据逻辑规则建立的。

逻辑学是一门单独的科学,但也被作为计算机数学基础的一部分。(离散数学)。下图是几种基本的逻辑运算关系。详细…

image

图论

图论就是研究“图”及其规律的。什么是“图”呢?下面的那个图可不是“图”,图里的那些点和线连成的图案才是“图”。好吧,不绕了😁,总之,在图论中,图是由结点集和边集组成的集合。美妙的是,现实世界中有很多的事物都可以被这最简单的结构所表述,而事物或问题一但抽象为一个“图”,那么我们就可以尝试用图论的方法来解决了,比如下面的数据结构可以抽象为“图”来表示。(图论同样是组合数学的一个分支,因为在计算机领域应用广泛,所以作为计算机数学基础。)

image

数据结构

计算机就是用来计算的机器,但是计算就需要输入数据,但是数据在机器里如何存储呢?不就是一个个存进去吗,不,没那么简单。数据可以存储为很多种结构,如下图的几个图形,分别代表了线性结构,树结构和图结构.

数据存储的结构直接关系到了数据的存储(排序)和使用(搜索)效率。而搜索和排序问题是算法领域最基本的两类问题,所以数据结构和算法的研究是密不可分的。数据结构也是编写程序的一个重要基础。

image

并行计算

并行计算现在已经成为了一项基本的计算机技术,所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。并行计算有效的提供了计算机的运算速度。

image

计算几何学

不了解,这是福雷斯特下的定义:“对几何外形信息的计算机表示、分析和综合”。

image

形式方法

不了解,这是度娘上的“在计算机科学和软件工程领域,形式化方法是基于数学的特种技术,适合于软件和硬件系统的描述、开发和验证。”

image

自动化理论

不了解.互动百科:“自动机理论是一种将离散数学系统的构造,作用和关系作为研究对象的数学理论。”

image

量子计算

基于量子理论,量子计算机可以极高的提高计算机运算速度,但现在还没能广泛应用。

image

计算机工程技术

有了这些基础理论的支持,接下来就是考虑在现实世界中怎么样设计和使用计算机了。无论是硬件方面,还是软件方面,设计者必须保证计算机能够以尽量优化的方式解决尽量多的问题。对不同实际问题的考虑和解决,产生了众多的计算机工程分支。

计算机体系结构

在现实世界中,想要完成图灵机的构想,我们就要考虑到各种物理材料和技术来实现它,比如如何让计算机计算?通过CPU。如何处理显示各种图案?通过GPU。(FPGA不了解,可能用于完成某些特殊的任务吧)如何设计这些硬件的结构,让计算机在处理这些不同的任务时有更好的表现,这是计算机体系结构研究的问题。 image

任务的调度

更详细的,计算机发展至今任务处理机制已经非常复杂了,虽然这些对我们用户来言都是透明的。但实际上,当你简单的点击打开一个应用程序,后台会有很多的进程和任务来实现你的命令的。现在又有了多核技术,多个CPU怎么样协同来工作,更好更快的执行多个任务。这就涉及到任务的调度。(这一块应该归到操作系统吧?)

image

软件与编程语言

我们上面说过,计算机最底层是用0和1表示的(机器语言)。但是人理解起来太麻烦了,为了效率,人们发明了一种更容易理解的方式来与计算机交流,那就是计算机语言。

编程语言是一种主要的计算机语言,它用来编写软件。编程语言发展至今,种类繁多,不同的语言有着不同的应用场合,不同的优势,但他们都朝着一个方向发展着,那就是越来越容易让人理解。也许在不久的将来,我们每个人都可以编写自己的程序和软件。

软件发展至今也是种类繁多,比如电脑软件,手机软件(APP),网络软件,包括操作系统也是一种软件…如下图,软件的发展和编程语言是相辅相成的,不同的编程语言会适合与开发不同种类的软件。 image

编译原理

编译原理紧紧的联系着编程语言。编译原理研究的是怎么样发明(设计)编程语言,并且能让计算机“听懂”你发明的编程语言,编译原理为此提供了一些范式。我们知道,计算机底是由二进制表示的,事实上计算机也只能听懂0和1,但计算机之所以能理解编程语言是因为编程语言被翻译(编译)过了,翻译编程语言呈献给计算机0和1代码的就是编译器。

image

操作系统

到现在为止,什么计算机理论,编程语言离我们都是比较遥远的。大部分人都不懂计算机理论,不会编程,但为什么我们还能够愉快的用电脑,玩手机呢?因为有操作系统。

操作系统是连接我们(普通用户)和计算机之间的一个桥梁。操作系统像是一个贴心的管家,我们在界面上点来点去,就可以操纵电脑,而不用管什么程序代码,什么机器硬件,一些操作系统默默为你做好了。

下图为几种常见的操作系统。 image

软件工程

软件工程就是教人们怎么开发软件的,并且现在软件发展至今已经相当复杂,往往是很多人一起完成一个软件,软件工程也为多人怎么样合作指定了一系列规范。

设计软件是一项技术,也是一样艺术,他不仅需要严谨的逻辑思维,还需要丰富的想象力。可以说,只要你能想到的,都可以在信息世界里通过编写软件(程序)加以实现,但是最后能不能实现,实现的好不好,那就要看你或你团队的能力了。image

数据库

这是关于大量数据如何管理存放的的。数据可以说是计算机的食粮,没有数据的输入,计算机便无从计算。前面说过数据结构是研究数据如何存储的,那么这里就是研究大量的数据如何存储和管理的。为此人们发明了数据库,以及专门用于管理数据库的计算机语言SQL。

image

计算机网络

计算机网络都很熟悉了,我们把今天称为互联网时代,而互联网就是一种使用广泛的计算机网络。当今的计算机网络连接了几乎所有的计算机,也就连接起来了世界上的几乎每一个人。但在网络上我们相互交流,我们的机器相互交流,都是要遵循秩序的。如何建立计算机网络,以及如何让网络中的一切井井有序,这是计算机网络学科研究的内容。

image

计算机图形学

计算机图形学的主要研究内容就是研究如何在计算机中表示图形。

image

计算机性能研究

image

计算机应用

当我们有了基础理论的支撑,又用工程技术在现实世界中构造了计算机系统,接下来就是关于计算机在现实世界的应用了。

计算机应用是为了解决现实世界中存在的实际问题而产生的,对于的不同问题,计算机科学技术都提供了有效的解决方案。

最优化理论

最优化理论就是用于解决优化问题。当你想要在你的旅游规划中设计一条最省钱的方案时,你就是面临这一个优化问题(规划问题)。优化问题存在于生活中的方方面面,尤其是商业上,一个更好的优化方案往往能剩下百万美元。结合数学和计算机算法,我们就可以去寻找那些更好的路径和方案。

image

可满足性问题

可满足性问题(SAT problems)曾被证明为非常难的(NP完全)的,一度被认为不可解决,但是令人惊讶的是,当今已经可以顺利的解决它了,特别是在人工智能领域。(这个不了解,感兴趣的可以详细查)

image

人工智能

人工智能,这个概念因为16年的“人狗大战”(AlphaGO)又火起来了。计算机扩展了我们的大脑和认知能力,但计算机科学家还希望机器能够自己“思考”,于是就开展了人工智能的研究。传统的计算机是“死”的因为他们只能遵循实现规定命令,但如何让计算机“活”起来,“自主”的解决问题完成任务呢?人工智能要解决的就是如何让计算机能“感觉”和会“思考”的问题。

如今人工智能以渐渐发展成一门可以并列于计算机学科的一门科学体系,称为智能科学。

image

机器学习

机器学习是一种实现人工智能的方法。通过让机器通过自己“学习”来解决问题。我们人通过经验和知识来进行学习,掌握科学规律来解决问题。而机器学习一般是通过输入海量的数据,让机器自己挖掘其中的规律,来进行学习,从而通过学习到的规律来解决问题。

下图是计算机正在通过机器学习(神经网络)的方法来认出一张照片里的猫。

image

计算机视觉

计算机视觉也是一种实现人工智能的方法。如果说机器学习是如果让计算机拥有大脑的话,计算机视觉就是让计算机有一双眼睛能够看见并理解事物。

下图是计算机寻找照片里的人。 image

图像处理

计算机视觉主要用到了图像处理技术,二者的不同在于,计算机视觉是你自拍时人脸识别的过程,而图像处理是检测到你的脸之后给你加一个美颜。

image

自然语言理解

自然语言理解就是让计算机理解人类的语言了。计算机可以理解计算机语言,但是很难完全理解人类语言,其中一个重要原因是自然语言的模糊性,除了各种歧义句和词汇不明确的定义和众多的外延,有时候我们可能自己都不清楚自己的准确意思,计算机又怎么理解呢?当然,人类的语言还是有模式规律的,人们研究这些规律有了关于知识表达的理论体系。

image

大数据

进入2012年,大数据(big data)一词越来越多地被提及,以往的几万的数据已经远远称不上大数据了,大数据的起始计量单位至少是P(1000000个G)。这些数据中蕴含的价值堪比石油和黄金,数据已经成为现在最重要的资源。

而量变往往导致质变,大数据不仅仅带给了人类价值,还深刻的影响着人类的思维观念。总的来说,大数据带给我们的三个颠覆性观念转变:“是全部数据,而不是随机采样;是大体方向,而不是精确制导;是相关关系,而不是因果关系。” image

物联网

计算机网络把我们通过计算机连接在了一起,但人们想的更多,我们还希望世界上的每一个我们关心的物体都可以实现互通互联,这就有了物联网。

现在物联网已经应用广泛,特别是在中国。当你网购了商品,查看商品配送到了哪里时(物流),用的就是物联网技术。 image

黑客技术

黑客技术(Hacking)并不是一门正统的技术,但是它值得一提。黑客技术试图在不被发现的情况下,寻找计算机系统的漏洞,获取利益。

(黑客这个词从西方的Hacker翻译过来,发展至今,被大多数人认为是恶意搞破坏的人,但也存在争议。可以理解为泛指那些精通计算机技术的电脑高手。)

image

计算科学

计算科学不同于计算机科学。计算机科学是用计算机技术解决科学问题的一门科学,计算机技术跟传统学科的结合,比如计算物理学,计算化学等。

image

计算机模拟

计算科学中一种常用的方法是计算机模拟技术,有了计算机人类无需局限在真实世界中做科学试验。想测试核弹的威力,不用再去找个人少的地方炸一下试试,只需要在计算机上进行模拟,就可以得到人们需要的数据。 image

超级计算机

一台超级计算机的运算速度可能相当于200万台普通的个人电脑。超级计算机用于科学领域的研究和计算。 image

人机交互技术

人机交互的研究目的是让用户更愉快的操作计算机,比如现在我们不但可以通过键盘鼠标,还可以用触屏的方式,手势操控的方式等。 image

虚拟现实技术

16年的时候VR概念火爆,被一些业内人士称为虚拟现实元年,虚拟现实技术也被认为是继手机之后的下一代人类交互的平台(通用计算平台)。但如今一年后看来,VR技术还需要酝酿一段时间,期待它的新的突破和进展。

如图其实就是计算机图形学的插图上加了一个带者VR设备的人,这也说明了两者的关系。

image

增强现实技术

增强现实技术(AR)不同与VR,VR是让你完全沉浸在虚拟世界中,而AR技术是在现实世界中增加一些虚拟的“特效”。现在这个也很火,可以搜到应用AR的游戏和手机APP。

image

遥现技术

遥现技术(telepresence)这个翻译不知道对不对,如图大概就是你远程操作一个机器人,机器人看到的声音和画面同步到你的那里。

image

机器人学

机器人的研究也将机器在形态和运动方式上和人更加相似。

image