读《计算机科学概论》
读《计算机科学概论》
我在学习程序语言原理和算法的时候,发现计算机专业开始涉及到一些专业的数学知识。有人说计算机是数学专业分支下的一个学科,也有人说计算机是独立于数学的一门学科。为了理清楚计算机和数学的界限以及依赖关系,我开始想系统的了解这两门学科的系统分支和交叉依赖的地方。
首先我开始了解数学都有哪些分支,以及分支的上下级关系。由于在学校里学到过离散数学这门从名字上看很另类的课程,我想探究一下离散数学是属于数学专业里的哪个分支,结果发现数学专业里没有这一门课程。离散数学是近几十年来,随着计算机的发展而形成的一门学科,它包括了数学一些分支里的部分知识(包括布尔代数、集合、图论、概率论、统计学等)。
另外我发现数学里的各个分支的知识在历史上出现的时间点也是仅从科学分支上看不出来的。例如集合论、极限、微积分在历史上出现的顺序是微积分、集合论、极限,而集合论和极限是微积分的基础,但是基础性的数学分支学科并没有比它的下游的分支出现的早。所以我又去了解了一下数学史,对所有的数学分支在历史上是怎么发展演变的有了一个大体的了解。
最终我总结了几点:基础数学相对来说是出现的比较晚的,并且分成了逻辑、直觉、形式三大分支。其中的逻辑是和哲学的学科有交叉的,数学里的逻辑分支就是数理逻辑。
在一般的数学专业本科里,数理逻辑不算是很主要的一门课程,因为有更多其它的重要的课程。也不是所有的数学专业都会开设,甚至开设的学校比较少。
计算机专业里也很少开设数理逻辑这门课的,因为比较理论,可能在研究生课程里会开设。
数理逻辑用集合和布尔代数研究可计算性和计算复杂度,这是数学上的算法、可计算性和计算复杂度。图灵机和lambda演算也能研究可计算性和计算复杂度,这是机器领域的算法、可计算性和计算复杂度。图灵猜想是说图灵机可以计算所有数学上可以计算的函数,也就是说在数学上,人工通过代数等可以计算的东西,用图灵机也能计算,图灵机和数学工具是有相同的计算能力的。在数学上没有算法能计算出来结果的函数,图灵机也解不出来。
程序通用语言是和图灵机很类似的东西,最简单的程序通用语言只需要有X++,X--,WHILE;END;三条语句就够了,甚至在实际机器操作上,减法用补码的加法来实现,所以最核心的通用程序语言只需要两条语句就够了:X++和WHILE;END;控制对。一个是加法,一个是循环判断,只要有了这两个特性的语言,就是图灵机等价的。图灵机能计算的,这个语言也能计算,如果图灵猜想成立,那么数学上可计算的函数,用这个语言也能计算。
所以说,世界上的程序语言千万种,本质上只是实现了加法和循环判断,语言功能再多,也只是这两个基本功能的包装而已,程序语言的真正核心的能力并没有被扩大。
改进一下这个通用基础语言,加上一些语义,使得一个子过程可以调用另外一个子过程,子过程也可以调用自身,这样就变成了一门具有递归的语言。在计算能力上循环和递归也是等价的。
通过阅读计算机科学概论,我又重新梳理了一下计算机专业涉及的分支,对于基础的课程,在学科上会有交叉的地方。对计算机的知识体系,我归纳如下:
1. 哲学 数学
2. 逻辑(符号逻辑) 基础数学(逻辑主义、直觉主义、形式主义(公理化系统))
3. 数理逻辑、集合论、布尔代数、计算理论...(另有其它数学学科:数学分析、抽象代数、高等代数、概率论、运筹学、数值计算、数值代数、计算方法、初等数论、代数数论、同调代数、计算代数、交换代数、组合数学、一般拓扑、代数拓扑、点集拓扑、微分拓扑、解析几何、微分方程、微分几何、微分流形、黎曼几何、射影几何、几何理论、实变函数、复变函数、泛函分析、调和分析、回归分析、多元统计分析、测度论、函数逼近论、群论、群表示论、李群、李代数、图论、鞅论、数系、数理统计、随机过程、代数几何、索伯列夫空间、泰希米勒空间)
4. 数据结构、算法
5. 程序语言、编译原理
6. 协议、规范、类库、框架、平台、操作系统、开发工具
7. 应用程序
8. 软件工程
9. 软件产品
10. 项目管理
读《计算机科学概论》相关推荐
- 读《Android 安全架构深究》
Android 安全架构深究 安全是一个非常立体而丰富得概念.在不同的场景下,安全有着不同的含义. 比如对于网络传输,安全指的是传输的数据不会被其他人看到.篡改.伪造及仿冒,传输的数据不会遭到破坏,数 ...
- 《最强Android书 架构大剖析》读书笔记
文章目录 第一章 Android 体系结构的变革之路 1.2 Android系统源码目录 与Linux的异同 Android的框架 原生二进制可执行文件 Android 的原生库 核心(core)库 ...
- Android Jetpack架构组件之 Room(使用、源码篇)
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...
- Android 图形架构之一 ——概述
前言 本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层.对分析app的卡顿,掉帧等 有很大帮助. 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个 ...
- Android display架构分析-SW架构分析(1-8)
参考: Android display架构分析二-SW架构分析 Android display架构分析三-Kernel Space Display架构介绍 Android display架构分析四-m ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统架构图及简单的系统架构介绍
2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...
最新文章
- Leetcode 191. 位1的个数 解题思路及C++实现
- Windows 11 新版 22593 发布:文件资源管理器全新主页,开始菜单图标优化
- C/C++ 类型内存占用详解
- 进行优化处理(WinXP),加快系统运行速度
- 各种排序算法的总结和比较(转)
- 170630、springboot编程之普通类中调用spring管理的bean对象
- 如何安装CocoaPods,以便在Xcode中快速添加第三方库
- 公共 API 的错误次数远超你想象!
- mysql 迁移 乱码_迁移Windows下的MySQL时字符乱码问题
- linux挂载安卓手机命令,Android开发中,mount指令的各种用法大全,挂载设备的各种配置...
- 【Opencv】基于色差的简单目标提取
- ArcGIS教程 - 2 ArcGIS基础知识
- linux编译gdal geos,使用nmake编译GDAL+GEOS(傻瓜教程)
- Java小明过桥问题,过桥问题--经典智力题
- 计算机图像处理之形状变换
- TypeScript基础入门之Symbols
- 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
- oracle如何新建用户
- python爬虫实训实验报告_用Pycharm进行scrapy爬虫的实验报告
- xv6源码阅读——中断与异常